https://jaeyongchoi.tistory.com/13
Spring Boot의 spring-boot-starter-web 모듈에 기본으로 포함되어 있는 embedded tomcat WAS(Web Application Server)에 대하여 알아보겠습니다.
기본적으로 Spring Boot에서 사용하는 Apache Tomcat은 Apache Web Server + Tomcat Server로 구성되어 있습니다.
우선 WAS와 Web Server의 차이점부터 알아보겠습니다.
Web Server는 클라이언트로부터 HTTP 요청을 받아 정적인 컨텐츠(.html, .jpg, .css, ...)를 제공하는 서버를 의미합니다.
즉 Web Server는 서버가 가지고 있는 특정 자원만을 반환하는 역할을 합니다.
WAS는 Web Application Server의 약자로 Web Server와 달리 클라이언트로부터 HTTP 요청을 받아 동적인 콘텐츠를 반환하는 서버 역할을 합니다.
여기서 동적인 컨텐츠란 특정 자원이 아닌 다양한 로직, db 조회 등의 작업이 진행된 후 반환되는 컨텐츠를 의미합니다.
가장 일반적인 이유로는 서버의 부하 방지가 있습니다.
WAS는 사용자의 요청을 다양한 로직과 db 조회를 처리해야 하기 때문에 상당한 컴퓨팅 자원을 소모하게 됩니다. 그렇기 때문에 단순 정적 자원 반환 같은 경우에는 Web Server가 처리하게 하여 부하를 분산시킬 수 있기 때문에 Web Server와 WAS를 같이 사용합니다.
그 외에도 Web Server를 Load balancer로 사용하고 여러 대의 WAS를 두어 부하를 분산 하는 등의 이유가 있습니다.
Spring boot에서는 Apache Web Server + Tomcat Server를 같이 사용하고 있는데요. 보통 Apache Tomcat으로 많이 부릅니다.
Tomcat은 WAS와 Web Server의 역할 모두를 수행할 수 있습니다.
하지만 Tomcat의 Web Server의 처리속도가 Apache Web Server의 처리속도보다 느린 이유로 Spring boot에서는 Apache Web Server와 Tomcat Server를 같이 사용하는 것 같습니다.(?)
그림 출처: https://m.blog.naver.com/tmondev/220731906490
위의 그림은 Apache Web Server와 Tomcat의 연동을 나타냅니다. 흐름은 다음과 같습니다.
오늘은 Spring boot의 starter-web 패키지에 기본으로 포함된 tomcat server에 대하여 구성과 클라이언트의 요청 flow에 대하여 간략하게 알아보았습니다.
이전에는 단순히 tomcat 서버에서 80포트로 요청을 받고 서블릿 생성후 처리, 반환만 생각하고 있었는데 AJP 같은 것을 포함하여 스프링 부트와 tomcat에 대하여 좀 더 자세하게 알게 되었습니다.