본문 바로가기
[Spring]/Spring MVC

스프링 MVC의 구조

by 팡펑퐁 2023. 3. 23.
728x90

스프링 MVC

  • 스프링에서 제공하는 웹 모듈로 스프링 웹(Spring Web) MVC라고도 부른다.
  • Model, View, Controller 세 가지 구성 요소를 사용하여 사용자의 다양한 HTTP 요청을 처리하고 텍스트 형식, 정적 페이지(html) 등 다양한 응답을 만들어 낼 수 있다.

 

 

스프링 MVC의 구조

DispatcherServlet

  • 스프링 MVC는 프런트 컨트롤러 패턴으로 구현되어 있다.
  • 스프링 MVC의 프런트 컨트롤러가 DispatcherServlet이다.
  • 스프링 MVC의 핵심이라고 할 수 있다.
  • 클라이언트로부터 요청을 받는다.
  • 클라이언트에게 받은 요청을 처리할 핸들러(컨트롤러)에 대한 검색을 핸들러 매핑 인터페이스에게 요청한다.

 

 

핸들러 매핑(HandlerMapping)과 핸들러 어댑터(HandlerAdapter)

핸들러 매핑

  1. 클라이언트의 요청과 매핑되는 핸들러 객체를  DispatcherServlet에게 반환한다.
  2. 핸들러 객체는 해당 핸들러의 핸들러 메서드(요청을 처리할 메서드) 정보를 가지고 있다.
  3. DispatcherServlet은 핸들러 어댑터에게 핸들러 메서드 호출을 위임한다. 

핸들러 어댑터

  1. DispatcherServlet으로부터 전달받은 핸들러 정보를 바탕으로 해당 핸들러의 핸들러 메서드를 호출한다.
  2. 핸들러는 요청에 해당하는 비즈니스 로직을 수행한 후, 데이터를 핸들러 어댑터에게 반환한다.
  3. 핸들러 어댑터는 핸들러에게 전달받은 데이터를 Model 데이터와 View 정보로 변환하여 DispatcherServlet에게 반환한다.
  4. DispatcherServlet은 핸들러로부터 전달받은 View 정보를 ViewResolver에게 전달하여 View 검색을 요청한다.

 

 

ViewResolver

DispatcherServlet으로부터 받은 View 정보로 해당하는 View를 찾아 View를 반환한다.

DispatcherServlet은 View로부터 전달받은 응답 데이터를 클라이언트에게 전달한다.

 

 

스프링 MVC의 동작 순서 요약

  • 클라이언트의 HTTP 요청을 DispatcherServlet이 받음
  • 1. 핸들러 조회
    • 핸들러 매핑을 통해 요청 URL에 매핑된 핸들러(컨트롤러)를 조회한다.
  • 2. 핸들러 어댑터 조회
    • 핸들러를 실행할 수 있는 핸들러 어댑터를 조회한다.
  • 3. 핸들러 어댑터 실행
    • 핸들러 어댑터를 실행한다.
  • 4. 핸들러 실행
    • 핸들러 어댑터가 실제 핸들러를 실행한다.
  • 5. ModelAndView 반환
    • 핸들러 어댑터는 핸들러가 반환하는 정보를 ModelAndView로 변환하여 반환한다.
  • 6. ViewResolver 호출
    • 뷰 리졸버를 찾아 실행한다.
    • JSP의 경우 : InternalResourceViewReslover가 자동으로 등록되고 사용된다.
  • 7. View 반환
    • 뷰 리졸버는 뷰의 논리 이름을 물리 이름으로 바꾸고, 렌더링 역할을 담당하는 뷰 객체를 반환한다.
    • JSP의 경우 InternalResourceView(JstlView)를 반환하는데 내부에 forword() 로직이 있다.
  • 8. 뷰 렌더링
    • 뷰를 통해서 뷰를 렌더링 한다.
  • DispatcherServlet이 HTTP 응답 데이터를 클라이언트에게 보냄

 

 

 

참고

김영한 - 스프링 MVC 1편

728x90