Spring

Dispatcher Servlet이란?

용용띠용 2025. 5. 23. 17:47

Dispatcher Servlet

: Http protocol로 들어오는 모든 요청을 가장 먼저 받아 적합한 Controller에 위임해주는 Front Controller(또는 Central Controller)이다.

 

특징

- HttpServlet을 상속한다.

     - DispatcherServlet -> FrameworkServlet -> HttpServletBean -> HttpServlet 상속구조

- 정적자원, 동적 자원을 분할 처리한다.

     - DispatcherServlet은 요청 처리할 컨트롤러를 우선적으로 찾고 컨트롤러가 없을 경우 정적 자원을 탐색한다.

     => 효율적 리소스 관리 가능

- 요청을 처리하기 위해 스페셜 빈(위임 컴포넌트)에 실제 작업을 위임한다.

 

스페셜 빈

: 스프링 MVC에서 제공하는 주요 빈으로 사용자가 재정의할 수 있다.

1. handlerMapping: 요청 처리할 컨트롤러 찾는 역할

     - @RequestMapping, @GetMapping 등...

2. handlerAdapter: 요청을 컨트롤러로 전달하고 반환값을 처리하는 역할

     - ResponseEntity, String, ModelAndView 등의 반환값에 따라 다르게 처리

3. handlerExceptionResolver: 요청에 대해 컨트롤러 실행 전, 중, 후에 예외 발생 시 이를 잡아내어 처리해주는 역할

     - @ExceptionHandler, @ControllerAdvice 등...

     - Dispatcher Servlet 내부에서 발생한 예외만 처리 가능(Filter, Interceptor, ServletContainer 수준에서의 예외는 처리 불)

4. viewResolver: 컨트롤러가 반환한 View 이름을 View 객체로 변환하는 역할

     - String으로 반환받은 경우 이름에 매핑된 view 객체로 변환

     - example.html, example.jsp 등...

5. LocaleResolver: Locale를 결정하는 역할

     - Locale: 유저의 언어, 지역, 출력 형식 등을 정의하는 문자열

     - message_en.properties, message_ko.properties 등...

     - url 파라미터 기반 로케일 변경하게 재정의 가능(?lang=ko)

 

처리과정

// Spring boot 구동 시 Dispatcher Servlet을 자동 등록, 모든 경로 '/'에 대해 매핑

1. Client Request: Client Request를 Dispatcher Servlet이 수신한다.

2. Handler Mapping: Dispatcher Servlet이 Handler Mapping 목록을 조회하여 요청 URI 에 해당하는 Controller를 찾는다.

3. Handler Adapter: 찾아낸 Controller를 적절한 Handler Adapter를 통해 호출한다.

4. Controller: Controller가 Service를 호출하고 Service 계층에서 비즈니스 로직을 처리한다.

5. Controller가 Response Entity를 반환한다.

6. Handler Adapter가 반환값을 클라이언트가 받을 수 있는 형태로 변환(JSON 등...) 후 Dispatcher Servlet으로 전달한다.

7. Dispatcher Servlet Client에게 응답을 반환한다.