Spring Web MVC Dispathcer의 동작원리에 대해 설명하는 글입니다.
Spring Framework에서 @Controller ,@RestController 각각의 annotation을 붙여서 사용할 경우 어떻게 작동하는지에 대해서 설명합니다.
Spring MVC 패턴에서 기본적으로 사용되는 Servlet으로, 클라이언트 요청이 있을 시, 가장 앞단에서 요청을 가로채어 Controller에 작업을 전다라고 비지니스 로직 처리 후 해당 결과를 클라이언트에게 전달하는 역할을 한다. (Front Controller)
부모 클래스의 HttpServlet을 상속받아 사용한다. 스프링 부트 구동시, DispatcherServlet을 서블릿으로 자동으로 등록하며, 모든 경로에 대해 Mapping 한다. (urlPatterns::"/")
아래의 그림과 같이 작동한다.
대략적인 흐름은 다음과 같다.
만약 @RestController Annotation을 사용할 경우 , 간단하게 흐름을 요약해보자면,
Client -> Dispatcher Servlet -> Handler Mapping(Handler Adapter) -> Controller -> ResponseBody(HttpMessageConverter) -> Client이다.
viewResolver 대신 HttpMessageConverter가(MappingJackson2HttpMessageConverter) 작동해서 객체를 JSON 형식으로 Return한다.
#cf)
Spring은 Client HTTP Accept 헤더와 서버의 컨트롤러 반환 타입 정보 둘을 조합해 적합한 HttpMessageConverter를 선택하여 이를 처리한다.
https://docs.spring.io/spring-framework/docs/3.2.x/spring-framework-reference/html/mvc.html
https://mangkyu.tistory.com/m/49
https://nyximos.tistory.com/61
https://catsbi.oopy.io/441b4af6-e877-4dc5-9695-2983bbe22799#e64f58ba-c6cd-4697-b039-544e77541d03