[Spring] 서블릿(Servlet)/서블릿 컨테이너(Servlet Container)

2025. 10. 2. 16:38·Spring

클라이언트에서 HTTP 요청이 오면, 서버는 해당 요청을 처리해 응답을 반환한다.

HTTP 요청은 어디에서 어떻게 처리될까?

요청을 받고 처리하는 전체 과정은 다음과 같다.

이것만 봐서는 잘 모르겠다 .. 차근차근 알아보자!


 

Servlet(서블릿)

서블릿은 요청과 응답을 처리하는 자바 클래스이다.

원칙적으로는 HTTP뿐만 아니라 SMTP 등 다양한 요청·응답 기반 프로토콜도 지원할 수 있다.

하지만 대부분(Tomcat, Jetty 등)이 HTTP 통신을 처리하는 용도로 Servlet을 사용한다.

Dispatcher Servlet

HTTP 요청 및 응답을 위한 서블릿은 DispatcherServlet을 사용하게 된다.

 

Dispatcher Servlet은 스프링 MVC 요청 처리의 프론트 컨트롤러 역할을 한다.

따라서 모든 HTTP 요청은 Dispatcher Servlet으로 향한다.

 


 

Servlet Container(서블릿 컨테이너)

서블릿 컨테이너는 서블릿들을 관리·실행하고 요청을 전달해주는 엔진을 의미한다.

즉, 서블릿 사양(Servlet API)을 구현한 서버 프로그램을 의미한다.

(※ Servlet API: Servlet, Servlet Context, Servlet Request, Servlet Response,)

 

서블릿 컨테이너는 대표적으로 Tomcat, Jetty, Jeus 등이 존재한다!

 

Servlet Container의 역할

서블릿 컨테이너가 하는 역할을 순서에 따라 확인해보자.

 

1. 서블릿 컨테이너는 서블릿 인스턴스를 생성·초기화하는 역할을 한다.

 

서블릿 컨테이너의 Context 내 Wrapper가 위 역할을 담당한다.

서블릿 컨테이너는 서블릿(Dispatcher Servlet 등)의 인스턴스를 스프링 콘텍스트(Spring Context) 내에 미리 생성해둔다.

 

또한 Wrapper는 Url 패턴과 서블릿 인스턴스를 매핑해주는 테이블을 가지고 있다.

예를 들어, "/" (HTTP 요청) 패턴은 Dispatcher Servlet 인스턴스와 매핑되어있다.

(나중에 실제로 "/" 패턴이 들어왔을 때, Context 내 Mapper가 Dispatcher 인스턴스를 매핑시켜준다.)

 

이후 init()을 통해 서블릿 인스턴스의 초기화를 진행한다.

 

2. Url에 맞게 서블릿을 실행시켜주는 역할을 한다.

  • "/" 패턴이 들어오게 되면 서블릿 컨테이너의 Context 내 Mapper는 Dispatcher Servlet의 인스턴스로 매핑하게 된다.
  • Dispatcher Servlet(인스턴스)은 차례대로 doService() → doDispatch()를 실행한다.

 

3. HandlerMapping과 HandlerAdapter를 통해 컨트롤러와 연결해주는 역할을 한다.

 

doDispatch()는 getHandler() → getHandlerAdapter() → ha.handle()를 차례대로 실행한다.

  • getHandler(): HandlerMapping을 통해 요청을 처리할 컨트롤러를 찾는다.
  • getHandlerAdapter(): 선택된 Handler를 실행할 수 있는 어댑터를 결정한다.
  • ha.handle(): 실제 컨트롤러 메소드를 호출한다.
        → 이후 ModelAndView에 뷰와 모델 정보를 넣어 다음 단계(뷰 렌더링)로 넘긴다!

 

4. 컨트롤러에 맞는 뷰가 호출되면 렌더링을 하고, 응답을 반환해주는 역할을 한다.

 

processDispatchResult()는 render()를 실행하여,

  • 뷰를 렌더링하고(by ViewResolver)
  • Response를 전송한다.

 


 

마무리

서블릿 컨테이너는 HTTP 요청을 처리하는 엔진 역할을 담당한다.

서버가 실행되면 필요한 설정을 로드하고 초기화한 뒤, 클라이언트로부터 들어오는 HTTP 요청을 대기한다.

이후 요청이 들어오면 알맞은 서블릿에 전달하여 응답을 반환하게 된다!

 

Servlet과 Servlet Container를 자세히 알면.. HTTP 요청과 응답의 흐름을 더 잘 이해하게 될 것이다😊

 

👏

 

 

'Spring' 카테고리의 다른 글

[Spring] JDBC / Spring JDBC  (0) 2026.01.25
[Spring] 스프링 시큐리티(Spring Security)  (0) 2025.10.17
'Spring' 카테고리의 다른 글
  • [Spring] JDBC / Spring JDBC
  • [Spring] 스프링 시큐리티(Spring Security)
jjangsudiary
jjangsudiary
jjangsudiary 님의 블로그 입니다.
  • jjangsudiary
    jjangsudiary 님의 블로그
    jjangsudiary
  • 전체
    오늘
    어제
    • 분류 전체보기 (81) N
      • 이모저모 (0)
        • 회고 (0)
      • Development (17) N
        • 개발 공부 (14) N
        • 프로젝트 (2)
      • Android (10)
        • Compose (1)
      • AI (15)
      • Computer Science (25)
        • 네트워크 (8)
        • 데이터베이스 (10)
        • 운영체제 (6)
        • 자료구조 (0)
        • 컴퓨터구조 (1)
      • Java (9)
        • 디자인패턴 (2)
      • Spring (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    os
    자바
    백준
    TensorFlow
    Python
    코딩 테스트
    안드로이드
    db
    머신러닝
    딥러닝
    인공지능
    운영체제
    CS
    파이썬
    java
    database
    baekjoon
    android
    Ai
    프로그래머스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
jjangsudiary
[Spring] 서블릿(Servlet)/서블릿 컨테이너(Servlet Container)
상단으로

티스토리툴바