Spring Framework에서 DispatcherServlet은 들어온 요청을 가장 먼저 처리하는 프론트 컨트롤러(Front Controller) 입니다.
모든 HTTP 요청은 DispatcherServlet으로 전달되며, 이 서블릿은 요청을 처리하기 위해 여러 컴포넌트와 협력합니다.
이를 통해 웹 애플리케이션에서 요청을 효율적으로 처리하고 응답을 생성할 수 있습니다.
DispatcherServlet의 주요 역할과 동작 원리

- 요청 수신: 모든 HTTP 요청은 먼저 Servlet Container 안에 존재하는 DispatcherServlet에 도달합니다.
- 예전과 같은 경우에는 web.xml에 따로 설정을 해주어야 했으나, SpringBoot가 등장하면서 이를 대신 해줍니다.
- 핸들러 매핑
- DispatcherServlet은 요청을 처리할 적절한 핸들러를 찾기 위해 여러 HandlerMapping 인턴페이스 구현체를 사용합니다
- 핸들러 매핑은 URL 패턴, HTTP 메서드, 요청 매개변수 등을 기반으로 핸들러를 결정합니다.
- 이때 매핑할 정보는 ‘@Controller’ 를 사용한 컨트롤러들을 HashMap 형태로 저장하고 있습니다.
- 이러한 정보를 HandlerExceptionChain으로 래핑하여 반환합니다.
- 이는 추후에 다룰 인터셉터와 관련이 있습니다.
- 가장 대표적인 구현체로는 RequestMappingHandlerMapping이 있습니다.
- 핸들러 어댑터
- DispatcherSerlvet은 선택된 핸들러를 실행하기 위해 적절한 HandlerAdapter를 사용합니다.
- 핸들러 어댑터는 다양한 종류의 핸들러(’@Controller’)를 실행할 수 있도록 돕습니다
- 대표적인 구현체로는 RequestMappingHandlerAdapter가 있습니다.
- ModelAndView
- 핸들러는 보통 ModelAndView를 반환합니다. Rest API를 사용하고 나서는 꼭 ModelAndView가 아니어도 HTTP Status만 반환하는 경우가 많아졌지만, 그 이전에는 뷰 이름과 뷰에 전달할 모델 데이터를 포함한 ModelAndView를 많이 반환하였습니다
- View Resolver
- 반환된 ModelAndView 객체를 사용하여 해당 데이터에 맞는 뷰를 찾기 위해 ViewResolver를 사용합니다
- 대표적인 구현체로는 ThymeleafViewResolver 등이 있습니다
- 프론트 공부 없이 웹페이지를 구현해보고 싶으시다면 타임리프를 찾아보시는 것을 추천드립니다!
- View Rendering
- 뷰 리졸버에 의해 선택된 뷰는 모델 데이터를 사용하여 클라이언트에 반환될 HTML이나 JSON 등의 응답을 생성합니다.
이러한 과정을 거친 후 최종적으로 클라이언트에게 응답을 내려줍니다.