(스프링에서) Servlet 동작방식
이 이ㅜㄹ어짐서블릿 컨테이너는 스스로 동작하지 않는 서블릿을 관리해주는 컨테이너이다.
서블릿 컨테이너는 클라이언트의 요청을 받고 응답 할 수 있도록 웹 서버와 소켓으로 통신한다. 톰캣이 서블릿 컨테이너의 대표적인 예이다.
Servlet Container로 사용할 수 있는 것들은 크게 Tomcat
, Jetty
, Undertow
, Netty
가 있다고 한다.
강력한 커뮤니티, 다양한 성공 사례 등 Java 진영에서 가장 널리 사용되는 WAS라고 한다. Spring boot에서도 기본 내장 WAS는 Tomcat이다.
경량 WAS. 적은 메모리를 사용하고 가벼운 이점이 있고 속도가 빠름
소형장비, 소규모 프로그램에 내장하여 사용하는 목적
대규모 트래픽에 취약하다는 단점이 있음
Blocking과 non-blocking API를 모두 안정적으로 제공하는 유연한 고성능 웹 서버. 대규모 트래픽에서 Tomcat보다 안정적으로 평가받는다고 한다.
Async, Event-Driven 방식 네트워크 어플리케이션 프레임워크.
Undertow도 Netty기반
Spring boot 2 부터 Webflux Framework를 사용하면 Reactive Programming을 할 수 있음. Webflux를 사용하면 기본 내장 WAS는 Netty가 됨
우선 Jetty는 대규모 트래픽에 취약하니 제외하자. Tomcat보다 대규모 트리팩에서 Undertow가 더 안정적이라고 한다. 하지만 우리는 Webflux를 사용하지 않고 우선 스프링 MVC를 이용한 웹 프로그래밍이 학습의 주 목적이다. 따라서 Netty나 Undertow보단 레퍼런스가 많은 Tomcat을 우선 사용하고, 추후 Netty나 Undertow를 고려해보아도 괜찮을거 같다.
Servlet(인터페이스) - HttpServlet - FrameworkServlet - DispatcherServlet 의 상속구조를 가지고 있음. 스프링 MVC에서 사용하는 서블릿 구현체라고 생각하면 될거 같음.
HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아 적합한 컨트롤러에 위임해주는 프론트 컨트롤러(front controller)
클라이언트로부터 요청이 들어오면 Tomcat과 같은 서블릿 컨테이너가 요청을 받음.
그리고 모든 요청을 프론트 컨트롤러인 디스패처 서블릿이 가장 먼저 받음
디스패처 서블릿은 공통적인 작업을 먼저 처리한 후 해당 요청을 처리해야 할 컨트롤러를 찾아 작업을 위임
서블릿 컨테이너의 제일 앞에서 서버로 들어오는 클라이언트의 모든 요청을 받아서 처리해주는 컨트롤러
필터 인터셉터 포스트에 DispatcherServlet의 동작방식을 자세히 설명함.
인터셉터 동작방식이 전체적인 DispatcherServlet 동작방식을 따라가며 설명헀기에 해당 포스트를 보면 된다.
https://mangkyu.tistory.com/18
https://tecoble.techcourse.co.kr/post/2021-05-23-servlet-servletcontainer/
https://gofnrk.tistory.com/73