본문 내용은 초보 웹 개발자를 위한 스프링5 프로그래밍 입문(최범균)을 참고하고 있습니다.
<<spring bean>>이라고 표시한 것은 스프링 빈으로 등록해야 하는 것을 의미한다.
Spring Mvc 핵심 구성요소 4가지
- HandlerMapping - 컨트롤러 검색
- HandlerAdapter - 컨트롤러 실행
- ViewResolver - 컨트롤러의 실행 결과를 보여줄 View 객체 검색
- View - View 객체를 실행하여 응답 결과 JSP 페이지를 생성
1번 과정 (DispatcherServlet)
- 모든 연결을 담당한다.
- 웹 브라우저로부터 요청이 들어오면 DispatcherServlet은 요청을 처리하기 위한 컨트롤러 객체를 검색한다.
- 이때 DispatcherServlet은 직접 컨트롤러를 검색하지 않고 HandlerMapping이라는 빈 객체에게 컨트롤러 검색을 요청한다.(2번 과정에 해당)
2번 과정 (HandlerMapping)
- 클라이언트의 요청 경로를 이용해서 이를 처리할 컨트롤러 빈 객체를 DispatcherServlet에 전달한다.
- ex) 웹 요청 경로가 '/hello'라면 등록된 컨트롤러 빈 중에서 '/hello' 요청 경로를 처리할 컨트롤러를 리턴한다.
3번 과정
- DispatcherServlet은 HandlerMapping이 찾아준 컨트롤러 객체를 처리할 수 있는 HandlerAdapter 빈에게 요청 처리를 위임한다.
4~5번 과정
- HandlerAdapter는 컨트롤러의 알맞은 메소드를 호출해서 요청을 처리한다.
6번 과정
- 4~5번 과정의 결과를 DispatcherServlet에 리턴한다.
- 이 때 HandlerAdapter는 컨트롤러의 처리 결과를 ModelAndView라는 객체로 변환해서 DispatcherServlet에 리턴한다.
7번 과정
- HandlerAdapter로부터 컨트롤러의 요청 처리 결과를 ModelAndView로 받으면 DispatcherServlet은 결과를 보여줄 뷰를 찾기 위해 ViewResolver 빈 객체를 사용한다.
8번 과정
- DispatcherServlet은 ViewResolver가 리턴한 View 객체에게 응답 결과 생성을 요청한다.
9번 과정
- JSP를 사용하는 경우 View 객체는 JSP를 실행함으로써 웹 브라우저에 전송할 응답 결과를 생성하고 이로써 모든 과정이 끝난다.
HandlerAdapter
- 컨트롤러를 바로 실행시키지 않고 HandlerAdapter를 쓰는 이유 : 컨트롤러를 구현하는 방법이 1가지가 아닌 3가지이기 때문이다.
- 위에서 언급한 3가지 @Controller, Controller Interface, HttpRequestHandler Interface를 동일한 방식으로 처리하기 위해 중간에 사용되는 것이 바로 HandlerAdapter 빈이다.
- 컨트롤러 실행 결과를 ModelAndView 객체타입으로 리턴한다.
ModelAndView
- 컨트롤러가 리턴한 뷰 이름을 담고 있다.
ViewResolver
- 컨트롤러의 요청 처리 결과를 ModelAndView로 받으면 DispatcherServlet은 결과를 보여줄 뷰 객체를 검색하기 위해 ViewResolver 빈 객체를 사용한다.
- ModelAndView가 담고 있는 뷰 이름에 해당하는 view 객체를 찾거나 생성해서 리턴한다.
- 응답을 생성하기 위해 JSP를 사용하며 매번 새로운 View 객체를 생성해서 DispatcherServlet에 리턴한다.
'Back-end > Spring' 카테고리의 다른 글
MVC란? (Spring MVC) (0) | 2021.10.05 |
---|---|
AOP 프로그래밍 (학습필요) (0) | 2021.10.01 |
빈 라이프 사이클과 범위 (0) | 2021.10.01 |
컴포넌트 스캔(@Component, @ComponentScan) - 학습필요 (0) | 2021.10.01 |
의존 자동 주입 (0) | 2021.10.01 |