이번 포스팅에서는 스프링 MVC 핵심 구성요소에 대해 알아보겠습니다.
위 그림에서 <<spring bean>> 이라고 표시한 것은 스프링 빈으로 등록해야 하는 것을 의미합니다.
그림에서 중앙에 위치한 DispatcherServlet은 모든 연결을 담당합니다.
1) 웹 브라우저 요청이 들어오면 DispatcherServlet은 모든 연결을 담당합니다.
2) 직접 컨트롤러를 검색하지 않고 HandlerMapping이라는 빈 객체에게 컨트롤러 검색을 요청합니다.
HandlerMapping은 클라이언트의 요청 경로를 이용해서 이를 처리할 컨트롤러 빈 객체를 DispatcherServlet에 전달합니다.
웹 요청 경로가 "/hello" 라면 등록된 컨트롤러 빈 중에서 "/hello" 요청 경로를 처리할 컨트롤러를 리턴합니다.
DispatcherServlet은 @Controller 를 이용해서 구현한 컨트롤러뿐 아니라 Controller 인터페이스를 구현한 컨트롤러, 특수 목적으로 사용되는 HttpRequestHandler 인터페이스르 구현한 클래스를 동일한 방식으로 실행할 수 있도록 만들어졌습니다. @Controller, Controller 인터페이스, HttpRequestHandler 인터페이스를 동일한 방식으로 처리하기 위해 중간에 사용되는 것이 바로 HandlerAdapter 빈입니다.
3) DispatcherServlet은 HandlerMapping이 찾아준 컨트롤러 객체를 처리할 수 있는 HandlerAdapter 빈에게 요청 처리를 위임합니다. HandlerAdapter는 4-5) 컨트롤러의 알맞은 메서드를 호출해서 요청을 처리하고 결과를 DispatcherServlet에 리턴합니다. 이때 6) HandlerAdapter는 컨트롤러의 처리 결과를 ModelAndView라는 객체로 변환해서 DispatcherServlet에 리턴합니다.
7) ModelAndView 객체를 받으면 DispatcherServlet은 결과를 보여줄 뷰를 찾기 위해 ViewResolver 빈 객체를 사용합니다.
ViewResolver는 이 뷰 이름에 해당하는 View 객체를 찾거나 생성해서 리턴합니다. 응답을 생성하기 위해 JSP를 사용하는 ViewResolver는 매번 새로운 View 객체를 생성해서 DispatcherServlet에 리턴합니다.
8) DispatcherServlet은 ViewResolver가 리턴한 View 객체에 응답 결과 생성을 요청합니다.
처리 과정을 보시면, DispatcherServlet을 중심으로 HandlerMapping, HandlerAdapter, controller, ViewResolver, View, JSP가 각자 역할을 수행해서 클라이언트의 요청을 처리하는 것을 볼 수 있습니다. 이 중 하나라도 어긋나면 클라이언트의 요청을 처리할 수 없게 되므로 각 구성요소를 올바르게 설정하는 것이 중요합니다.
'Spring' 카테고리의 다른 글
[Spring] DispatcherServlet과 스프링 컨테이너 (0) | 2024.04.03 |
---|---|
[Spring] controller와 handler (0) | 2024.04.01 |
[Spring] Spring MVC - 컨트롤러와 JSP (0) | 2024.03.26 |
[Spring] 스프링 MVC - 컨트롤러 구현 해보기 (0) | 2024.03.25 |
[Spring] 스프링 MVC 설정 (0) | 2024.03.25 |