Tomcat 은 어떻게 동작할까? - Spring 과의 연동을 중점으로 (1)

정원식·2023년 12월 16일
0

23년 5월에 작성한 글입니다.

개요

  • 본 시리즈에서는 사용자의 요청이 톰캣에서 어떻게 처리되어 우리가 작성한 비즈니스 로직에 도달하는지에 대해 다룹니다.
  • 첫번째 편에서는 Servlet 과 Tomcat 의 주요 개념을 정리합니다.

사용한 버전

  • Servlet: 4.0.1
  • Tomcat: 9.0.60
  • Spring Boot: 2.6.6
  • Spring WebMvc: 5.3.18

Servlet 개념 정리

Java Servlet

  • Servlet
    • Java 기반의 웹 컴포넌트로 동적 콘텐츠 를 생성
    • Servlet Container 에 의해 관리됨
  • Servlet Container
    • Web Application Server 의 일부로 수명 주기 동안 Servlet 을 포함하고 관리
    • HTTP/1.1 과 HTTP/2 를 지원해야함
    • Web Application Server 에서 요청을 받아 Servlet Container 로 넘기고 Servlet Container 는 적절한 Servlet 을 찾아 실행

Servlet Context

  • Servlet Config
    • Servlet Container 가 Servlet 초기화시에 사용
      • Servlet 에게 초기화 파라미터 제공
      • Servlet 에게 Servlet Context 에 대한 접근 제공
  • Servlet Context
    • 특정 경로에 설정될수 있음 (http://example.com/context1, http://example.com/context2)
    • Servlet 의 런타임 환경 정보를 지님
    • Servlet, Filter, Listener 생성, 설정 가능
  • Web Application
    • Servlet, JSP 페이지, 클래스, 정적 문서 등의 모음
    • Servlet Context 와 1대1 관계를 지님
    • Web ARchive format (WAR) 파일로 패키징 될수 있음

톰캣 용어 정리

Server

  • Server
    • 전체 카탈리나 서블릿 컨테이너를 의미합니다.
      • Catalina: 톰캣에서 제공하는 서블릿 컨테이너
    • 루트 컴포넌트 입니다.
    • 1..N 개의 Service 를 가집니다.
  • Service
    • 1..N 개의 Connector 와 1개의 Engine 으로 구성됩니다.
    • Server 안에 속합니다.
  • Connector
    • 클라이언트와의 통신을 담당
    • HTTP1.1 Conenctor, HTTP2 Connector, AJP Connector 존재
    • Coyote: 톰캣에서 제공하는 HTTP Connector

Container

  • Engine
    • 전체 카탈리나 서블릿 엔진을 의미하는 컨테이너 입니다.
    • Service 에 속하여 하나 이상의 Connector 로부터 모든 요청을 수신 및 처리하여 응답합니다.
    • 구현에 따라 Host 혹은 Context 를 자식 컨테이너로 가집니다.
  • Host
    • 카탈리나 서블릿 엔진에서 가상 호스트를 나타내는 컨테이너 입니다.
    • 네트워크 이름을 가집니다. (ex: www.example.com)
    • 주로 부모 컨테이너로는 Engine 을 자식 컨테이너로는 Context 를 가집니다.
  • Context
    • 카탈리나 서블릿 엔진에서 Servlet Context 를 (Web Application) 나타내는 컨테이너 입니다.
      • 해당 Web Application 은 WAR 파일에 기반합니다.
    • 특정 경로에 설정되어 클라이언트로부터 요청이 왔을때, 선택되며
      선택된 Context 는 WAR 파일에 정의된 서블릿 매핑에 따라 서블릿을 호출합니다.
  • Loader
    • Wab Application 클래스 로더로서 필요한 클래스와 리소스를 로딩합니다.
      • /WEB-INF/classes 의 클래스 파일
      • /WEB-INF/lib 의 JAR 파일
  • Valve
    • 컨테이너(Engine, Host, Context) 내에서 요청을 처리합니다.
    • 파이프라인으로 구성되어 서로 연결됩니다.
    • 다양한 Valve 구현체가 존재합니다.
      • AccessLogValve
      • RemoteAddrValve
      • ErrorReportValve
      • HealthCheckValve
      • ...
  • Realm
    • 사용자의 이름, 패스워드, 권한 정보를 저장합니다.
    • 다양한 인증정보 시스템과 통합하여 컨테이너에서 관리하는 보안 구성을 만들수 있습니다.

결론

  • 사용자의 요청은 아래의 과정을 거쳐 Servlet 에 도달합니다.

Servlet 스펙

Tomcat 스펙

Reference

profile
매일매일 성장하고 싶은 백엔드 개발자입니다.

0개의 댓글