백엔드 개발자라면 대답해야 할 100가지 질문

19. Servlet과 JSP의 차이점

ignuy 2023. 10. 10.

Servlet

서버에서 웹페이지를 동적으로 생성하거나 데이터 처리 수행을 위한 자바로 작성된 프로그램이다. servlet은 java 코드 안에 HTML 태그가 삽입된 자바 언어로 되어있다.

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public ThreeParams extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        response.setContentType("text/html");
        printWriter out = response.getWriter();
        
        String title = "Reading Three Request Parameters";
        String docType = "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n";
        
        out.println(docType + 
            "<HTML>\n" +
            "<HEAD><TITLE>" + title + "</TITLE></HEAD>\n" +
            "<BODY BGCOLOR=\"#FDF5E6\">\n" +  
            "<H1 ALIGN=\"CENTER\">" + title + "</H1>\n" + 
            "<UL>\n" + 
            "<LI><B>param1</B>: " + request.getParameter("param1") + "\n" +
            "<LI><B>param2</B>: " + request.getParameter("param2") + "\n" +
            "<LI><B>param3</B>: " + request.getParameter("param3") + "\n" +
            "</UL>\n" +
            "</BODY></HTML>");
        )
    }
}

위처럼, 자바 언어로 웹 애플리케이션을 개발하기 위해 만든 API가 Servlet이다.

JSP(Java Server Page)

HTML 내부에 자바 코드를 삽입하여 웹 페이지를 구성하는 방식이 JSP이다. 서블릿 기반의 서버 스크립트 기술(미리 약속된 규정에 따라 간단한 키워드를 조합하여 입력하면, 서버 실행 시점에 매핑된 코드로 변환되어 실행되는 기술)이다. Servlet을 활용할 때, 불필요한 코드가 너무 많고 유지보수, 개발에 불편하다는 단점을 보완하기 위해 등장하였다.

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Reading Three Request Parameters</TITLE>
<LINK REL=STYLESHEET HREF="JSP-Styles.css" TYPE="text/css">
</HEAD>

<BODY>
<H1>Reading Three Request Parameters</H1>
<UL>
    <LI><B>param1</B>: <%= request.getParameter("param1") %>
    <LI><B>param2</B>: <%= request.getParameter("param2") %>
    <LI><B>param3</B>: <%= request.getParameter("param3") %>
</UL>
</BODY>
</HTML>

차이점?

Servlet이나 JSP는 하는 역할은 동일하지만 만드는 방법에 차이가 있다.

Servlet  JSP
자바 코드로 구현, 컴파일, 배포 키워드가 태그화되어 Servlet에 비해 배우기 쉬움
HTML태그로 문자열(””)스크림으로 처리 자바코드를 <% %>태그 안에 처리
코드가 수정되면 다시 컴파일하고 배포해야 한다. HTML처럼 태그를 사용하여 자바코드도 사용이 가능

개발에서는?

초기에는 웹 애플리케이션 개발에 Servlet만을 사용하였고 이후 JSP 기술이 발표되면서 JSP 형태의 개발이 유행하게 되었다. 아래는 JSP를 활용한 기본적인 구조(JSP Model 1)이다.

WAS의 (1)JSP가 사용자의 요청을 받아 (2)Java Bean(DTO or DAO)를 호출하여 적절한 동적 구성 페이지를 생성하게 된다. 이때, JSP로 작성된 프로그램은 내부적으로 WAS에서 Servlet 파일로 변환된다. Servlet 파일은 JSP 태그를 분해하여 추출하고 다시 순수한 HTML 웹 페이지로 변환하게 된다. (4)변환된 HTML은 클라이언트에게 응답으로 보내진다. 위 구조는 개발이 쉽고 러닝커브가 낮다는 장점이 있지만 화면을 뿌리는 Presentation 로직과 서비스가 돌아가는 Business 로직이 어지럽게 혼재하고 있어 유지 보수가 어렵다는 치명적인 단점이 있다.

 

위 단점을 극복하기 위하여 아래와 같이 JSP와 Servlet을 모두 활용하는 구조(JSP Model 2)로 웹 애플리케이션 개발이 이루어졌다.

위 구조로 Presentation 로직(View)과 Business 로직(Model)을 분리할 수 있게 되었다. View(화면을 뿌리는 영역)에는 HTML 베이스의 JSP를 활용하고 Controller(다른 JAVA 클래스에 데이터를 넘기는 영역)는 JAVA 베이스의 Servlet을 활용, Model(서비스 로직이 돌아가는 영역)은 Java Beans로, DTO, DAO를 통해 Data Storage에 접근하는 역할의 분업화가 일어났고 이로써 MVC 패턴이 완성되었다.

댓글