서블릿 컨테이너와 서블릿 생명주기

EunBeen Noh·2025년 4월 11일

SpringAdvanced

목록 보기
7/16

웹 서버

  • 웹 페이지를 사용자에게 전송하는 서버
  • 웹 서버는 데이터를 전송하기 위해 HTTP 프로토콜을 사용한다.

사용자는 브라우저에 URL 주소를 입력하고,
웹 서버는 웹 페이지를 사용자에게 전송하고,
사용자는 웹페이지를 얻게 된다.

서블릿 컨테이너(Servlet Container)

  • 서블릿을 관리해주는 것 (서블릿 생성(init()), 실행(service()), 파괴(destroy()))
  • 서블릿이 클라이언트의 요청을 받아 응답할 수 있도록 웹 서버와 소켓을 만들어 통신
  • 클라이언트는 일반적으로 서버에서 정적인 웹페이지만 요청 가능함.
  • 서블릿 컨테이너는 클라이언트의 요청에 기반한 동적인 웹페이지를 제공하지 위해 서버에서 실행되는 프로그램를 사용하는 것.
  • 따라서, 웹서버와 서블릿들이 상호작용할 때 서블릿 컨테이너는 필수적임
  • ex. Tomcat
[브라우저] --요청--> [웹서버]  
                      └── 정적 자원만 응답 가능 (HTML, CSS 등)

[브라우저] --요청--> [웹서버] + [서블릿 컨테이너]
                                     └── 자바 코드 실행해서 동적 HTML 생성
  • 서블릿 외에도 JSP(JavaServer Pages)라는 기술이 있음
  • JSP는 HTML에 자바 코드를 섞어 동적인 페이지를 쉽게 만들 수 있도록 도와줌
  • JSP는 처음 요청 시 서블릿(Java 코드)으로 변환되고, 이후 서블릿처럼 실행됨
  • 즉, JSP도 서블릿 컨테이너에 의해 실행되며, 주로 사용자에게 보여줄 HTML 화면(View)을 구성할 때 사용

HTTP 요청/응답 흐름

  1. 사용자(클라이언트)가 URL을 클릭 -> HTTP 요청을 Servlet Container로 전송
  2. 요청을 전송받은 Servlet Container는 HttpServletRequest, HttpServletResponse 두 객체를 생성
  3. web.xml은 사용자가 요청한 URL을 분석하여 어느 서블릿에 대해 요청을 한 것인지 find
  4. 해당 서블릿에서 service 메소드를 호출한 후 클라이언트의 POST, GET여부에 따라 doGet() 또는 doPost()를 호출합니다.
  5. doGet() or doPost() 메소드는 동적 페이지를 생성한 후 HttpServletResponse객체에 응답을 전송
  6. 응답이 끝나면 HttpServletRequest, HttpServletResponse 두 객체를 소멸시킵니다.

서블릿 생명주기

  1. 생성 - init()
  • 클라이언트가 처음 요청을 보낼 때, 서블릿이 메모리에 로드되지 않았다면, 서블릿 컨테이너가 서블릿 객체를 딱 1번 생성하고, init() 메소드를 호출
  • 서블릿 초기화 작업을 담당
  1. 실행(요청 처리) - service()
  • 생성된 서블릿 객체는 요청이 들어올 때마다 service() 메소드가 호출됨
  • 요청 방식(GET, POST, DELETE... 등)에 따라 doGet(), doPost(), doDelete() 등을 호출
  • 여러 사용자의 요청에도 동일한 서블릿 객체가 재사용됨 (서블릿 객체는 싱글톤으로 관리)
  1. 소멸 - destroy()
  • 서버가 종료되거나 서블릿이 더 이상 필요 없을 때, 서블릿 컨테이너는 destroy() 메소드를 호출해서 자원 해제 등의 정리 작업을 수행

0개의 댓글