1. DispatcherServlet의 소개 및 역할
- DispatcherServlet은 클라이언트로부터 최초로 요청을 받는 프론트 컨트롤러 역할을 하는 서블릿으로, 이 곳을 기점으로 작업을 분배하게 된다.
- Spring의 웹 기술을 구성하는 다양한 전략을 DI로 구성해서 동작 방식을 확장하도록 만들어져 있다.
- 대부분의 상황에 적절하게 사용될 수 있는 전략들이 기본적으로 설정되어 있으며, 이 디폴트 전략들은 spring-webmvc.jar에 들어 있는 DispatcherServlet.properties 설정파일로부터 가져온다.
- 설정 파일에 명시적으로 DispatcherServlet의 전략 bean을 등록하면 DispatcherServlet의 디폴트 전략은 무시된다.
- Spring 3.0에서는 최신 기술을 적용한 전략들을 한 번에 등록해주는 전용 태그도 제공된다.
2. 여러가지 DI 전략들
1) HandlerMapping
- URL과 요청 정보를 기준으로 어떤 컨트롤러를 사용할 것인지 결정
- HandlerMapping 인터페이스를 구현
- 기본적으로 BeanNameUrlHandlerMapping과 DefaultAnnotationHandlerMapping 2가지의 핸들러 매핑이 지정되어 있음
※ 요청의 처리 단위로 클래스보다 메소드가 선호되기 시작하면서, Spring 3.1에서 DefaultAnnotationHandlerMapping 전략이 RequestMappingHandlerMapping 전략으로 대체됨. RequestMappingHandlerMapping은 @RequestMapping 메소드의 정보를 추상화한 HandlerMethod 타입의 오브젝트를 핸들러 어댑터에 전달하는 전략을 사용함
2) HandlerAdapter
- HandlerMapping을 통해 선택한 컨트롤러를 호출할 수 있도록 지원
- 컨트롤러 메소드의 파라미터에 맞게 클라이언트의 요청 정보를 추출해서 제공함
- 기본적으로 HttpRequestHandlerAdapter, SimpleControllerHandlerAdapter, AnnotationMethodHandlerAdapter 3가지의 핸들러 어댑터가 지정되어 있음
※ Spring 3.1에서 AnnotationMethodHandlerAdapter 전략이 RequestMappingHandlerAdapter 전략으로 대체됨. 핸들러 매핑이 전달해준 HandlerMethod 오브젝트의 정보를 이용해 컨트롤러 메소드를 실행하는 전략을 사용할 수 있음
- 핸들러 매핑과 핸들러 어댑터는 다양한 조합으로 구성될 수 있다. 여러 핸들러 매핑이 하나의 어댑터와 대응될 수도 있고, 하나의 핸들러 매핑이 여러 어댑터와 대응될 수도 있다.
3) HandlerExceptionResolver
- 예외가 발생했을 때의 처리를 담당
- 예외의 종류에 따라 특정 에러 페이지를 표시하거나, 관리자에게 통보하는 식의 처리가 가능하다.
- 등록된 HandlerExceptionResolver 중에서 발생한 예외에 적합한 것을 찾아서 예외처리를 위임한다.
- 기본적으로 AnnotationMethodHandlerExceptionResolver, ResponseStatusExceptionResolver, DefaultHandlerExceptionResolver 3가지의 예외 처리기가 지정되어 있음
※ Spring 3.1에서 AnnotationMethodHandlerExceptionResolver 전략이 ExceptionHandlerExceptionResolver 전략으로 대체됨
4) ViewResolver
- 컨트롤러가 반환한 view 이름을 참고하여 적절한 뷰 오브젝트를 탐색
- 기본적으로 InternalResourceViewResolver가 지정되어 있음
- 뷰의 종류에 따라 적절한 뷰 리솔버를 추가해야 한다.
5) LocalResolver
- 지역 정보를 결정
- 기본적으로 AcceptHeaderLocaleResolver가 지정되어 있는데, 이는 HTTP의 헤더를 참고하여 지역 정보를 설정한다. 이 전략을 변경하여 세션, 쿠키, URL 파라미터 등 다양한 방식으로 지역 정보를 결정할 수 있도록 할 수 있다.
6) ThemeResolver
- 테마 정보를 결정
- 자주 쓰이지는 않음
7) RequestToViewNameTranslator
- 컨트롤러에서 뷰 이름이나 뷰 오브젝트를 반환하지 않았을 경우에 HTTP 요청 정보를 참고해서 뷰 이름을 생성해주는 전략이다.
- https://kimcoder.tistory.com/483의 [3-4) RequestToViewNameTranslator]를 참고하자.
● 참고 자료 : 토비의 스프링 3.1 Vol.2
'Spring Series > Spring Framework' 카테고리의 다른 글
[Spring] Controller의 종류와 다양한 전략 (0) | 2022.07.16 |
---|---|
[Spring] 웹 프레젠테이션 계층 테스트 (0) | 2022.07.14 |
[Spring] @Transactional의 속성 (0) | 2022.07.09 |
[Spring] Hibernate (0) | 2022.07.06 |
[Spring] Spring이 제공하는 JPA (0) | 2022.07.02 |
댓글