[Spring] Spring MVC 동작 원리

hyeminn·2021년 2월 9일
0

Spring MVC의 Request 처리 과정

Spring MVC Request Lifecycle Diagram

  1. DispatcherServlet이 모든 연결을 담당하며, 웹 브라우저로부터의 요청을 받음
    • 요청이 들어오면 DispatcherServletHandlerMapping 에게 컨트롤러 검색을 요청함
    • HadlerMapping은 클라이언트의 요청 경로를 이용해 컨트롤러 Bean 객체를 DispatcherServlet에 전달함
  2. DispatcherServlet은 전달받은 컨트롤러 객체를 처리할 수 있는 HandlerAdapter 에게 요청 처리를 위임
  3. HandlerAdapter는 컨트롤러의 알맞은 메서드를 호출해 요청을 처리함
  4. 처리 결과를 ModelAndView라는 객체로 DispatcherServlet에게 반환
    • DispatcherServlet은 전달받은 결과의 뷰를 ViewResolver 객체를 이용하여 검색함
    • ViewResolver는 ModelAndView의 뷰 이름에 해당하는 View객체를 찾거나 생성하여 리턴함
  5. DispathcerServletVeiwResolver가 리턴한 View 객체에게 응답 결과 생성을 요청
    • JSP를 사용하는 경우, View 객체는 JSP를 실행함으로서 브라우저에게 전송할 응답 결과를 생성함
    • ModelAndView 의 Model 객체에 담겨 있는 데이터가 응답 결과에 필요하면 Model 에서 데이터를 꺼내 JSP 에서 사용할 수 있음

클라이언트의 요청을 실제로 처리하는 것은 컨트롤러이고,
DispatcherServlet 은 클라이언트의 요청을 전달 받는 창구 역할을 한다.
DispatcherServlet 에게 어떤 컨트롤러가 요청을 처리하는가는 중요하지 않으며, 처리 결과를 ModelAndView 타입의 객체로 전달 받을 수 있기만 하면 된다.
이 때, 사용할 컨트롤러를 찾고, 처리 결과를 ModelAndView 객체로 변환해 주는 객체가 HandlerAdapter 이다.

핸들러 객체의 실제 타입마다 그에 알맞은 HandlerMapping 과 HandlerAdapter 가 존재하기 때문에 사용할 핸들러의 종류에 따라 해당 HandlerMapping 과 HandlerAdapter 를 스프링 빈으로 등록해 주어야 하는데, 스프링 설정 기능(<mvc:annotaion-driven>)을 사용하면 직접 등록하지 않아도 스프링이 알아서 ㅓㅁ처리해 준다.

요청을 처리할 컨트롤러를 찾기 때문에 ControllerMapping 이라는 이름이 어울리는데, 스프링 MVC 는 웹 요청을 처리할 수 있는 범용적인 프레임워크를 제공하고 있기 때문에, 클라이언트의 요청을 처리하는 객체가 컨트롤러가 아닐 수도 있다(HttpRequestHandler 등). 그래서 스프링 MVC 는 웹 요청을 실제로 처리하는 객체를 Handler 라고 표현하고 있다. 따라서 컨트롤러는 DispatcherServlet 입장에서 보면 한 종류의 핸들러 객체이다.

출처: https://tinkerbellbass.tistory.com/40 [Welcome to NeverLand]

profile
성장하는 개발자가 되고 싶어요 😁

0개의 댓글