Spring

서블릿(Servlet)의 생명주기(Lifecycle)

초코너무조코 2025. 2. 20. 11:52
728x90

1. 서블릿이란?

서블릿(Servlet)은 Java EE에서 웹 애플리케이션을 개발할 때 사용되는 서버측 컴포넌트입니다. 클라이언트의 요청을 받아 처리하고, 결과를 응답하는 역할을 합니다. 서블릿은 Java 클래스로 작성되며, 웹 컨테이너(예: Tomcat, Jetty)에 의해 실행됩니다.

2. 서블릿의 생명주기

서블릿의 생명주기는 웹 컨테이너가 서블릿 객체를 생성하고, 초기화하며, 요청을 처리하고, 종료하는 일련의 과정으로 이루어집니다. 주요 단계는 다음과 같습니다.

2.1 서블릿 객체 생성 (init() 호출)

  1. 서블릿이 처음 요청되거나 컨테이너가 시작될 때, 웹 컨테이너는 서블릿 클래스를 로드합니다.
  2. 서블릿 객체를 생성합니다.
  3. init(ServletConfig config) 메서드를 호출하여 서블릿을 초기화합니다.

예제:

@Override
public void init(ServletConfig config) throws ServletException {
    super.init(config);
    System.out.println("서블릿이 초기화되었습니다.");
}

2.2 요청 처리 (service() 호출)

  1. 클라이언트가 요청을 보내면, 컨테이너는 service(HttpServletRequest request, HttpServletResponse response) 메서드를 호출합니다.
  2. service() 메서드는 요청의 HTTP 메서드(GET, POST 등)에 따라 doGet(), doPost() 등의 적절한 메서드를 호출합니다.

예제:

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    out.println("<h1>안녕하세요, 서블릿입니다!</h1>");
}

2.3 서블릿 종료 (destroy() 호출)

  1. 웹 컨테이너가 종료되거나, 서블릿이 제거될 때 destroy() 메서드가 호출됩니다.
  2. destroy()는 리소스를 정리하는 역할을 합니다.

예제:

@Override
public void destroy() {
    System.out.println("서블릿이 종료됩니다.");
}

3. 서블릿 생명주기 흐름 정리

1. 서블릿 클래스 로드 → 2. 서블릿 객체 생성 → 3. init() 실행 → 4. 요청 시 service() 실행 → 5. destroy() 실행 후 종료

4. 결론

서블릿의 생명주기는 init(), service(), destroy() 메서드를 중심으로 동작합니다. 이를 이해하면 서블릿을 효율적으로 관리하고 최적화할 수 있습니다. 또한, 서블릿의 동작 방식은 스프링 프레임워크의 서블릿 기반 컨트롤러(예: @RestController)에도 적용되므로 웹 개발에서 중요한 개념입니다!

728x90