JSP(JavaServer Pages)와 Servlet(서블릿)이란?

JSP와 Servlet은 레거시 시스템에 주로 사용되어 왔고, 요즘 프로젝트에서는 잘 사용되지 않는다고 합니다.
하지만 어느정도에 대한 이해는 필요하기 때문에 포스팅을 다뤄보려합니다.

 

JSP와 Servlet은 모두 웹 애플리케이션 개발에 사용되는 Java 기술으로 웹(Web)을 조금 더 쉽게 다룰 수 있도록 해주는 확장 기능입니다.

이 둘은 서로 비슷한 점이 많지만 목적과 구현에서 근본적으로 다릅니다.

그래서 이번 포스팅에서는 이 둘의 개념과 차이점에 대해 포스팅해보려합니다.


Servlet

servlet은 웹 서버에서 실행되고 HTTP 요청에 대한 동적인 처리가 가능한 파일 확장자가 .java인 Java 프로그램으로,

웹을 다룰 수 있도록 해주는  "HttpServlet" 클래스를 상속받은 클래스들을 servlet이라고 합니다.

동적 콘텐츠 생성, 비즈니스 로직 호출 및 데이터베이스와의 상호 작용을 담당하며 웹 애플리케이션의 백엔드로 생각할 수 있습니다.

 

servlet은 Java 코드 안에 HTML 코드를 작성합니다.

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet(name = "mySerlvet", urlPatterns = "/my")
public class MyServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html");


        PrintWriter out = resp.getWriter();
        out.println("<html><body>");
        out.println("<h1>MyServlet</h1>");
        out.println("</body></html>");
    }
}

Servlet은 이 처럼 자바 코드 안에 HTML 코드를 작성해야하는데 이는 까다로운 태그 문법으로 오타가 발생할 가능성이 높고, 유지 보수하기도 정말 힘들 것 입니다.

 

그래서, 보완하기 위해 나온 기술이 바로 JSP입니다.

JSP는 HTML 안에 자바 코드를 껴 넣는 방식으로 동적인 웹 페이지를 제공할 수 있습니다.


JSP (JavaServer Pages)

JSP는 Servlet을 보완하고 확장하여 개발자가 HTML 페이지에 Java 코드를 삽입할 수 있게 해주는 기술입니다. ( 파일 확장자: .jsp )

JSP가 실행되면, 웹 서버에 의해 Servlet(.Java)으로 자동으로 변환된 다음 실행되어 동적 콘텐츠를 생성합니다.

 

JSP를 통해 개발자는 HTML 코드를 작성하고 Java 프로그래밍 구성을 사용하여 동적 콘텐츠를 생성할 수 있습니다.

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <title>JSP - Hello World</title>
</head>
<body>
<h1><%= "Hello World!" %></h1>
<h1><%= "Hello World!" %></h1>
<h1><%= "Hello World!" %></h1>

<br/>
<a href="hello-servlet">Hello Servlet</a>
</body>
</html>

위 코드를 보면 HTML 코드 안에 JSP Expression ( <%= expression %> ) 으로 java 코드가 작성된 것을 볼 수 있습니다.

JSP에서는 Java와 다르게 끝에 세미콜론(;)을 붙이지 않습니다.

 


JSP와 Servlet 

Servlet JSP
- Java 코드안에 HTML 코드 작성
- HTML 태그를 문자열(" ")으로 감싸 처리
- 코드가 수정되면 다시 컴파일하고 배포
- HTML 코드 안에 Java 코드 작성
- Java 코드를 <%=   %> 태그 안에 처리
- HTML처럼 태그를 사용해 자바코드를 사용 가능

 

JSP와 Servlet은 각각의 역할을 갖고 함께 작동하여 웹 애플리케이션을 만듭니다.

  • Servlet비지니스 로직을 처리하고 동적 콘텐츠를 생성하며 백앤드의 역할을 담당합니다. ( Controller )
  • JSP HTML 코드 안에 Java 코드를 넣어 Servlet보다 비교적 편해 프론트엔드 역할은 담당하여 사용자 인터페이스를 만드는 데 사용됩니다. ( View )

 

JSP와 Servlet은 다음과 같은 순서로 변환되며 동작하게 됩니다.

  1. JSP 파일(.jsp)을 Servlet 파일 (.java)로 변환 (변환된 JSP파일은 Sevlet 파일로 직접 작성하는 것과 같은 코드로 변환)
  2. 변환된 파일을 다시 컴파일해 .class 파일로 만든 뒤 실행.
  3. 실행 결과는 자바 언언가 모두 사라진 HTML 코드가 되며 즉, 최종적으로 HTML로 변환되어 사용자에게 전달합니다.


Serlvet과 JSP의 한계...

서블릿만으로 개발한다면 뷰(View)화면을 위한 HTML을 만드는 작업이 자바 코드에 섞여서 지저분하고 복잡합니다.

그래서 이 불편한부분을 개선하고자 JSP가 등장하게 되었고,

JSP를 사용함으로써 뷰(View)를 생성하는 HTML을 훨씬 편리하게 짜고 , 중간중간 동적으로 변경이 필요한 부분에만 자바 코드를 적용할 수 있었습니다.

하지만 그래도 문제점이 있습니다..

바로 뷰(View)의 HTML 코드 안에 비즈니스 로직이 존재한다는 점입니다.

이렇게 되면 JSP가 너무 많은 역할을 하기 때문에 프로젝트가 커지면 커질 수 록 유지보수가 정말 힘들어 지게 됩니다.

 

그래서 이러한 문제를 대체하고 MVC 패턴이 등장하게 되었습니다.

MVC 패턴은 비즈니스 로직은 서블릿 처럼 다른곳에서 처리하고, JSP는 목적에 맞게 HTML로 화면을 그리는 일에 집중하도록 분리한 패턴입니다.

MVC 패턴에 대해 더욱 자세한 내용은 아래 포스팅에서 다루겠습니다.

 

MVC 디자인 패턴이란?

MVC란 ? MVC 는 Model - View - Controller의 약자로, 하나의 애플리케이션, 프로젝트를 구성할 때 그 구성요소를 3가지로 구분한 패턴입니다. Model 데이터와 관련된 부분 View 사용자한테 보여지는 부분 Cont

hstory0208.tistory.com


참고자료
https://rios.tistory.com/entry/JAVAJSP-Servlet%EC%84%9C%EB%B8%94%EB%A6%BF%EC%9D%98-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90-%EB%B0%8F-%EA%B5%AC%EC%A1%B0
https://gmlwjd9405.github.io/2018/11/03/jsp.html
https://m.blog.naver.com/acornedu/221128616501