https://mangkyu.tistory.com/18

1. DispatcherServlet의 정의와 핵심 역할 (Front Controller 패턴과의 연관성 포함)

2. 클라이언트 요청 처리 과정 (주요 컴포넌트 언급)

클라이언트로부터 HTTP 요청이 들어왔을 때 DispatcherServlet을 중심으로 다음과 같은 과정을 거쳐 처리됩니다.

  1. 요청 접수: 클라이언트의 HTTP 요청이 서블릿 컨테이너(예: Tomcat)를 통해 DispatcherServlet에 전달됩니다.
  2. 핸들러 매핑 (HandlerMapping): DispatcherServlet은 등록된 HandlerMapping 구현체들에게 요청 정보(URI, HTTP 메서드 등)를 전달하여 이 요청을 처리할 **핸들러(일반적으로 @Controller가 붙은 클래스의 메서드)**를 찾아달라고 요청합니다. 대표적인 구현체로 RequestMappingHandlerMapping이 있습니다.
  3. 핸들러 어댑터 조회 (HandlerAdapter): 찾은 핸들러를 실행할 수 있는 HandlerAdapter를 조회합니다. 각 핸들러의 유형(예: @RequestMapping 어노테이션 기반 컨트롤러 메서드, HttpRequestHandler 인터페이스 구현체 등)에 맞는 어댑터가 필요합니다. 예를 들어, @RequestMapping 처리 메서드는 RequestMappingHandlerAdapter가 실행합니다.
  4. 핸들러 어댑터 통한 핸들러 실행: DispatcherServlet은 조회된 HandlerAdapter에게 핸들러 실행을 위임합니다.
  5. ModelAndView 반환: 핸들러는 비즈니스 로직 수행 후, 처리 결과 데이터(Model)와 보여줄 뷰의 논리적 이름(View Name)을 담은 ModelAndView 객체를 HandlerAdapter를 통해 DispatcherServlet에 반환합니다.
  6. 뷰 리졸버 (ViewResolver): DispatcherServletModelAndView 객체에서 뷰 이름을 얻어 등록된 ViewResolver 구현체들에게 전달하여, 논리적인 뷰 이름을 실제 물리적인 View 객체로 변환해달라고 요청합니다. (예: InternalResourceViewResolver는 JSP 경로를 찾아주고, JsonViewResolver는 JSON 뷰를 찾아줍니다.)
  7. 뷰 렌더링 (View Rendering): DispatcherServletViewResolver로부터 받은 View 객체에게 모델 데이터를 전달하며 렌더링을 요청합니다.
  8. 응답 생성 및 전송: View 객체는 모델 데이터를 사용하여 최종 응답(예: HTML 페이지 생성, JSON 데이터 직렬화)을 생성하고, DispatcherServlet은 이 응답을 클라이언트에게 전송합니다.

주요 컴포넌트 요약: