본문 바로가기

JSP

WAS와 웹 컨테이너

WAS 서버의 중요 역할

동적 콘텐츠 생성 : 서블릿, JSP, EJB 등을 통해 동적인 웹 페이지와 서비스를 생성한다.

비즈니스 로직 처리 : 애플리케이션의 핵심 로직을 실행하고 처리한다.

데이터베이스 연동 : 데이터베이스와 연동을 통해 데이터를 조회하고 업데이트한다.

트랜잭션 관리 : 사용자 인증, 권한 부여, 데이터 암호화 등 보안을 관리한다.

세션 관리 : 사용자 세션을 유지하고 관리한다.

 

 

웹 컨테이너란?

웹 컨테이너는 WAS의 일부로, 서블릿과 JSP를 실행하고 관리하는 역할을 한다. 웹 컨테이너는 웹 애플리케이션의 요청과 응답을 처리하며, 서블릿과 JSP의 라이프사이클을 관리한다.

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

@WebServlet("/servlet")
public class MyServlet extends HttpServlet {
    @Override
    public void init() throws ServletException {
        super.init();
        System.out.println("Servlet is being initialized");
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        response.getWriter().println("<html><body><h1>Servlet Lifecycle Example</h1></body></html>");
        System.out.println("Handling GET request");
    }

    @Override
    public void destroy() {
        super.destroy();
        System.out.println("Servlet is being destroyed");
    }
}

 

 

 

JSP 코드 살펴보기

<%@ page contentType="text/html;charset=UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <title>Result Page</title>
</head>
<body>
    <h1>Result</h1>
    <p>Message: ${message}</p>
</body>
</html>

 

 

 

웹 컨테이너의 주요 역할

서블릿 및 JSP 관리 : 서블릿과 JSP의 생명주기 (라이프사이클)를 관리한다.

요청 및 응답 처리 : 클라이언트로부터의 HTTP 요청을 받아 처리하고, 응답을 생성하여 클라이언트에게 반환한다.

서블릿 컨테이너 : 서블릿을 로드, 초기화, 실행, 종료한다.

JSP 컨테이너 : JSP를 서블릿으로 변환하고 실행한다.

세션 관리 : 각 클라이언트의 세션을 관리한다.

보안 관리 : 서블릿과 JSP의 보안을 관리한다.

 

 

 

WAS와 웹 컨테이너의 관계

웹 애플리케이션 서버(WAS)는 웹 컨테이너를 포함한 더 큰 개념이다. WAS는 웹 컨테이너 외에도 EJB 컨테이너, 메시징 시스템, 트랜잭션 관리 시스템 등을 포함하여 더 복잡한 비즈니스 로직과 애플리케이션을 처리한다.

호텔과 객실 관리
WAS : 호텔 전체를 운영하는 관리자. 호텔의 모든 운영을 관리하고, 각종 편의시설과 서비스를 제공한다.
웹 컨테이너 : 호텔 내의 객실 관리자. 객실(서블릿과 JSP)을 준비하고 유지 관리하며, 손님(클라이언트)의 요청을 처리한다.
WAS (웹 애플리케이션 서버)
│
├── 웹 컨테이너
│   ├── 서블릿 관리
│   ├── JSP 관리
│   ├── 요청 및 응답 처리
│   └── 세션 관리
│
├── EJB 컨테이너 (Enterprise JavaBeans)
├── 메시징 시스템
├── 트랜잭션 관리 시스템
└── 기타 서비스

 

 

정리

웹 애플리케이션 서버 (WAS) : 웹 애플리케이션을 실행하고 비즈니스 로직을 처리하는 서버. 동적 콘텐츠 생성, 데이터베이스 연동, 트랜잭션 관리, 보안 관리 등을 담당한다.

웹 컨테이너 : 서블릿과 JSP를 실행하고 관리하는 WAS의 일부. 서블릿과 JSP의 생명 주기를 관리하고, HTTP요청과 응답을 처리한다.

 

 

 

간단하게 웹 컨테이너가 하는 일 살펴보기

서블릿 요청 처리 흐름

클라이언트 요청(클라이언트(웹 브라우저)가 URL을 통해 HTTP 요청을 보냅니다)
      ↓
   웹 서버 (웹 서버가 요청을 수신하고, 동적 콘텐츠 요청인 경우 웹 컨테이너로 전달합니다)
      ↓
웹 컨테이너(WAS) (웹 컨테이너가 요청을 처리합니다)
      ↓
서블릿 매핑 확인 (웹 컨테이너가 web.xml 또는 애노테이션을 통해 서블릿 매핑을 확인)
      ↓
서블릿 클래스 로딩 (매핑에 맞는 서블릿 클래스를 찾고 로드합니다)
      ↓
서블릿 인스턴스 생성 (서블릿 클래스의 인스턴스를 생성합니다) 
      ↓
서블릿 초기화 (서블릿의 init 메서드가 호출됩니다)
      ↓
요청 처리 (service 메서드 호출 -> HTTP 요청 메서드에 따라 doGet, doPost 메서드가 호출 된다)
      ↓
응답 생성 (요청 처리 결과를 기반으로 HTTP 응답이 생성)
      ↓
클라이언트로 반환 (생성된 응답이 클라이언트에게 반환됩니다)

 

 

 

JSP 요청 처리 흐름

클라이언트 요청 (클라이언트가 URL을 통해 HTTP 요청)
      ↓
웹 서버 (웹 서버가 요청을 수신, 동적 콘텐츠라면 웹 컨테이너로 전달)
      ↓
웹 컨테이너 (웹 컨테이너가 요청을 처리합니다)
      ↓
JSP 컴파일 확인 (웹 컨테이너가 JSP 파일을 서블릿으로 변환 및 컴파일 확인)
      ↓
서블릿 클래스 로딩 (변환된 서블릿 클래스를 로드)
      ↓
서블릿 인스턴스 생성 (.class 파일로 변환된 서블릿 인스턴스 생성)
      ↓
서블릿 초기화 (jspInit) (서블릿의 jspInit 메서드 호출)
      ↓
요청 처리 (_jspService 메서드 호출 → JSP 페이지 처리)
      ↓
응답 생성 (요청 처리 결과를 기반으로 HTTP 응답 생성)
      ↓            
클라이언트로 반환 (생성된 응답이 클라이언트에게 반환)

 

 

JSP 파일은 결국 서블릿으로 변환되어 동작한다. 하지만 서블릿과 JSP를 분리해서 사용하는 이유는 두 기술이 각각의 용도와 장점이 있기 때문이다. JSP와 서블릿은 각기 다른 상황에서 더 유리하게 사용될 수 있다.

 

 

서블릿과 JSP의 분리 이유

  1. 책임 분리 (Separation of Concerns):
    • 서블릿: 비즈니스 로직과 요청 처리에 집중.
    • JSP: 프레젠테이션(뷰) 계층에 집중하여 HTML 콘텐츠를 생성.
    • 이를 통해 코드의 가독성, 유지보수성, 재사용성을 높일 수 있습니다.
  2. 개발 생산성 향상:
    • JSP는 HTML 작성이 용이하여 프론트엔드 개발자가 쉽게 작업할 수 있습니다.
    • 서블릿은 자바 코드로 작성되어 백엔드 개발자가 복잡한 로직을 처리하는 데 적합합니다.
  3. MVC 패턴 지원:
    • Model-View-Controller(MVC) 패턴에서 서블릿은 주로 컨트롤러 역할을 하고, JSP는 뷰 역할을 합니다.
    • MVC 패턴을 사용하면 애플리케이션 구조를 더 체계적으로 만들 수 있습니다.
728x90

'JSP' 카테고리의 다른 글

Get, Post 요청 방식  (0) 2024.07.03
서블릿 작성, 배포, web.xml 설정에 이해  (0) 2024.07.03
서블릿 Life Cycle  (0) 2024.07.02
서블릿 ( Servlet )  (0) 2024.07.02
웹 서버와 웹 애플리케이션 서버(WAS)  (0) 2024.07.02