-
Notifications
You must be signed in to change notification settings - Fork 0
Description
📝 서블릿 컨테이너 이해하기
📚 주제
서블릿 컨테이너의 역할과 동작 원리를 이해하고, 스프링 프레임워크와의 관계를 알아봅시다. 🙇♀️
🎯 스터디 목표
- 서블릿 컨테이너의 정의와 주요 기능를 이해한다.
- 클라이언트 요청이 서블릿 컨테이너를 거쳐 처리되는 흐름을 이해한다.
- 서블릿 컨테이너 기반의 비동기 요청 처리 방식을 이해한다.
📖 핵심 내용
1. 서블릿이란? ⭐️⭐️⭐️
Serv(Service) + let(작은 것을 의미하는 접미사) : 작은 서비스 컴포넌트
서블릿은 Java 기반의 웹 애플리케이션을 개발하기 위해 사용되는 서버 측 컴포넌트 입니다.
클라이언트의 요청을 처리하고, 동적인 응답을 생성하여 반환합니다.
주요 메소드
init(): 서블릿 초기화 작업 수행service(): 요청에 따라 작업 수행destroy(): 서블릿이 소멸되기 전 정리 작업 수행
2. 서블릿 컨테이너란? ⭐️
서블릿 컨테이너는 Java Servlet을 실행하고, 클라이언트 요청을 처리하며 서블릿의 생명주기를 관리하는 역할을 하는 서버 환경입니다.
주요 기능
- HTTP 요청/응답 관리
- 서블릿 매핑 및 관리
- 요청 URL과 서블릿 매핑 설정을 기반으로 적합한 서블릿을 호출
- 서블릿 생명주기 관리
- 서블릿의 초기화, 실행, 소멸 과정을 관리
- 멀티스레드 지원
- 클라이언트 요청마다 별도의 스레드를 생성하여 병렬로 처리
- JSP 처리
- JSP를 서블릿으로 변환하고 실행
- 비동기 처리 지원
- 비동기 요청 처리와 블록킹 I/O 감소를 통해 서버 자원 효율성을 향상
대표적인 서블릿 컨테이너
- Apache Tomcat
- Jetty
3. 서블릿 컨테이너의 동작 원리 ⭐️
클라이언트 요청 -> 웹 서버 -> 요청 매핑 -> 서블릿 호출 -> 응답 생성
- 클라이언트 요청
- 웹 서버에 요청 도착
Apache, Nginx와 같은 웹 서버가 요청을 서블릿 컨테이너에 전달합니다. - 요청 매핑
서블릿 컨테이너는 요청 URL과 서블릿 매핑 설정을 확인하여 적합한 서블릿을 찾습니다. - 서블릿 호출
서블릿 컨테이넌는 적합한 서블릿 객체를 생성 또는 재사용 후 sevice() 메서드를 호출합니다. - 응답 생성
서블릿은 요청을 처리한 결과를 HTTP 응답으로 작성하고 클라이언트에게 반환합니다.
4. 서블릿 컨테이너 기반 비동기 요청 처리 방식
서블릿 컨테이너는 기본적으로 요청당 하나의 스레드를 할당!
- 비동기 처리 시작
서블릿에서HttpServletRequest.startAsync()를 호출하여 비동기 처리를 시작합니다. - 별도의 스레드에서 작업 수행
비동기 컨텍스트AsyncContext를 통해 요청 처리를 다른 스레드로 넘깁니다. - 응답 완료
작업이 완료되면AsyncContext.complete()를 호출하여 클라이언트에게 응답을 반환합니다.
5. 스프링 프레임워크와 서블릿 컨테이너의 관계
서블릿 컨테이너는 Dispatcher Servlet을 통해 스프링 애플리케이션이 요청과 응답을 처리할 수 있는 환경을 제공합니다.

🙋♀️ Q&A
-
Q. 서블릿은 자바 환경에 한정된 개념인가요?
-
A. 네, 서블릿은 Jakarta EE 사양에 따라 정의된 Java 기반 서버 측 컴포넌로 Java 환경에 한정됩니다. 다른 언어에서의 유사한 개념으로는 Python의 WSGI, Node.js의 미들웨어 등이 존재합니다.
-
Q. Tomcat은 웹 서버인가요? 서블릿 컨테이너인가요?
-
A. Tomcat은 서블릿 컨테이너로 설계되었지만, 웹 서버의 기능도 포함하고 있습니다. 하지만 고성능의 정적 콘텐츠 제공을 위해서는 Nginx나 Apache HTTP Server와 함께 사용하는 것이 일반적입니다.
💡 참고 자료:
스프링 DispatcherServlet
Servlet Container and Spring Framework