JavaEE(Java Enterprise Edition)란
JavaEE는 엔터프라이즈 어플리케이션(Enterprise Application)을 개발하는데 필요한 표준 및 기술들을 정의한 것으로 자바 플랫폼 중 하나입니다. JavaSE가 pc에서 구동되는 표준 어플리케이션을 개발하기 위한 플랫폼이었다면 JavaEE는 서버에서 돌아가는 기업용 어플리케이션을 개발하기 위한 플랫폼이며 JavaEE에는 기본적으로 JavaSE의 모든 기술들을 포함하고 있습니다.
JavaEE는 Servlet, JSP, JSTL, JTA, JMS, EJB 등 이 밖에도 엔터프라이즈 어플리케이션을 개발하기 위한 수많은 API 스펙들을 포함하고 있는데 이 중 JSP와 Servlet은 서버에서 동적 컨텐츠를 생성하는데 사용합니다. 동적 컨텐츠에는 HTML, XML, JSON, CSV 등 이 밖에도 구현하는 기술에 따라 엑셀 같은 모든 MIME 타입의 컨텐츠를 만들어 낼 수 있으나 거의 대부분은 HTML을 만들어 내는데에 사용됩니다.


JSP(Java Server Page)란
JSP는 클라이언트의 요청으로부터 동적 컨텐츠를 생성하여 응답해주는 역할을 하기위한 기술입니다.
JSP는 Servlet으로 변환되어 사용되기 때문에 JSP 버전과 Servlet의 버전은 깊은 연관성을 갖게 되는데, 최신 버전의 경우에는 JSP 2.2는 Servlet 3.0, JSP 2.3은 Servlet 3.1 에 기반을 두고 있습니다. JSP와 Servlet 버전에 따라 이를 동작시키는 WAS(Web Application Server)의 버전도 바뀌게 되는데 톰캣의 경우 8버전 기준으로 JSP 2.3, Servlet 3.1 버전을 지원합니다.


JSP와 Servlet의 관계
JSP는 동적 콘텐츠를 생성하는데 사용되는데 거의 대부분은 웹 브라우저에 보내줄 HTML을 생성하게 됩니다.
JSP는 이러한 HTML을 마크업(<HTML> 같은 태그) 형태로 작성하며 얼핏 보면 단순한 HTML을 작성하는것처럼 보이기도 합니다.

그러나 JSP는 작성되어진 이후 JSP 컨테이너에서 이를 인식하게 되고 클라이언트의 요청이 있을 때 이를 처리해줄 JSP를 JSP 컨테이너에서 찾아 Servlet으로 변환 후 Servlet 컨테이너에 등록하게 되는데 실제 동적 컨텐츠를 처리하는 것은 변환된 Servlet입니다.

 

 

 

 

JSP 탄생 배경 (Servlet이 아닌 JSP를 사용하는 이유)
지금까지 설명했듯이 JSP는 결국 Servlet으로 변환됩니다. 그러면 굳이 왜 Servlet을 작성하지 않고 JSP를 작성하는 걸까요?
이는 과거 웹 개발 환경을 이해해야 합니다. 웹 어플리케이션을 개발하는데 있어서 HTML을 작성하는 웹 디자이너와 DB를 다루는 등의 서버쪽 처리를 개발하는 프로그래머는 같이 협업을 하게 됩니다.
아주 작은 소규모 프로젝트나 웹 디자이너가 필요없는 프로젝트의 경우 웹프로그래머가 혼자서 프로젝트를 할 수 있었지만 규모가 있는 프로젝트의 경우에는 사용자에게 보여질 프론트단 개발와 내부적인 처리를 담당할 서버단 개발이 웹디자이너와 프로그래머로 나뉘어 프로젝트를 진행해야 했습니다.

Servlet의 경우 다음과 같은 소스코드를 작성하게 되는데 doGet() 메서드 안에서 out객체를 이용하여 가장 간단한 HTML을 만들어내게 되는 소스입니다.
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html; charset=UTF-8");
        
        PrintWriter out = resp.getWriter();
        
        out.println("<html>"
                        + "<head>"
                        + "        <title>Hello World</title>"
                        + "</head>"
                        + "<body>");
        
        for(int i=0; i < 3; i++){
            out.println("        hello World !!");
        }
        
        out.println("</body>"
                  + "</html>");
                        
        out.close();
    }

 

 

위의 소스는 최종적으로 처리가 끝나면 다음과 같은 HTML 컨텐츠를 만들게 됩니다.

<html>
    <head>
        <title>Hello World</title></head>
        <body>
            hello World !!
            hello World !!
            hello World !!
        </body>
</html>

 

 

이렇게 간단한 수준이면 디자이너와 개발자가 협업하는데 특별한 지정이 없습니다.
그러나 네이버나 쇼핑몰과 같은 웹페이지를 개발할 때에는 소스가 어떨까요? JAVA 소스와 복잡한 HTML 소스가 무지막지하게 뒤섞이게 됩니다. 문제는 그 다음에 발생합니다.

고객의 디자인 수정 요구사항이 들어오게 되는데 웹 디자이너는 요구사항에 따라 HTML 소스를 변경하려 합니다.
그러나 Servlet은 자바 클래스이며 .class 파일임을 의미합니다. HTML 태그 몇 개만 바꾸더라도 다시 컴파일 해야 했으며, 만약 JAVA에 대해 모르는 웹 디자이너가 소스를 한글자라도 잘못 건드렸다면 엄청난 에러가 나게 됩니다.
이로 인해 웹 디자이너가 수정한 디자인을 개발자에 적용해줄 것을 요청하는데 서로 협업을 하는데에 있어서 서로 의견충돌이 일어날 때가 많고 HTML과 JAVA소스가 뒤섞이면서 발생하는 소스의 복잡함 때문에 무엇하나 수정하기가 어려웠습니다. 이러한 문제들이 발생하면서 JSP라는 기술이 등장합니다.

JSP는 웹 디자이너에게 친화적일 수 있도록 마크업 기반의 스크립트로 개발되어지기 때문에 디자이너가 평소 HTML을 다루듯 사용할 수 있습니다.또한 표현식과 스크립트 릿 등 개발자가 소스를 작성할 수 있는 구문도 제공하며 .class 파일이 아니기 때문에 수정이 용이하다는 장점이 있습니다.

 

다음은 위의 서블릿 소스를 JSP로 작성한 것입니다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
<head>
    <title>Insert title here</title>
</head>
<body>
    <% for(int i=0; i < 3; i++){    %>
        hello World !!
    <% }%>
</body>
</html>

 

최근의 개발은 Servlet과 JSP를 동시에 사용하며 Servlet은 요청을 처리하는 컨트롤러로 사용하고 JSP는 처리된 결과를 보여줄 뷰로 사용합니다.

블로그 이미지

도로락

IT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그

,