ABOUT ME

본 게시물은 PC 버전에 최적회되어 있습니다.

Today
Yesterday
Total
  • [Spring] 서블릿 컨테이너(Servlet Container) 역할
    legacy/Spring 2024. 9. 2. 10:35

     

    클라이언트로부터 HTTP 요청이 발생하면 웹 서버(ex. Apache, Tomcat, Nginx, ..)로 전달된다. 서블릿 컨테이너에는 여러 요청을 처리할 수 있도록 여러 개의 서블릿이 등록되어 있다. 서블릿 컨테이너는 웹 서버로부터 HTTP 요청을 받아, 이 요청을 처리할 수 있는 서블릿으로 전달한다.

     

    서블릿(Servlet)은 HTTP 요청을 처리하고 응답을 생성하여 웹 페이지를 동적으로 생성하는 역할을 한다. 기본적으로 init(), service(), destroy()가 정의되어 있다.

    1. HTTP 요청이 들어오면 요청을 처리할 수 있는 서블릿을 찾는다.
      1. 서블릿이 처음으로 사용된다면 해당 서블릿을 인스턴스화하여 메모리에 로드한다. 이후에 init()을 호출하여 서블릿을 초기화한다. 초기화 작업은 서블릿 생명주기 동안 1번만 호출되고, 이후 요청에 대해서는 메모리에 로드된(초기화된) 서블릿 인스턴스를 재사용한다.
    2. 서블릿의 service()를 호출하여 HTTP 요청을 처리한다.
      1. service()는 요청의 HTTP 메서드에 맞는 doXXX() 호출한다. HTTP 요청 및 응답을 처리하기 위해서 HttpServletRequestHttpServletResponse가 사용된다.
      2. 요청 처리가 완료되면, 서블릿은 클라이언트로 전달할 응답을 생성한다. 응답의 형태로는 HTML, JSON 등의 형태로 생성된다.
      3. 요청이 처리된 이후에도 서블릿 인스턴스는 메모리에 유지된다.
    3. 서블릿 컨테이너가 종료된다면 destroy()가 호출된다.
      1. destroy()가 호출된다면 서블릿이 HTTP 요청을 처리하면서 사용한 자원을 정리하고, GC에 의해 메모리에 로드된 서블릿이 소멸된다.
Designed by Tistory.