공부하며 중요하다 싶은 내용들을 블로그에 공부겸 정리한 내용입니다! 지적 댓글 환영합니다~
1. 스프링 MVC 핵심 구성 요소
위의 사진을 보면 <스프링 빈으로 등록> 이라 되어있는 부분은 스프링 빈으로 등록되어야 하는 것을 의미합니다.
또한 초록색 박스의 JSP, 컨트롤러는 개발자가 직접 구현해고 스프링 빈으로 등록해야 하는 요소 입니다.
중앙에 위치한 DispatcherServlet은 모든 연결을 담당합니다.
Client로부터 요청이 들어오면 DispatcherServlet은 그 요청을 처리하기 위해서 HandlerMapping 이라는 빈 객체를 통하여 컨트롤러를 검색하게 됩니다. (그림에서 2번 과정)
HandlerMapping은 Clinet의 요청에 따라서 이를 처리할 컨트롤러 빈 객체를 DispatcherServlet에 전달하게 됩니다.
컨트롤러 빈 객체를 DispatcherServlet가 전달받았다고 해서 바로 컨트롤러 객체의 메서드를 실행하는 것 이 아닙니다!
DispatcherServlet은 @Controller 애노테이션을 이용해서 구현한 컨트롤러 뿐만 아니라,
스프링 2.5까지 주로 사용했었던 Controller 인터페이스를 구현한 컨트롤러,
특수목적으로 사용되는 HttpRequestHandler 인터페이스를 구현한 클래스를
모두 동일한 방식으로 실행할 수 있도록 만들어 집니다.
위의 3가지 동일한 방식으로 처리하기 위해 중간에 사용되는 것 이 바로! HandlerAdapter 빈 입니다!
따라서 DispatcherServlet는 전달받은 컨트롤러 객체를 처리할 수 있는 HandlerAdapter를 찾아 요청을 위임하게 됩니다.
(그림의 3번과정)
HandlerAdapter는 컨트롤러의 알맞은 메서드를 호출하여 요청을 처리하고(4, 5번 과정) 처리결과를 다시 ModelAndView 라는 객체로 변환하여 DispatcherServlet에 반환하게 됩니다.(6번 과정)
이후 DispatcherServlet는 결과를 보여줄 뷰를 찾기위해 ViewResolver 빈 객체를 사용하게 됩니다. (7번 과정)
ModelAndView는 컨트롤러가 반환한 뷰 이름을 담고 있는데, ViewResolver는 이 뷰 이름에 해당하는 view객체를 찾거나 생성해서 리턴하 됩니다.
응답을 생성하기 위해 JSP를 사용하는 ViewResolver는 매번 새로운 View 객체를 생성해서 DispathcerServlet에 리턴합니다.
DispathcerServlet은 ViewResolver 가 리턴한 View 객체에 응답 결과 생성을 요청하게 됩니다. (8번 과정)
JSP를 사용한다면 View 객체는 JSP를 실행할 때 웹 브라우저에 전송할 응답 결과를 생성하고 끝나게 됩니다.
2. 추가 사항
HandlerMapping - 컨트롤러 검색
웹 브라우저로부터 요청이 들어오면 DispatcherServlet은 해당 요청을 처리하기 위한 컨트롤러를 검색하기 위해 HandlerMapping 객체를 이용한다.
한가지 의문이 든다? 컨트롤러를 찾는데 왜 ControllerMapping 이 아니고, HandlerMapping일까?
이는 스프링이 범용성이 좋은 프레임 워크이기 때문이다!
@Controller 애노테이션을 붙인 클래스 뿐만 아니라, 자신이 직접 만든 클래스를 이용하여 클라이언트의 요청을 처리할수도 있다. 따라서 DispatcherServlet 입장에서는 클라이언트의 요청을 처리하는 객체가 꼭 @Controller를 적용한 클래스일 필요는 없는 것 이다.
이러한 이유로 스프링 MVC는 웹 요청을 실제로 처리하는 객체를 Handler라고 표현한다.
Controller 인터페이스를 구현한 모든 객체는 Handler가 되는 것 이다. 이런 Handler를 찾아주는 객체가 HandlerMapping이다.
HandlerAdapter - 변환
DispatcherServlet은 핸들러 객체의 실제 타입에 상관없이 컨트롤러(핸들러)의 처리 결과를 ModelAndView로만 받으면 된다.
하지만 핸들러의 구현 타입에 따라 ModelAndView를 반환하기도, 안하기도 한다.
따라서 핸들러의 처리 결과를 ModelAndView로 변환해주는 객체가 HandlerAdapter인 것 이다.
참고 - 초보 웹 개발자를 위한 스프링 5 프로그래밍 입문_최범균 저
'BackEnd > Spring MVC' 카테고리의 다른 글
[Spring] MVC 프레임워크 만들기 - 1 (0) | 2022.02.19 |
---|---|
[Spring] 서블릿, JSP, MVC 패턴 (0) | 2022.02.17 |
[Spring] 서블릿 - 2 (0) | 2022.02.14 |
[Spring] 서블릿 - 1 (0) | 2022.02.13 |
[Spring] 웹 애플리케이션 이해 (0) | 2022.02.12 |
댓글