![[Spring] 서블릿 컨테이너(Servlet Container) 역할](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSKVKi%2FbtsJm5DZ45A%2FEAubO77loEnt2VosFkjFn0%2Fimg.png)
[Spring] 서블릿 컨테이너(Servlet Container) 역할legacy/Spring2024. 9. 2. 10:35
Table of Contents
클라이언트로부터 HTTP 요청이 발생하면 웹 서버(ex. Apache, Tomcat, Nginx, ..)로 전달된다. 서블릿 컨테이너에는 여러 요청을 처리할 수 있도록 여러 개의 서블릿이 등록되어 있다. 서블릿 컨테이너는 웹 서버로부터 HTTP 요청을 받아, 이 요청을 처리할 수 있는 서블릿으로 전달한다.
서블릿(Servlet)은 HTTP 요청을 처리하고 응답을 생성하여 웹 페이지를 동적으로 생성하는 역할을 한다. 기본적으로 init(), service(), destroy()가 정의되어 있다.
- HTTP 요청이 들어오면 요청을 처리할 수 있는 서블릿을 찾는다.
- 서블릿이 처음으로 사용된다면 해당 서블릿을 인스턴스화하여 메모리에 로드한다. 이후에 init()을 호출하여 서블릿을 초기화한다. 초기화 작업은 서블릿 생명주기 동안 1번만 호출되고, 이후 요청에 대해서는 메모리에 로드된(초기화된) 서블릿 인스턴스를 재사용한다.
- 서블릿의 service()를 호출하여 HTTP 요청을 처리한다.
- service()는 요청의 HTTP 메서드에 맞는 doXXX() 호출한다. HTTP 요청 및 응답을 처리하기 위해서 HttpServletRequest와 HttpServletResponse가 사용된다.
- 요청 처리가 완료되면, 서블릿은 클라이언트로 전달할 응답을 생성한다. 응답의 형태로는 HTML, JSON 등의 형태로 생성된다.
- 요청이 처리된 이후에도 서블릿 인스턴스는 메모리에 유지된다.
- 서블릿 컨테이너가 종료된다면 destroy()가 호출된다.
- destroy()가 호출된다면 서블릿이 HTTP 요청을 처리하면서 사용한 자원을 정리하고, GC에 의해 메모리에 로드된 서블릿이 소멸된다.