Spring, java/Spring_MVC
[Web MVC] Spring MVC 구조이해
재코딩
2022. 8. 31. 20:03
반응형
본 리뷰는 인프런 김영한님의 스프링 MVC 리뷰를 한 포스팅입니다.
스프링 MVC 전체 구조
이전에 버전을 쪼개면서 직접 MVC를 만들어보았는데, 그것과 비교하어 SpringMVC구조를 비교해보겠습니다.
1) 이전에 만들어 둔MVC프레임워크의 구조
2) SpringMVC구조

동작 순서
- 핸들러 조회: 핸들러 매핑을 통해 요청 URL에 매핑된 핸들러(컨트롤러)를 조회한다.
- 핸들러 어댑터 조회: 핸들러를 실행할 수 있는 핸들러 어댑터를 조회한다.
- 핸들러 어댑터 실행: 핸들러 어댑터를 실행한다.
- 핸들러 실행: 핸들러 어댑터가 실제 핸들러를 실행한다.
- ModelAndView 반환: 핸들러 어댑터는 핸들러가 반환하는 정보를 ModelAndView로 변환해서 반환한다.
- viewResolver 호출: 뷰 리졸버를 찾고 실행한다. (JSP의 경우: InternalResourceViewResolver 가 자동 등록되고, 사용된다.)
- View반환:뷰 리졸버는 뷰의 논리 이름을 물리 이름으로 바꾸고, 렌더링 역할을 담당하는 뷰 객체를 반환한다.
(JSP의 경우 InternalResourceView(JstlView) 를 반환하는데, 내부에 forward() 로직이 있다.) - 뷰렌더링:뷰를 통해서 뷰를 렌더링한다.
차이점: 이름
-. FrontController👉 DispatcherServlet
-. handlerMappingMap👉 HandlerMapping
-. MyHandlerAdapter👉 HandlerAdapter
-. ModelView👉 ModelAndView
-. viewResolver👉 ViewResolver
-. MyView👉 View
DispatcherServlet?
- 스프링 MVC도 프론트 컨트롤러 패턴으로 구현되어있다.
- 프론트 컨트롤러 = DispatcherServlet
- 스프링 부트는 "DispatcherServlet"을 서블릿으로 자동으로 등록하면서, "모든경로(urlPatterns="/")에 대해서 매핑한다.
- 스프링 MVC는 "DispatcherServlet" 코드의 변경없이 원하는 기능을 변경하거나 확장할 수 있다.
- 인터페이스들만 구현해서 "DispatcherServlet"에 등록하면 우리만의 컨트롤러를 만들 수 있다.
Main Interface
- 핸들러 매핑: org.springframework.web.servlet.HandlerMapping
- 핸들러 어댑터: org.springframework.web.servlet.HandlerAdapter
- 뷰 리졸버: org.springframework.web.servlet.ViewResolver
- 뷰: org.springframework.web.servlet.View
반응형