스프링 MVC 1편 - 5. 스프링 MVC - 구조 이해

Updated:

김영한님의 인프런 강의 - 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
위 강의를 정리한 내용입니다.

I. 스프링 MVC 전체 구조

  • 기존의 프론트 컨트롤러 = 디스패쳐 서블릿 -> 스프링 MVC의 핵심

DispatcherServlet 서블릿 등록

  • HeepServlet을 상속받아 서블릿으로 동작
  • 스프링부터는 이를 자동으로 등록하면서 모든경로에 대해서 매핑

동작 순서

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

핸들러 매핑과 핸들러 어댑터

HandlerMapping(핸들러 매핑)

  • 핸들러 매핑에서 컨트롤러를 찾을 수 있어야 한다.
  • 우선순위
    0 = RequestMappingHndlerMapping : 애노테이션 기반의 컨트롤러인 @RequestMapping에서 사용
    1 = BeanNameUrlHandlerMapping : 스프링 빈의 이름으로 핸들러를 찾는다.
    

HandlerAdapter(핸들러 어댑터)

  • 핸들러 매핑을 통해서 찾은 핸들러를 실행할 수 있는 핸들러 어댑터가 필요하다.
  • 우선순위
    0 = RequestMappingHandlerAdapter : 애노테이션 기반의 컨트롤러인 @RequestMapping에서 사용
    1 = HttpRequestHandlerAdapter : HttpRequestHandler 처리
    2 = SimpleControllerHandlerAdapter : Controller 인터페이스(애노테이션X, 과거에 사용) 처리
    

실무에서는 @RequestMapping 애노테이션을 사용한다.

뷰 리졸버

  • 스프링 부트는 application.properties에 등록한 spring.mvc.view.prefix, spling.mvc.view.suffix를 토대로 뷰 리졸버를 자동으로 작성한다.
  • 우선순위
    1 = BeanNameViewResolver : 빈 이름으로 뷰를 찾아서 반환한다.
    2 = InternalResourceViewResulver : JSP를 처리할 수 있는 뷰를 반환한다.
    

Leave a comment