DispatcherServlet, HttpMessageConverter

김회민·2023년 2월 11일
0

Spring

목록 보기
2/25

Dispatcher Servlet

  • 모든 Controller의 앞에서 프론트엔드에게 온 요청을 분석하여
    올바른 Controller 에게 전달해주는 역할을 한다. ( FrontController )
  • HttpServlet을 상속받는다.
    • DispatcherServletFrameworkServletHttpServletBeanHttpServlet
  • 스프링 부트는 Dispatcher Servlet을 자동으로 등록하고, 모든 경로(urlPatterns=”/”)에 대해서 매핑한다.

Dispatcher Servlet 구조

  • Handler 조회
  • Handler Adapter 조회
  • Handler Adapter에서 조회된 Handler( Controller )의 handler() 호출
  • ModelAndView 반환
  • viewResolver 호출 후 View 객체 반환
  • render(model) 호출하여 그에 맞는 View를 클라이언트에게 응답

HttpMessageConverter

Argument Resolver

public interface HandlerMethodArgumentResolver {
  boolean supportsParameter(MethodParameter parameter);

  @Nullable
  Object resolveArgument(
          MethodParameter parameter, 
          @Nullable ModelAndViewContainer mavContainer,
          NativeWebRequest webRequest,
          @Nullable WebDataBinderFactory binderFactory
  ) throws Exception;
}
  • 핸들러( 컨트롤러 )에서 필요한 인자를 동적으로 생성
  • 스프링은 30개가 넘는 ArgumentResolver를 기본으로 제공한다. (링크)

Return Value Handler

  • 컨트롤러의 반환 값을 변환
  • 스프링은 10개가 넘는 ReturnValueHandler를 지원한다.
    • ModelAndView, ResponseBody, HttpEntity, String, …

HttpMessageConverter

  • 요청의 경우
    • 다양한 인자를 처리해주는 ArgumentResolver가 있다.
    • 이 ArgumentResolver들이 HttpMessageConverter를 사용해서 필요한 객체를 생성하는 것이다.
  • 응답의 경우
    • @ResponseBody와 HttpEntity를 처리하는 ReturnValueHandler가 있다.
    • 그리고 여기에서 HttpMessageConverter를 호출해서 응답 결과를 만든다.
  • 스프링 MVC
    • @RequestBody@ResponseBody => RequestResponseBodyMethodProcesser
    • HttpEntity => HttpEntityMethodProcesser
profile
백엔드 개발자 지망생

0개의 댓글