Spring을 공부하다보면 계속 서블릿을 나오는데 정확히 뭔지를 잘 모르겠다. 알아보자!
서블릿이란 자바로 웹 요청/응답을 처리하기 위해 만들어진 기술이다. HTTP 메시지를 받아서 해석하고, 필요한 로직을 찾아 수행하고, HTTP 응답을 보낸다. 몰랐는데 1999년 쯤 나온 아주 근본 기술이었다.
하지만 이렇게 정의해도 잘 감이 안잡힌다. 대체 구체적으로 무슨 일을 하는걸까?
먼저 HTTP 요청을 처리하기 위해 서버가 하는 일에 대해서 살펴봐야한다.
1. 웹 브라우저는 HTTP 메시지를 만들어서 서버에 요청한다.
2. 서버는 HTTP 메시지를 파싱해야 한다.
3. ContentType에 따라 body를 해석한다.
4. 비즈니스 로직을 실행한다.
5. HTTP 응답 메시지를 생성한다.
6. TCP/IP에 응답 전달, 소켓을 종료한다.
과거에는 4번을 제외한 1~6번의 공통 로직을 모든 개발자가 작성해야한다는 불편함이 있었다. 이를 해결하기 위해서 나온 것이 서블릿이다. 서블릿은 개발자 대신 일련의 공통 과정(HTTP 파싱, HTTP 메시지 생성, 소켓 통신 등)을 모두 알아서 처리해준다.
서블릿이 나온 이후부터 개발자는 비즈니스 로직에만 집중할 수 있게 되었다. 서블릿은 어떠한 과정으로 공통 과정을 처리할까?
아래는 톰캣의 응답구조이다.

1. <form>태그나 AJAX 요청 같은 특정 이벤트가 발생하면 브라우저는 HTTP 요청 메시지를 만든다.
2. 톰캣내의 connector가 소켓을 통해 들어온 패킷(HTTP 메시지)를 받는다.
3. 톰캣은 이 요청을 처리하기 위해 스레드 풀에서 스레드 하나를 빌려와 할당한다.
4. 할당된 스레드는 HTTP 메시지를 파싱하여 자바 객체인 Request / Respons 를 생성한다.
3. 서블릿 컨테이너는 URL을 보고 적절한 서블릿을 찾아 호출하고 Request / Respons 객체를 전달한다.
(Spring boot는 모든 요청을 DispatcherServlet에게 보냄)
4. 서블릿에 정의된 비즈니스 로직이 실행되고, 결과가 있다면 Response 객체에 담는다.
5. 서블릿 컨테이너는 Response 객체에 담긴 정보를 다시 HTTP 응답 메시지로 변환한다.
6. 소켓을 통해 브라우저에게 HTTP 메시지를 보내고, 스레드를 반납한다.
서블릿 컨테이너란?
서블릿 컨테이너는 위에서 언급한 서블릿의 생성, 호출, 종료하는 등 생명 주기를 관리하는 총괄 매니저이다.
Tomcat처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라고 하며, 서블릿 객체는 싱글톤으로 관리한다. 또한 동시 요청을 위한 멀티 스레드 처리를 지원한다.
'IT 정보' 카테고리의 다른 글
| 무상태 (stateless) 웹 계층 (0) | 2024.12.02 |
|---|---|
| macOS에서 파이썬 가상환경 만들기 (0) | 2024.05.09 |
| NVIDIA AI칩, 우위 유지하는 이유 (0) | 2024.03.18 |
| 주가 1000% 오른 '슈퍼마이크로', AI 서버 (0) | 2024.03.16 |
| [kotlin, Java] ByteArrayOutputStream과 ByteBuffer의 차이 (0) | 2023.08.01 |