JAVA

JSP와 서블릿(Servlet) 그리고 MVC 패턴

yujin0517 2024. 2. 6. 17:32

JSP(.jsp)란 무엇인가?

JSPJava Server Pages의 약자이며, HTML 코드에 Java 코드를 입력하여 동적 웹 페이지를 생성하는 도구이다. 

 

JSP 실행 시, 자바 서블릿(Servlet)으로 변환되고

웹 애플리케이션 서버(WAS)에서 동작하면서 필요한 기능을 수행하고

응답 정보를 웹 페이지와 함께 클라이언트로 응답한다. 

 


 

  • 웹 애플리케이션 서버(WAS, Web Application Server)

웹 애플리케이션 서버는 HTTP 기반으로 동작하고, 웹 서버의 기능을 포함한다. 

웹 서버도 HTTP 기반으로 동작하지만, 정적 리소스만을 제공한다.

웹 애플리케이션 서버는 동적 리소스를 제공하기 때문에 클라이언트에 따라 다르게 웹 페이지를 보여줄 수 있다. 

대표적인 웹 애플리케이션 서버에는 톰캣이 있다. 

 


 

서블릿(Servlet, .java)이란 무엇인가?

→ 서블릿은 Java 코드에 HTML 코드를 작성해 동적으로 웹 페이지를 생성하는 도구이다. 

@WebServlet(name = "myServlet", urlPatterns = "/my")
public class MyServlet extends HttpServlet {
	
    @Override 
    protected void service(HttpServletRequest request, HttpServletResponse response) {
    	//애플리케이션 로직, 비즈니스 로직 구현
    }
}

→ /my URL로 클라이언트가 접속해 요청을 했을 때, 클래스 안에 있는 service 메소드가 자동으로 실행됨.

서블릿을 사용하면 HttpServletRequest, HttpServletResponse 객체를 사용해 HTTP 요청 정보를 편하게 사용할 수 있고, 응답 정보를 편하게 보낼 수 있다. 

이 외에도 서버 TCP/IP 대기 및 소켓 연결, HTTP 요청 파싱, Content-Type 확인, HTTP 메시지 바디 내용 파싱, HTTP 응답 메시지 생성 등의 비즈니스 로직 실행을 제외한 일은 서블릿이 처리해 준다. 

여러 일을 해주는 서블릿이 포함된 WAS를 사용하면 개발자는 비즈니스 로직을 구현하는 일에만 집중하면 된다. 

 

HTTP 요청 시 WAS와 서블릿 동작 모습

 


 

MVC 패턴 등장 배경

웹 브라우저(클라이언트, 사용자)가 정보를 요청할 때, 바로 Java를 사용해 응답할 수 없다.

응답을 받기 위해서는 JSP 혹은 서블릿을 통해 요청을 전달하고, 응답 정보를 받을 수 있다. 

JSP는 HTML 코드를 Java 코드에 작성하기 어렵다는 서블릿의 단점을 보완하기 위해 만들어졌고, 

결국 JSP와 서블릿은 동적 웹 페이지를 만드는 방법에 차이가 있을 뿐 하는 역할은 동일하다.

 

서블릿의 단점을 보완하고자 JSP를 사용하게 되었고, 서블릿과 JSP 모두 각각의 장점이 있다. 

하지만, 서블릿과 JSP는 비즈니스 로직을 처리하는 작업과 화면을 작업하는 코드가 한 페이지 안에 작성되어 있다. 

코드 수정을 할 때, 비즈니스 로직 수정을 위해 페이지 수정을 하다가 화면 코드가 바뀔 수도 있고, 화면 코드를 수정을 위해 페이지를 수정하다가 비즈니스 로직 코드가 바뀔 수도 있다. 

서블릿과 JSP를 사용하면 이러한 한계를 마주하게 된다. 그래서 각자의 장점을 살려 역할을 나눠서 클라이언트의 요청을 받고, 요청에 따른 응답 정보를 보내주는 패턴(방법)이 등장했다. 그 패턴이 바로 MVC 패턴이다. 

 

JSP는 HTML 태그 사용이 편리하기 때문에 클라이언트에게 결과를 보여주는 View 역할을 담당하고, 서블릿은 Java 코드 작성이 편리하고 HTML 코드 작성이 편리하기 때문에 화면과 통신하여 데이터를 받아 처리하고, 결과를 다시 화면에 전달하는 Controller 역할을 담당한다.  

이렇게 MVC 패턴에서 JSP는 View 역할을 담당하고, 서블릿은 Controller 역할을 담당한다. 

각자가 잘할 수 있는 부분을 담당하기 때문에 작업에도 편리하고, 작업 분리로 인해 유지 보수 또한 편리하다. 

Model은 View에 전달할 데이터를 담아두고, View는 Model을 통해 데이터를 참조한다. 

'JAVA' 카테고리의 다른 글

[Java] 인터페이스(Interface)  (0) 2024.02.13
MVC 패턴, MVC 패턴의 한계  (0) 2024.02.08
스레드 풀(Thread Pool)과 Executor  (0) 2024.01.31
스레드(Thread)  (1) 2024.01.27
소수 찾기, 구하기  (0) 2023.02.01