서블릿은 Java 언어를 사용하여 웹애플리케이션의 동적인 콘텐츠를 생성하고 관리하기 위한 기술이다. 서블릿은 웹 서버에서 실행되며, 클라이언트의 요청에 따라 동적인 응답을 생성하는 역할을 한다. 서블릿은 javax.servlet.Servlet 인터페이스를 구현하여 개발되며, 일반적으로 HTTP 요청 및 응답 처리를 위해 사용된다. 서블릿은 웹 애플리케이션의 생명주기(Lifecycle)에 따라 생성, 초기화, 서비스, 소멸되는 과정을 가진다.
서블릿 컨테이너는 서블릿의 생명주기 관리와 서블릿의 실행 환경을 제공하는 런타임 환경이다. 서블릿 컨테이너는 웹 애플리케이션을 관리하며, 클라이언트 요청에 대해 적절한 서블릿을 호출하고, 응답을 반환한다. 서블릿 컨테이너는 웹 서버와 웹 애플리케이션 사이에서 동작하며, 여러 가지 기능을 수행한다. 서블릿 컨테이너는 특정 서블릿이나 필터, 리스너 등을 관리하고, 멀티스레드 처리, 세션 관리, 보안 기능, JSP 컴파일 등을 제공한다.
서블릿 컨테이너는 JavaEE(Java Platform, Enterprise Edition) 및 Java SE(Java Platform, Standard Edition)의 일부인 서블릿 스펙을 준수하여 구현되며, 대표적으로 Apache Tomcat, Jetty, WildFly 등이 있다. 서블릿 컨테이너는 웹 애플리케이션의 실행을 관리하여 개발자가 서블릿 코드에 집중할 수 있도록 도와준다.
Spring boot은 내장된 서블릿 컨테이너로 Apache Tomcat을 사용한다.
따라서 Spring boot 애플리케이션을 실행하면 내부적으로 Apache Tomcat 서블릿 컨테이너가 실행되어 웹 애플리케이션을 실행하고 클라이언트의 요청을 처리한다.
Dispatcher Servlet에서 Dispatch의 의미는 급파하다, 파견 등의 의미로, 해석해보면 받은 요청을 어딘가로 빨리빨리 보내는 서블릿이라는 뜻이다.
Dispatcher Servlet은 Spring Framework에서 웹 애플리케이션의 요청을 중앙에서 관리하고 분배하는 핵심적인 컴포넌트로, Spring MVC 아키텍처를 기반으로 웹 애플리케이션의 요청과 응답을 처리한다. 디스패처 서블릿은 클라이언트의 요청을 처리할 적절한 핸들러(컨트롤러)에게 전달하고, 핸들러의 실행 결과를 뷰로 렌더링하여 동적인 응답을 생성한다.Spring MVC에서 디스패처 서블릿은 'DispatcherServlet' 클래스로 구현되며, 웹 애플리케이션의 'web.xml' 파일이나 Java Cofig를 통해 등록되어 사용된다. 디스패처 서블릿은 Spring Framework의 IoC 컨테이너와 연동하여 컨트롤러와 뷰를 관리하며, 웹 애플리케이션의 흐름을 조정하는 역할을 한다.
1. 요청 라우팅(Routing):
클라이언트의 HTTP 요청을 기반으로 적절한 핸들러(컨트롤러)로 라우팅한다. URL을 분석하여 어떤 핸들러가 해당 요청을 처리할지 결정한다.
2. 핸들러 실행(Handler Execution):
라우팅된 요청을 적절한 핸들러(컨트롤러)에게 전달하고, 핸들러의 메서드를 실행하여 요청을 처리한다. 컨트롤러는 비즈니스 로직을 실행하고, 데이터를 처리한다.
3. 뷰 렌더링(View Rendering):
핸들러의 실행 결과를 바탕으로 적절한 뷰를 선택하고 렌더링한다. 뷰는 동적인 HTML 페이지를 생성하기 위해 사용된다. Thymleaf, JSP, Freemarker 등의 템플릿 엔진과 연동하여 뷰를 생성한다.
4. 인터셉팅(Interception):
요청 전후에 추가 작업을 수행하기 위해 인터셉터(Interceptor)를 활용할 수 있다. 인터셉터는 요청을 가로채어 공통된 작업을 처리하거나 요청을 수정할 수 있는 기능을 제공한다.
5. 오류 처리(Error Handling):
예외가 발생한 경우 예외 처리 메커니즘을 사용하여 적절한 오류 페이지를 렌더링하거나 처리한다.