0. 개요
- 이전 포스팅에서 Adapter 패턴에 대해 이야기하며, 최종적인 Front Controller의 구조를 알아보았다.
- 이를 기반한 Spring MVC는 어떤 특징을 가지며, 어떤 차이점이 있는지 알아보도록 하자.
* 본 포스팅은 Front Controller 시리즈의 내용입니다. 이전 포스팅을 읽는 것을 권장합니다.
1. Spring MVC의 특징
a) 명칭의 차이
- Spring MVC는 Front Controller를 기반한다.
- 그러나 각 컴포넌트의 명칭의 차이가 존재한다.
- 다음 우측의 명칭들이 Spring MVC에서 사용하는 명칭이다.
1. Font Controller → DispatcherServlet
2. HandlerMappingMap → HandlerMapping(인터페이스로 구현)
3. HandlerAdapter → HandlerAdapter(인터페이스로 구현)
4. ModelView → ModelAndView
5. ViewResolver → ViewResolver(인터페이스로 구현)
6. MyView → View(인터페이스로 구현)
b) DispatcherServlet
- Spring MVC에서는 Front Controller를 DispatcherServlet이라 부른다.
- 그러므로 Spring MVC의 구조에서는 DispatcherServlet이 핵심이다.
- DispatcherServlet은 부모 클래스로부터 HttpServlet을 상속받는다.
- 그러므로 DispatcherServlet는 doDispatch() 메서드를 통해 오버라이드된 service()를 호출한다.
c) DispatcherServlet.doDispatch()
- DispatcherServlet은 doDispatch() 메서드의 호출을 통해 내부 로직을 실행한다.
- doDispatch() 메서드에는 Front Controller가 처리했던 모든 로직을 담고 있다.
- 그러므로 doDispatch() 메서드의 동작 과정이 곧 Spring MVC의 전체직인 흐름인 것이다.
- SpringMVC의 동작원리는 다음과 같다.
1. Client로부터 request가 DispatcherServlet에 들어온다.
2. Servlet에서 service() 메서드가 호출된다.
3. 오버라이드 된 FrameworkServlet.service()의 호출을 시작으로 DispatcherServlet의 doDispatch()가 호출된다.
4. request URL을 이용한 Handler 조회
5. Handler를 처리하기 위한 HandlerAdapter 조회
6. HandlerAdapter로부터 비즈니스 로직의 처리
7. HandlerAdapter로부터 ModelAndView 객체를 반환 받음
8. view render 처리를 위해 processDispatchResult() 메서드를 실행
9. view 객체를 찾아 반환하고, 이를 이용하여 render링을 수행
10. 환면 반환
- Spring MVC는 HandlerMapping을 조회할 때, 단순히 request URl 뿐만아니라 HTTP 헤더 등을 사용할 수 있다.
- 즉, Spring MVC는 Adapter를 이용한 Front Controller 패턴을 기능적으로 확장한 것이다.
d) HandlerMapping과 HandlerAdapter
- Spring MVC는 내부적으로 필요한 HandlerMapping과 HandlerAdapter를 다양하게 구현해 놓았다.
- Spring Boot를 사용하면 자동으로 다음 대표적인 HandlerMapping과 Adapter를 사용한다.
1. HandlerMapping(handler 조회)
→ RequestMappingHandlerMapping: @RequestMapping에 매핑된 url로 handler를 조회
→ BeanNameUrlHandlerMapping: Spring Bean의 이름으로 handler를 조회
2. HandlerAdapter(handler를 처리할 수 있는 Adapter 조회)
→ RequestMappingHandlerAdapter: @RequestMapping을 사용하는 경우
→ HttpRequestHandlerAdapter: HttpRequestHandler를 처리하는 경우
→ SimpleControllerHandlerAdapter: Controller 인터페이스를 처리하는 경우
e) ViewResolver
- 마찬가지로 Spring Boot 내부에는 ViewResolver가 구현되어 있다.
→ BeanNameViewResolver: Bean 이름을 이용하여 View를 조회하는 경우
→ InternalResourceViewResolver: JSP의 절대경로를 이용하여 View를 조회하는 경우
'Back-end > Spring MVC 개념' 카테고리의 다른 글
13. Annotation 기반의 URL 매핑 (0) | 2022.03.10 |
---|---|
12. Annotation 기반의 Spring MVC (0) | 2022.03.09 |
10. Front Controller(2) (0) | 2022.03.07 |
9. Front Controller (1) (0) | 2022.03.04 |
8. Forward와 Redirect (0) | 2022.03.03 |
댓글