DispatcherServlet
Central dispatcher for HTTP request handlers/controllers, e.g. for web UI controllers or HTTP-based remote service exporters. Dispatches to registered handlers for processing a web request, providing convenient mapping and exception handling facilities.
HTTP 요청 핸들러/컨트롤러를 위한 중앙 디스패처, 예: 웹 UI 컨트롤러 또는 HTTP 기반 원격 서비스 익스포터. 웹 요청을 처리하기 위한 등록된 핸들러로의 디스패치로 편리한 매핑 및 예외 처리 기능을 제공합니다.
- Spring 공식 문서 -
DispatcherServlet은 요청을 가장 먼저 받고, 적절하게 처리한 핸들러(컨트롤러)를 찾는 역할을 한다.
DispatcherServlet은 스프링 MVC의 중앙 서블릿으로 클라이언트로부터 오는 모든 요청을 핸들링한다. 또한 모든 요청을 맨 앞에서 받아 처리해 Fornt Controller라고 불린다.
이러한 패턴을 프론트 컨트롤러 패턴이라고 부른다.
🔗 동작 흐름
1. 클라이언트로부터 HTTP요청이 들어오면, 모든 요청은 DispatcherServlet을 거친다. (Front Controller)
2. DispatcherServlet에서 모든 요청을 분석 후, HamdlerMapping을 활용해 요청을 처리할 수 있는 핸들러(컨트롤러)를 찾는다.
3. 요청을 처리할 핸들러를 찾은 DispatcherServlet은 해당 핸들러를 실행할 수 있는 HandlerAdapter를 호출한다.
4. HandlerAdapter를 사용해서 핸들러의 메소드를 실행한다.
5. 응답 데이터는 ViewResolver or HttpMessageConverter를 통해 변환한 후, 클라이언트에 응답으로 전달한다.
ViewResolver
Spring MVC에서 뷰를 찾고 렌더링하는 역할
컨트롤러가 반환한 뷰 이름으로 실제 뷰 파일을 찾는다.(JSP, Thymeleaf)
HttpMessageConverter
Spring MVC에서 객체를 JSON, XML 등으로 변환하거나 역으로 변환하는 역할
컨트롤러가 객체를 반환하면 그 객체를 JSON, XML형태로 변환하여 응답에 담는다.
HandlerMapping
Interface to be implemented by objects that define a mapping between requests and handler objects.
요청과 핸들러 객체 사이의 매핑을 정의하는 객체가 구현할 인터페이스입니다.
- Spring 공식 문서 -
DispatcherServlet에 Client로부터 Http Request가 들어 오면 HandlerMapping은 요청처리를 담당할 Controller를 mapping한다.Spring MVC는 interface인 HandlerMapping의 구현 클래스도 가지고 있는데, 용도에 따라 여러 개의 HandlerMapping을 사용하는 것도 가능하다.빈 정의 파일에 HandlerMapping에 대한 정의가 없다면 Spring MVC는 기본(default) HandlerMapping을 사용한다.
- 표준프레임워크 -
DispatcherServlet은 HandlerMapping을 통해 요청에 맞는 핸들러(컨트롤러)를 찾는다.
Spring에서는 기본적으로 핸들러 매핑이 구현되어있어 직접 핸들러 매핑을 만들 필요는 없다.
🔗 동작 흐름
1. DispatcherServlet으로부터 요청 분석이 들어온다.
1-1. DispatcherServlet은 등록된 여러 개의 HandlerMapping을 탐색하고 HandlerMapping은 자신이 처리할 수 있는 조건에 맞는 요청인지 확인한다.
2. HandlerMapping은 요청의 URL패턴과 메소드(GET, POST, PUT, DELETE)를 분석한다.
3. 분석한 정보를 바탕으로 요청에 가장 적합한 핸들러(컨트롤러)를 찾는다.
🔍 HandlerMapping 종류
RequestMappingHandlerMapping
SimpleUrlHandlerMapping
BeanNameUrlHandlerMapping
DefaultAnnotationHandlerMapping
ControllerClassNameHandlerMapping
SimpleMappingExceptionResolver
RouterFunctionMapping
HandlerAdapter
HandlerMapping을 통해서 찾은 핸들러(컨트롤러)를 실행하기 위해서는 HandlerAdapter가 필요하다.
🔗 동작 흐름
1. DispatcherServlet이 HandlerMapping을 통해서 적합한 핸들러를 찾으면, 핸들러를 실행할 수 있는 HandlerAdapter를 찾는다.
1-1. Spring은 여러 개의 HandlerAdapter구현 클래스를 제공해 다양한 핸들러를 처리할 수 있다.
2. HandlerAdpater는 컨트롤러에 전달할 파라미터를 적절히 설정하고 핸들러 메소드를 실행한다.
3. 실행 결과를 ModelAndView or ResponseEntity와 같은 객체로 반환한다.
ModelAndView
Spring MVC에서 뷰(View)와 모델(Model)을 함께 반환할 때 사용하는 객체
뷰이름은 ViewResolver를 통해서 HTML, JSP 뷰로 렌더링 되고, 모델 데이터는 뷰에서 접근가능하다.
EX)
new ModelAndView("home", "user", user);
"home" : 뷰이름
"user" : 모델 데이터
ResponseEntity
Spring MVC에서 HTTP 응답의 상태 코드, 헤더, 본문을 모두 제어할 수 있는 객체
HttpMessageConverter를 통해서 객체를 JSON, XML형태로 변환하여 응답 본문에 담는다.
주로 REST API개발시에 클라이언트에 JSON본문과 상태코드를 같이 전달할 때 유용하다.
🔍 HandlerAdapter 종류
RequestMappingHandlerAdapter
HttpRequestHandlerAdapter
SimpleControllerHandlerAdapter
WebFluxHandlerAdapter
전체적인 흐름
'[ STUDY ] > 끄적끄적..' 카테고리의 다른 글
[ 알아보자 ] Proxy란? (3) | 2024.10.18 |
---|---|
[ 알아보자 ] HTTP통신을 할 때 어떤식으로 서버에 데이터를 요청하나... (10) | 2024.10.17 |
[ 알아보자 ] Spring Security 다시 알아보자.... (0) | 2024.10.16 |
[ 알아보자 ] WEB과 WAS (0) | 2024.10.16 |
[ 알아보자 ] HTTP...그리고 JWT... (0) | 2024.10.15 |