java

WAS와 웹 컨테이너의 역할

병호네 2024. 7. 1. 10:46

💡학습 목표💡

WAS와 웹 컨테이너에 대한 개념을 알아 보자. 웹 컨테이너가 하는 일을 살펴 보자.

 

 

 

WAS 서버에 주요 역할(복습)

  1. 동적 콘텐츠 생성: 서블릿, JSP, EJB 등을 통해 동적인 웹 페이지와 서비스를 생성합니다.
  2. 비즈니스 로직 처리: 애플리케이션의 핵심 로직을 실행하고 처리합니다.
  3. 데이터베이스 연동: 데이터베이스와의 연동을 통해 데이터를 조회하고 업데이트합니다.
  4. 트랜잭션 관리: 데이터베이스와의 복잡한 트랜잭션을 관리합니다.
  5. 보안 관리: 사용자 인증, 권한 부여, 데이터 암호화 등 보안을 관리합니다.
  6. 세션 관리: 사용자 세션을 유지하고 관리합니다.

웹 컨테이너란?

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

 

 

서블릿 코드 살펴 보기

 

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>

 

 

웹 컨테이너에 주요 역할

  1. 서블릿 및 JSP 관리: 서블릿과 JSP의 생명 주기(라이프사이클)를 관리합니다.
  2. 요청 및 응답 처리: 클라이언트로부터의 HTTP 요청을 받아 처리하고, 응답을 생성하여 클라이언트에게 반환합니다.
  3. 서블릿 컨테이너: 서블릿을 로드, 초기화, 실행, 종료합니다.
  4. JSP 컨테이너: JSP를 서블릿으로 변환하고 실행합니다.
  5. 세션 관리: 각 클라이언트의 세션을 관리합니다.
  6. 보안 관리: 서블릿과 JSP의 보안을 관리합니다.

 

WAS와 웹 컨테이너의 관계

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

 

호텔과 객실 관리

  • WAS: 호텔 전체를 운영하는 관리자. 호텔의 모든 운영을 관리하고, 각종 편의시설과 서비스를 제공합니다.
  • 웹 컨테이너: 호텔 내의 객실 관리자. 객실(서블릿과 JSP)을 준비하고 유지 관리하며, 손님(클라이언트)의 요청을 처리합니다.

 

💡정리💡

웹 애플리케이션 서버 (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 패턴을 사용하면 애플리케이션 구조를 더 체계적으로 만들 수 있습니다.