[서블릿과 JSP] 8. 톰캣(서블릿 컨테이너)은 실제로 무슨 일을 하는가

2026. 3. 29. 17:30·Web/Web Basics

 

서블릿을 공부하면서 가장 많이 헷갈리는 지점은 이거다.

  • “내가 new SampleServlet() 한 적이 없는데, 객체는 누가 만들지?”
  • “요청이 오면 doGet/doPost는 누가 호출하지?”
  • “request/response는 누가 만들지?”

결론은 단순하다.

톰캣(서블릿 컨테이너)이 만든다
톰캣(서블릿 컨테이너)이 호출한다
톰캣(서블릿 컨테이너)이 요청과 응답을 연결해준다

 

이걸 추상적으로 끝내면 또 헷갈린다.
그래서 “요청 1건이 들어왔을 때 톰캣이 내부에서 하는 일을” 흐름으로 정리한다.

 

 

톰캣은 “HTTP 요청을 서블릿 실행으로 연결하는 실행 엔진”이다

브라우저는 HTTP 요청 메시지를 보낸다.
하지만 서블릿 코드는 그냥 자바 클래스이다.

즉 톰캣은 이 둘을 이어주는 역할을 한다.

  • HTTP 메시지를 받아서 해석한다
  • 어떤 서블릿이 처리할지 결정한다
  • request/response 객체를 만들어서 전달한다
  • 서블릿 메서드를 호출한다
  • 서블릿이 만든 결과를 HTTP 응답 메시지로 전송한다

이 과정이 있어야 자바 코드가 “웹 요청 처리 코드”가 된다.

 

 

요청 1건 처리 흐름을 단계로 보면 이렇게 된다

1) 브라우저가 HTTP 요청을 보낸다

사용자가 URL을 입력하거나 버튼을 누르면
브라우저는 서버로 HTTP 요청을 보낸다.

이때 요청은 “TCP 연결 위에서” 들어온다.
(HTTP는 TCP 기반 위에서 동작한다)

2) 톰캣이 연결을 받고 HTTP 메시지를 파싱한다

톰캣은 들어온 바이트 데이터를 읽어서
HTTP 요청 라인/헤더/바디 구조로 파싱한다.

  • Method: GET/POST
  • Path: /sample 같은 경로
  • Headers
  • Body(있다면)

3) (있다면) 필터(Filter)를 먼저 실행한다

요청을 서블릿에 바로 넘기기 전에
설정된 필터가 있으면 필터가 먼저 실행된다.

필터는 공통 처리(인코딩 처리, 로그인 체크 등)에 쓰인다.
흐름상 톰캣이 이 단계도 관리한다.

4) URL 매핑을 보고 “어떤 서블릿이 처리할지” 결정한다

톰캣은 요청 경로(/sample)를 보고
그 경로에 매핑된 서블릿을 찾는다.

예전에는 web.xml에 매핑을 등록했고,
요즘은 @WebServlet("/sample") 같은 어노테이션 기반 매핑이 흔하다.

중요한 건 매핑 테이블을 톰캣이 가지고 있다는 점이다.

5) 서블릿 인스턴스가 없으면 생성하고 init()을 호출한다

해당 매핑의 서블릿 인스턴스가 아직 없다면,
톰캣이 서블릿 클래스를 로딩하고 객체를 만든다.

그리고 서블릿 인스턴스당 한 번만 init()을 호출한다.

이게 “서블릿은 최초 요청 시 생성되고 재사용된다”의 핵심이다.

(설정에 따라 load-on-startup이면 이 단계가 서버 시작 시점으로 당겨질 수 있다)

6) 요청마다 HttpServletRequest/HttpServletResponse 객체를 만든다

서블릿 객체는 재사용되지만
요청 정보는 매번 다르다.

그래서 톰캣은 요청 1건마다

  • HttpServletRequest 구현체
  • HttpServletResponse 구현체

를 새로 만들어서 준비한다.

이게 “request/response는 요청마다 다르다”의 근거이다.

7) 스레드가 service() → doGet()/doPost()를 호출한다

톰캣은 스레드 풀의 스레드를 하나 할당해서
서블릿을 실행한다.

  • HttpServlet의 service()가 호출되고
  • 그 안에서 GET이면 doGet()
  • POST면 doPost()

로 분기된다.

즉 개발자는 “doGet/doPost를 구현”하면 되고
호출은 톰캣이 한다.

8) 서블릿/JSP가 만든 결과를 HTTP 응답으로 전송한다

서블릿은 response에

  • 상태코드
  • 헤더
  • 바디(HTML/JSON 등)

를 채운다.

톰캣은 이 내용을 모아서
실제 HTTP 응답 메시지 형태로 만들어 브라우저로 전송한다.

9) 요청 처리가 끝나면 자원을 정리하고 다음 요청을 받는다

응답까지 전송되면 요청 1건 처리는 끝난다.
그리고 톰캣은 다음 요청을 처리할 준비를 한다.

이게 HTTP의 비연결성/무상태성과 연결되는 구조이다.

 

 

정리

  • 톰캣은 HTTP 요청을 서블릿 실행으로 연결해주는 서블릿 컨테이너이다
  • URL 매핑을 보고 서블릿을 찾고, 없으면 생성/init한다
  • 요청마다 request/response 객체를 새로 만들어 전달한다
  • 스레드가 service() → doGet/doPost를 호출한다
  • 서블릿이 만든 response를 HTTP 응답 메시지로 전송한다

'Web > Web Basics' 카테고리의 다른 글

[MVC와 웹 흐름 제어] 3. RequestDispatcher와 forward  (0) 2026.03.29
[MVC와 웹 흐름 제어] 1.JSP 단독 사용의 한계: 왜 Controller가 필요해지는가  (0) 2026.03.29
[서블릿과 JSP] 7. JSTL은 왜 필요하고, <c:forEach>는 무엇인가  (0) 2026.03.29
[서블릿과 JSP] 6. 서블릿이 만든 데이터를 JSP가 읽는 방식  (0) 2026.03.29
[서블릿과 JSP] 5. request.getParameter()를 JSP에서 쓰는 방법  (0) 2026.03.29
'Web/Web Basics' 카테고리의 다른 글
  • [MVC와 웹 흐름 제어] 3. RequestDispatcher와 forward
  • [MVC와 웹 흐름 제어] 1.JSP 단독 사용의 한계: 왜 Controller가 필요해지는가
  • [서블릿과 JSP] 7. JSTL은 왜 필요하고, <c:forEach>는 무엇인가
  • [서블릿과 JSP] 6. 서블릿이 만든 데이터를 JSP가 읽는 방식
sqaxe1
sqaxe1
woojoo-devlog 님의 블로그 입니다.
  • sqaxe1
    Woojoo's Devlog
    sqaxe1
  • 전체
    오늘
    어제
    • 분류 전체보기 (148)
      • Backend (9)
        • Servlet (7)
        • Spring (2)
      • Frontend (1)
      • CS (0)
      • Book (33)
        • 자바 웹 프로그래밍 Next Step (30)
        • 테스트 주도 개발: 고품질 쾌속개발을 위한 TDD.. (1)
        • 성공과 실패를 결정하는 1%의 네트워크 원리 (2)
      • Engineering (0)
        • Testing (0)
      • Infra (6)
        • AWS (6)
      • Java (4)
      • Network (1)
      • 김영한 (28)
        • 자바 입문 (8)
        • 실전 자바 - 기본편 (6)
        • 실전 자바 - 중급편 (10)
        • 실전 자바 - 고급편 (4)
      • Web (39)
        • Web Basics (39)
      • Project (24)
        • NeoSquare (0)
        • Memo Evolution (24)
      • 정보처리기사 (0)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    aws
    java
    개발서적
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
sqaxe1
[서블릿과 JSP] 8. 톰캣(서블릿 컨테이너)은 실제로 무슨 일을 하는가
상단으로

티스토리툴바