1. Spring Web MVC란?


웹 개발을 하기 위한 Spring Framework의 모듈 중 하나입니다.

우선 Spring Web MVC의 핵심 구성 요소와 각 요소 간의 관계는 다음과 같습니다.

[그림 1] Spring MVC 흐름

Spring Web MVC에서 Front Controller라고 가장 앞 단에서 요청을 제일 먼저 받는 서블릿이 있는데, 이를 DispatcherServlet이라고 합니다. 위의 그림을 보면 알겠지만, DispatcherServlet이 요청의 모든 흐름을 관리합니다. DispatcherServlet은 요청을 올바른 객체에 전달해주는 역할만 합니다.

 

Spring MVC는 크게 4가지의 핵심 구성 요소를 가집니다.

  1. HandlerMapping
  2. HandlerAdapter
  3. ViewResolver
  4. View 

2. HandlerMapping - 컨트롤러 검색


웹 브라우저로부터 요청이 들어오면 DispatcherServlet은 해당 요청을 처리하기 위한 컨트롤러를 검색하기 위해 HandlerMapping 객체를 이용한다.

3. HandlerAdapter - 컨트롤러 실행


HandlerMapping으로부터 해당 요청을 처리하기 위한 컨트롤러를 검색했다면 바로 해당 컨트롤러를 실행하면 될것이지 왜 컨트롤러를 실행시키는 역할을 하는 HandlerAdapter 객체를 따로 두는 것일까? 그 이유는 컨트롤러를 구현하는 방법이 1가지가 아니기 때문이다. 컨트롤러를 구현하는 방법은 3가지가 있다.

  1. @Controller 애노테이션
  2. Controller 인터페이스를 구현
  3. HttpRequestHandler 인터페이스를 구현

위 세 가지 구현 방식 중 어떠한 방법으로 컨트롤러를 구현했는지에 상관없이 동일한 방법으로 컨트롤러를 실행시키기 위해 HandlerAdapter 객체를 따로 두는 것이다. HandlerAdapter는 컨트롤러 실행 결과를 ModelAndView 객체타입으로 리턴한다.

4. ViewResolver - 컨트롤러의 실행 결과를 보여줄 View 객체 검색


컨트롤러를 검색하기 위한 객체와 실행하기 위한 객체를 따로 두는 것처럼 뷰도 검색과 실행 객체를 따로 둔다. 컨트롤러의 요청 처리 결과를 ModelAndView로 받으면 DispatcherServlet은 결과를 보여줄 뷰 객체를 검색하기 위해 ViewResolver 빈 객체를 사용한다.

5. View - 뷰 객체를 실행하여 응답 결과 JSP 페이지를 생성


ViewResolver 객체로부터 실행해야할 뷰 객체를 찾았다면, DispatcherServlet은 ViewResolver가 리턴한 View 객체에게 응답 결과 생성을 요청한다.

6. 참고자료


[1] 초보 웹 개발자를 위한 스프링 5 프로그래밍 입문_최범균 저