※ 본 내용은 해당 교재를 참고하여 공부한 내용과 본인의 생각을 정리한 글입니다.
https://www.yes24.com/Product/Goods/62268795
스프링5 프로그래밍 입문 - 예스24
스프링 프레임워크의 버전업으로 개선된 내용을 담았다. 처음 스프링을 배우고자 하는 독자들이 입문할 때 필요한 것은 스프링의 방대한 내용이 아닌 기초와 전반적인 흐름을 잡아주는 것으로
www.yes24.com
인터넷에 널려있는 내용이기도 하고 복습한다는 생각으로 간단하게 정리.
중앙에 위치한 DispatcherServlet은 모든 연결을 담당한다. ①웹 브라우저로부터 요청이 들어오면 DispatcherServlet은 그 요청을 처리하기 위한 컨트롤러를 검색한다. 이때 DispatcherServlet은 직접 컨트롤러를 검색하지 않고 ②HandlerMapping이라는 빈 객체에게 컨트롤러 검색을 요청한다.
HandlerMapping은 클라이언트의 요청 경로를 이용해서 이를 처리할 컨트롤러 빈 객체를 DispatcherServlet에 전달한다. 예를 들어 웹 요청 경로가 '/hello'라면 등록된 컨트롤러 빈 중에서 '/hello' 요청 경로를 처리할 컨트롤러를 리턴한다. DispatcherServlet은 HandlerMapping이 찾아준 컨트롤러 객체를 처리할 수 있는
③HandlerAdapter 빈에게 요청 처리를 위임한다. HandlerAdapter는 ④컨트롤러의 알맞은 메서드를 호출해서 요청을 처리하고 그 결과를 DispatcherServlet에 리턴한다. 이때 HandlerAdapter는 컨트롤러의 처리 결과를 ModelAndView라는 객체로 변환해서 DispatcherServlet에 리턴한다.
HandlerAdapter로 부터 컨트롤러의 요청 처리 결과를 ModelAndView로 받으면 DispatcherServlet은 결과를 보여줄 뷰를 찾기 위해 ⑤ViewResolver 빈 객체를 사용한다.
ModelAndView는 컨트롤러가 리턴한 뷰 이름을 담고 있는데 ViewResovler는 이 뷰 이름에 해당하는 View 객체를 찾거나 생성해서 리턴한다. 응답을 생성하기 위해 JSP를 사용하는 ViewResolver는 매번 새로운 View 객체를 생성해서 DispatcherServlet에 리턴한다.
DispatcherServlet은 ViewResolver가 리턴한 ⑥View 객체에게 응답 결과 생성을 전송한다.
클라이언트의 요청을 실제로 처리하는 것은 컨트롤러이고 DispatcherServlet은 클라이언트의 요청을 전달받는 창구 역할을 한다. 웹 요청을 실제로 처리하는 객체를 핸들러(Handler)라고 표현하며, @Controller 적용 객체나 Controller 인터페이스를 구현한 객체는 모두 스프링 MVC 입장에서는 핸들러가 된다. 특정 요청 경로를 처리해주는 핸들러를 찾아주는 객체를 HandlerMapping이라고 부른다. DispatcherServlet은 핸들러 객체 실제 타입에 상관없이 실행 결과를 ModelAndView 타입으로만 받을 수 있으면 된다. 그런데 그렇지 않은 객체도 있기 때문에 핸들러의 처리 결과를 ModelAndView로 변환해주는 객체가 필요하며 HandlerAdapter가 이 변환을 처리해준다.
web.xml 파일을 보면 contextConfigLocation 초기화 파라미터를 이용해서 스프링 설정 클래스 목록을 전달한다. DispatcherServlet은 전달받은 설정 파일을 이용해서 스프링 컨테이너를 생성하는데 앞에서 언급한 HandlerMapping, HandlerAdapter, 컨트롤러, ViewResolver 등의 빈은 DispatcherServlet이 생성한 스프링 컨테이너에서 구한다. 따라서 DispatcherServlet이 사용하는 설정 파일에 이들 빈에 대한 정의가 포함되어 있어야 한다.
DispatcherServlet은 흔히 Front Controller 라고도 부른다.
'11. Spring' 카테고리의 다른 글
[Spring] Redis 연동해보기 (0) | 2024.02.05 |
---|---|
[Spring]@RequestBody, @ResponseBody (0) | 2023.12.12 |
[Spring]web.xml (0) | 2023.12.01 |
[Maven]pom.xml (0) | 2023.11.30 |
Spring 카테고리 (0) | 2023.11.27 |