톰캣 내부 작동 원리 알아보기

톰캣을 만들어보며 내부 작동 원리를 이해해보자. 이 포스트는 톰캣 최종분석이라는 책에 기반을 두고있다.

책에서는 톰캣 4.1.12버전과 5.0.18버전을 기반으로 톰캣을 분석하고 설명한다.

톰캣은 서로 다른 다양한 컴포넌트로 이뤄진 복잡한 시스템이다. 이 책에선 우선 톰캣 시스템에 대한 큰 그림을 제시한 뒤, 각 컴포넌트의 간략한 버전을 직접 빌드해본다.

서블릿 컨테이너 작동 원리

서블릿 컨테이너는 복잡한 시스템이다. 서블릿 컨테이너가 서블릿에 대한 요청을 처리할 때 기본적으로 하는 일은 다음 세 가지다.

  • 요청 객체를 생성하고, 호출된 서블릿이 사용할 파라미터, 헤더, 쿠키, 쿼리 스트링, URI와 같은 청보를 요청 객체에 채운다.
  • 서블릿이 웹 클라이언트에 응답을 보낼 때 사용할 응답 객체를 생성한다.
  • 서블릿의 service 메서드에 요청 객체와 응답 객체를 전달해 호출한다.

톰캣은 위의 서블릿 컨테이너가 해야하는 일을 카탈리나라는 이름으로 구현한다.

카탈리나 구성도

카탈리나는 커넥터와 컨테이너라는 2개의 주요 모듈로 구성되어 있다고 생각할 수 있다.

  • 커넥터는 HTTP 요청에 대해서 요청 객체와 응답 객체를 구성하고 컨테이너에 전달한다.
  • 컨테이너는 커넥터로부터 요청 및 응답 객체를 전달받고, 서블릿의 service 메서드를 호출할 책임을 진다.

위의 설명은 전체적인 흐름을 이야기 한것이며, 많은 추가적인 작업이 필요하다.

  • 서블릿을 로드
  • 사용자 인증
  • 해당 사용자 세션 갱신

위와 같은 일들이 service 메서드를 호출하기 전에 수행되어야 한다.

톰캣4와 톰캣5

이 책에서는 톰캣4와 톰캣5를 다룬다. 실제로 톰캣은 작성일 기준으로 11버전까지 출시가 된 상황이다. 하지만 톰캣이 HTTP 요청을 처리하는 메커니즘엔 큰 변화가 없을 것으로 예상된다. 따라서 책의 내용인 톰캣4와 톰캣5를 먼저 공부하고 최신 버전에서 차이점을 공부하면 될 것 같다.

톰캣4와 톰캣5의 차이점은 다음과 같다.

  톰캣4 톰캣5
서블릿/JSP 버전 서블릿 2.3 / JSP 1.2 표준 지원 서블릿 2.4 / JSP 2.0 표준 지원
커넥터   톰캣 4보다 효율적인 기본 커넥터
자원 사용 백그라운드 처리를 위한 자신만의 스레드 모든 백그라운드 처리 담당하는 스레드 별도 사용
간략한 코드   하위 컴포넌트를 찾을 때 좀 더 간략한 코드

시작하기

이제 위와 같은 기본 지식을 기반으로 실제로 톰캣과 유사한 프로그램을 작성해보자.

샘플 코드는 Intellij 샘플 코드에서 확인할 수 있다.

오래 전 책이라서 JAVA 4 버전을 사용하고 있다. 나는 JAVA 17을 사용하면서 deprecated된 코드를 17버전에 맞게 변경해 볼 것이다.

위와 같이 Intellij에서 Gradle프로젝트로 생성한다. 이제 다음 장 부터 간단한 웹 서버를 만들어 보자.

댓글남기기