728x90
인프런 김영한 강사님의 스프링MVC 강의를 듣고학습한 내용을 정리한 게시물입니다.
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard
지난 게시글에서 MVC 구조에 대해 작성하였다. 스프링에서도 MVC 구조를 제공하고, 이를 스프링 MVC라고 한다.
스프링 MVC 구조
스프링 MVC는 아래 사진과 같은 구조로 이루어진다.
✅ Dispatcher Servlet
디스패쳐 서블릿은 스프링MVC의 핵심이라고 이야기 할 수 있다.
- DispatcherServlet도 부모클래스에서 HttpServlet을 상속받아 사용한다.
- DispatcherServlet -> FrameworkServlet -> HttpServletBean -> HttpServlet
- 스프링부트는 DispatcherSerclet을 서블릿으로 자동 등록하면서 모든 경로 (urlPatterns="/") 에 대해 매핑한다.
- 그래도 자세한 경로가 우선순위가 높기 때문에 기존에 등록한 서블릿도 함께 동작한다.
요청 흐름
- 서블릿이 호출되면 HttpServlet이 제공하는 service()가 호출됨
- 스프링 MVC는 DispatcherServlet의 부모인 FrameworkServlet에서 service()를 오버라이드 해둠
- FrameworkServlet.service()를 시작으로 여러 메소드가 호출되면서 DispatcherServlet.doDispatch()가 호출됨
결론은 DispatcherServlet.doDispatch()가 핵심인 것이다. 해당 메소드에서 핸들러 조회부터 뷰 렌더링까지 모두 진행된다. 해당 코드를 찾아보니 예외처리부분이 많아서 읽기 힘들었지만, 김영한 강사님의 자료 106pg에 핵심적인 부분만 분석된 코드가 있다! 궁금하면 찾아보자
스프링 MVC 동작순서
결론적으로 동작 순서는 다음과 같다.
- 핸들러 조회 : 핸들러 매핑을 통해 요청 URL에 매핑된 핸들러(컨트롤러)를 조회함
- 핸들러 어댑터 조회 : 핸들러를 실행할 수 있는 핸들러 어댑터를 조회함
- 핸들러 어댑터 실행 : 핸들러 어댑터를 실행함
- 핸들러 실행 : 핸들러 어댑터가 실제 핸들러를 실행함
- ModelAndView반환 : 핸들러 어댑터는 핸들러가 반환하는 정보를 ModelAndView로 변화냏서 반환함
- viewResolver 호출 : 뷰 리졸버를 찾고 실행함
- JSP의 경우 : InternalResourceViewResolver가 자동으로 등록, 사용됨
- View반환 : 뷰 리졸버는 뷰의 논리이름을 물리 이름으로 바꾸고, 렌더링 역할을 담당하는 뷰 객체를 반환함
- 뷰 렌더링 : 뷰를 통해 뷰를 렌더링함
참고로 핸들러는 컨트롤러의 메소드로, 컨트롤러 안에서 어떤 요청을 처리할 수 있는 메소드이다.