스프링 MVC의 핵심 구성 요소
스프링MVC의 핵심 구성 요소와 각 요소간의 관계를 그림으로 그려보면아래와 같다.
<<spring bean>> 이라고 표시한 것은 스프링 빈으로 등록해야 하는것들을 의미한다.
파란색 배경을 가진 구성요소를 개발자가 직접 구현해주어야 하는 요소이다.
그림을 보면 DispatcherServlet은 모든 연결을 담당한다. 웹 브라우저로부터 요청이 들어오면 Dispatcher Servlet은 그 요청을 처리하기 위한 컨트롤러 객체를 검색하는데, 이때 DispatcherServlet이 직접 검색하지 않고 HandlerMapping이라는 빈 객체에게 컨트롤러 검색을 요청한다.
HandlerMapping은 클라이언트의 요청 경로를 이용해서 이를 처리할 컨트롤러 빈 객체를 DispatcherServlet에 전달한다.
예를들어, 웹 요청 경로가 ‘/Hello’인 경우, 등록된 컨트롤러 빈 중에서 요청 경로 ‘/Hello’를 처리할 컨트롤러를 리턴한다.
컨트롤러 객체를 DispatcherServlet이 전달받았다고 해서, 바로 컨트롤러 객체의 메서드를 실행할 수 있는 것은 아니다.
@Controller,Controlle인터페이스, HttpRequestHandler 인터페이스를 동일한 방식으로 처리하기 위해 중간에 사용되는 것이 바로 HandlerAdapter 빈이다.
DispatcherServlet은 Handler Mapping이 찾아준 컨트롤러 객체를 처리할 수 있는 HandlerAdapter 빈에게 요청 처리를 위임한다.
HandlerAdapter는 컨트롤러의 알맞은 메서드를 호출해서 요청을 처리하고, 그 결과를 DispatcherServlet에 리턴한다. 이때, HandlerAdapter는 컨트롤러의 처리 결과를 ModelAndView라는 객체로 변환해서 Dispatcherservlet에 리턴한다.
HandlerAdapter로부터 컨트롤러의 요청 처리 결과를 ModelAndView로 받으면, DispatcherServlet은 결과를 보여줄 뷰를 찾기 위해 ViewResolver빈 객체를 사용한다. ModelAndView는 컨트롤러가 리턴한 뷰 이름을 담고 있는데, ViewResolver는 이 뷰 이름에 해당하는 View 객체를 찾거나 또는 생성해서 리턴해 준다.
응답을 생성하기 위해 JSP를 사용하는 ViewResolver는 매번 새로운 View 객체를 생성해서 DispatcherServlet에 리턴한다.
처리과정이 다소 복잡한데, DispatcherServlet를 중심으로 HandlerMapping, HandlerAdapter, 컨트롤러, viewResolver, View, JSP가 각자 역할을 수행해서 클라이언트의 요청을 처리하는 것을 알 수 있다.
이중 하나라도 어긋나면 클라이언트의 요청을 처리 할 수 없게 되므로 각 구성 요소를 올바르게 설정하는 것이 중요하다.
'IT > Spring' 카테고리의 다른 글
DispatcherServlet과 스프링 컨테이너 - 사좋배 공유 (0) | 2019.07.01 |
---|---|
Controller(컨트롤러)와 (Handler)핸들러 - 사좋배 공유 (0) | 2019.07.01 |
Mysql 설치 및 eclipse 연동하기 - 사좋배 공유 (0) | 2019.06.24 |
@Resource 어노테이션이란? / @Resource @Autowired 차이점(@Resource vs @Autowired)-사좋배 공유 (0) | 2019.06.20 |
@Autowired 어노테이션/@Autowired란? -사좋배 공유 (0) | 2019.06.20 |