[톰캣 최종분석 00] 전체 개요
톰캣 내부 작동 원리 알아보기
톰캣을 만들어보며 내부 작동 원리를 이해해보자. 이 포스트는 톰캣 최종분석이라는 책에 기반을 두고있다.
책에서는 톰캣 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
프로젝트로 생성한다. 이제 다음 장 부터 간단한 웹 서버를 만들어 보자.
댓글남기기