Spring MVC 구조
동작 순서
- 핸들러 조회 : 핸들러 매핑을 통해 요청 URL에 매핑된 핸들러(컨트롤러)를 조회
- 핸들러 어댑터 조회 : 핸들러를 실행 할 수 있는 핸들러 어댑터를 조회
- 핸들러 어댑터 실행 : 핸들러 어댑터 실행
- 핸들러 실행 : 핸들러 어댑터가 실제 핸들러를 실행
- ModelAndView 반환 : 핸들러 어댑터는 핸들러가 반환하는 정보를 ModelAndView로 변환하여 반환
- viewResolver 반환 : 뷰 리졸버를 찾고 실행
* JSP의경우 InternalResourceViewResolver가 자동 등록되고 사용됨 - View 반환 : 뷰 리졸버는 뷰의 논리 이름을 물리 이름으로 바꾸로, 렌더링 역할을 담당하는 뷰 객체를 반환
* JSP의경우 InternalResourceView(JstlView)를 반환하는데 내부에 forward() 로직이 있음 - 뷰 렌더링 : 뷰를 통해 뷰를 렌더링
스프링 MVC의 가장 큰 강점은 DispatcherServlet 코드의 변경 없이 원하는 기능을 변경하거나 확장 할 수 있다는 점. 대부분을 확장 가능할 수 있게 인터페이스로 제공하며 이러한 인터페이스들만 구현하여 DispatcherServlet 에 등록하면 자신만의 컨트롤러를 구현할 수도 있음.
주요 인터페이스 목록으로는 아래와 같이 존재
- 핸들러 매핑 : org.springframework.web.servlet.HandlerMapping
- 핸들러 어댑터 : org.springframework.web.servlet.HandlerAdapte
- 뷰 리졸버 : org.springframework.web.servlet.ViewResolver
- 뷰 : org.springframework.web.servlet.View
DispatcherServlet 서블릿 등록
- DispatcherServlet도 부모 클래스에서 HttpServlet을 상속방아 사용하고 서블릿으로 동작 함.
- DispatcherServlet -> FrameworkServlet -> HttpServletBean -> HttpServlet
- 스트링 부트는 DispatcherServlet을 서블릿으로 자동으로 등록하면서 모든경로(urlPatterns=”/”)에 대하여 매핑 함
참고
- 스프링 MVC - 백엔드 웹 개발 핵심 기술(김영한)