성장일기

내가 보려고 정리하는 공부기록

백엔드/스프링 MVC

[Spring MVC] 2. 스프링 MVC 구조

와나나나 2024. 3. 30. 14:49
728x90

인프런 김영한 강사님의 스프링MVC 강의를 듣고학습한 내용을 정리한 게시물입니다.

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard

 

김영한 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 강의 - 인프런

웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., 원

www.inflearn.com


지난 게시글에서 MVC 구조에 대해 작성하였다. 스프링에서도 MVC 구조를 제공하고, 이를 스프링 MVC라고 한다.

 

스프링 MVC 구조

스프링 MVC는 아래 사진과 같은 구조로 이루어진다.

출처 - 인프런 김영한 강사님 자료

 

✅ Dispatcher Servlet

디스패쳐 서블릿은 스프링MVC의 핵심이라고 이야기 할 수 있다.

  • DispatcherServlet도 부모클래스에서 HttpServlet을 상속받아 사용한다.
    • DispatcherServlet -> FrameworkServlet -> HttpServletBean -> HttpServlet

 

  • 스프링부트는 DispatcherSerclet을 서블릿으로 자동 등록하면서 모든 경로 (urlPatterns="/") 에 대해 매핑한다.
    • 그래도 자세한 경로가 우선순위가 높기 때문에 기존에 등록한 서블릿도 함께 동작한다.

 

요청 흐름

  1. 서블릿이 호출되면 HttpServlet이 제공하는 service()가 호출됨
  2. 스프링 MVC는 DispatcherServlet의 부모인 FrameworkServlet에서 service()를 오버라이드 해둠
  3. FrameworkServlet.service()를 시작으로 여러 메소드가 호출되면서 DispatcherServlet.doDispatch()가 호출됨

결론은  DispatcherServlet.doDispatch()가 핵심인 것이다. 해당 메소드에서 핸들러 조회부터 뷰 렌더링까지 모두 진행된다. 해당 코드를 찾아보니 예외처리부분이 많아서 읽기 힘들었지만, 김영한 강사님의 자료 106pg에 핵심적인 부분만 분석된 코드가 있다! 궁금하면 찾아보자

 

 

스프링 MVC 동작순서

결론적으로 동작 순서는 다음과 같다.

 

  1. 핸들러 조회 : 핸들러 매핑을 통해 요청 URL에 매핑된 핸들러(컨트롤러)를 조회함
  2. 핸들러 어댑터 조회 : 핸들러를 실행할 수 있는 핸들러 어댑터를 조회함
  3. 핸들러 어댑터 실행 : 핸들러 어댑터를 실행함
  4. 핸들러 실행 : 핸들러 어댑터가 실제 핸들러를 실행함
  5. ModelAndView반환 : 핸들러 어댑터는 핸들러가 반환하는 정보를 ModelAndView로 변화냏서 반환함
  6. viewResolver 호출 : 뷰 리졸버를 찾고 실행함
    • JSP의 경우 : InternalResourceViewResolver가 자동으로 등록, 사용됨
  7. View반환 : 뷰 리졸버는 뷰의 논리이름을 물리 이름으로 바꾸고, 렌더링 역할을 담당하는 뷰 객체를 반환
  8. 뷰 렌더링 : 뷰를 통해 뷰를 렌더링함

 

참고로 핸들러는 컨트롤러의 메소드로,  컨트롤러 안에서 어떤 요청을 처리할 수 있는 메소드이다.