https://mangkyu.tistory.com/18
1. DispatcherServlet의 정의와 핵심 역할 (Front Controller 패턴과의 연관성 포함)
DispatcherServlet
은 스프링 MVC 프레임워크의 핵심이자 진입점(Entry Point) 역할을 하는 서블릿(Servlet)입니다. 클라이언트로부터 오는 모든 HTTP 요청을 가장 먼저 받아서 처리할 컨트롤러(핸들러)에게 위임하고, 그 결과를 받아 **적절한 뷰(View)**에게 전달하여 최종 응답을 생성하도록 조율하는 중앙 집중식 컨트롤러입니다.DispatcherServlet
앞단 또는 뒷단에서 처리할 수 있습니다. (주로 필터나 인터셉터를 통해 구현)DispatcherServlet
은 바로 이 Front Controller 패턴의 구현체입니다. 스프링 MVC는 DispatcherServlet
을 통해 Front Controller 패턴을 적용하여 웹 요청 처리 과정을 효율적이고 유연하게 관리합니다.2. 클라이언트 요청 처리 과정 (주요 컴포넌트 언급)
클라이언트로부터 HTTP 요청이 들어왔을 때 DispatcherServlet
을 중심으로 다음과 같은 과정을 거쳐 처리됩니다.
DispatcherServlet
에 전달됩니다.DispatcherServlet
은 등록된 HandlerMapping
구현체들에게 요청 정보(URI, HTTP 메서드 등)를 전달하여 이 요청을 처리할 **핸들러(일반적으로 @Controller
가 붙은 클래스의 메서드)**를 찾아달라고 요청합니다. 대표적인 구현체로 RequestMappingHandlerMapping
이 있습니다.HandlerAdapter
를 조회합니다. 각 핸들러의 유형(예: @RequestMapping
어노테이션 기반 컨트롤러 메서드, HttpRequestHandler
인터페이스 구현체 등)에 맞는 어댑터가 필요합니다. 예를 들어, @RequestMapping
처리 메서드는 RequestMappingHandlerAdapter
가 실행합니다.DispatcherServlet
은 조회된 HandlerAdapter
에게 핸들러 실행을 위임합니다.
HandlerAdapter
는 핸들러(컨트롤러 메서드)를 실행하기 전에 요청 파라미터 바인딩, 유효성 검사(Validation), 메시지 컨버전 등 필요한 전처리 작업을 수행합니다. (ArgumentResolver
등이 이 단계에서 동작)HandlerAdapter
가 실제 핸들러(컨트롤러 메서드)를 호출하여 비즈니스 로직을 수행합니다.ModelAndView
객체를 HandlerAdapter
를 통해 DispatcherServlet
에 반환합니다.
@ResponseBody
가 붙어있거나 ResponseEntity
를 반환하면, 뷰를 찾는 과정을 생략하고 HttpMessageConverter
를 통해 바로 응답 본문(Body)을 생성하여 클라이언트에게 전달합니다. (주로 REST API에서 사용)DispatcherServlet
은 ModelAndView
객체에서 뷰 이름을 얻어 등록된 ViewResolver
구현체들에게 전달하여, 논리적인 뷰 이름을 실제 물리적인 View
객체로 변환해달라고 요청합니다. (예: InternalResourceViewResolver
는 JSP 경로를 찾아주고, JsonViewResolver
는 JSON 뷰를 찾아줍니다.)DispatcherServlet
은 ViewResolver
로부터 받은 View
객체에게 모델 데이터를 전달하며 렌더링을 요청합니다.View
객체는 모델 데이터를 사용하여 최종 응답(예: HTML 페이지 생성, JSON 데이터 직렬화)을 생성하고, DispatcherServlet
은 이 응답을 클라이언트에게 전송합니다.주요 컴포넌트 요약:
DispatcherServlet
: 중앙 컨트롤러, 요청 처리 조율자.HandlerMapping
: 요청 URL과 매핑되는 핸들러(컨트롤러 메서드)를 찾아주는 역할.