엔지니어로 가는 길

DispatcherServlet에게 외주를 받는 빈(Bean)들 본문

프로그래밍/Spring

DispatcherServlet에게 외주를 받는 빈(Bean)들

탐p슨 2020. 3. 4. 19:41
728x90

이전 시간에 DispatcherServlet이 Spring Web MVC에서 front controller의 역할을 함을 배웠다. 즉, DispatcherServlet은 문지기가 되어 가장 앞에서 모든 요청(request)을 받은 다음 각각의 요청을 적재적소에 위임한다.

 

여기서 적재적소라 함은 특정한 빈(Bean)을 말한다. DispacherServlet이 요청을 위임하는 각각의 빈은 해당 요청을 잘 처리할 수 있도록 만들어진 객체이다. 프레임워크의 contracts(내장되어 있는 contracts)를 구현하지만 원한다면 우리의 입맛대로 커스터마이즈할 수 있다.

 

오늘은 DispatcherServlet이 감지하는 Bean(정확히는 Bean의 타입 즉, 인터페이스)에 대해 알아 볼 것이다. 다시 말해 어떤 Bean들에게 요청을 위임하는지 그리고 그 Bean은 그 요청을 받아 어떤 일을 하는지에 대해 알아볼 것이다. 먼저 아래의 그림을 통해 대략적인 흐름을 본 뒤 각각에 대해 간략히 알아보자.

 

 

https://subscription.packtpub.com/book/application_development/9781787284661/1/ch01lvl1sec9/introduction-to-spring-web-mvc

 

 

HandlerMapping

 

Interceptor(조만간 배울 기회가 있을 것 같다.) 를 이용하여 요청을 핸들러에게 매핑시킨다. 주요 HandlerMapping의 구현체 RequestMappingHandlerMappingSimpleUrlHandlerMapping가 있다. RequestMappingHandlerMapping는 요청을 @RequestMapping를 이용하여 매핑할 핸들러를 찾으며, SimpleUrlHandlerMapping는 요청을 URI path를 이용하여 매핑할 핸들러를 찾는다.

 

HandlerAdapter

 

HandlerMapping이 적절한 핸들러를 찾았다면, HandlerAdapter는 DispatcherServlet가 그 핸들러를 invoke하는 것을 돕는다. HandlerAdapter의 주목적은 DispatcherServlet가 Handler를 실제로 사용하려고 할 때 알아야 하는 세부사항을 몰라도 되도록 만드는 것이다. 예를 들어, 어노테이션이 붙은 컨트롤러를 invoke 하기 위해 어노테이션을 resolving해야 하는데 HandlerAdapter 덕분에 DispatcherServlet는 이런 세부사항을 몰라도 된다.

 

HandlerExceptionResolver

 

예외를 resolve하는 전략으로, 예외 발생시 적절한 핸들러와 적절한 HTML error 뷰 등에 매핑시키는 일을 한다.

 

ViewResolver

 

핸들러에서 리턴된 문자열(뷰 이름)을 실제 뷰로 연결해주는 일을 한다.

 

LocaleResolver, LocaleContextResolver

 

사용자의 지역에 따라 적절한 뷰를 제공할 수 있도록 Locale 정보를 resolve한다.

 

ThemeResolver

 

웹 앱이 사용할 수 있는 테마를 resolve한다.

 

MultipartResolver

 

파일 업로드와 같은 multi-part 요청 parsing에 대한 추상화에 해당한다.

 

FlashMapManager

 

하나의 request에서 다른 request로 애트리뷰트를 보낼 때 이용할 수 있는 FlashMap을 관리한다.

 

 

 

참고자료

https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-servlet-special-bean-types

728x90
Comments