목차
RequestMappingHandlerAdapter 구조
용어 정리
DispatcherServlet : Spring MVC의 핵심 프론트 컨트롤러
- 클라이언트의 모든 요청을 가로채고, 적적할 컨트롤러(메서드)에게 요청을 전달한 뒤, 응답까지 처리합니다.
RequestMappingHandlerAdapter : `@RequestMapping`이 붙은 메서드를 호출하기 위한 핸들러 어댑터
- DispatcherServlet이 컨트롤러를 호출할 수 있도록 돕습니다.
- 내부적으로 `ArgumentResolver`, `ReturnValueHandler`, `HttpMessageConverter` 등을 사용해 파라미터(Http 요청 값)와 응답을 처리합니다.
ArgumentResolver : 컨트롤러 메서드의 파라미터를 객체로 변환해주는 컴포넌트입니다.
- @RequestParam
- @RequestBody
HttpMessageConverter : HTTP 요청/응답 Body를 Java 객체로 변환(역직렬화) 그 반대로 변환(직렬화) 합니다.
- JSON(`@RequestBody`) → Java 객체
- Java 객체 → JSON (`@ResponseBody`)
ReturnValueHandler : 컨트롤러가 반환한 값을 적절한 형태(VIEW, JSON 등)로 변환해주는 컴포넌트입니다.
- 예 : `@ResponseBody`를 통해 객체를 JSON으로 변환하여 응답
전체 흐름 요약
1. 클라이언트 요청 → DispatcherServlet
- 클라이언트의 HTTP 요청을 DispatcherServlet이 가장 먼저 받습니다.
2. HandlerAdapter 조회 및 요청 위임
- DispatcherServlet은 알맞은 컨트롤러를 호출하기 위해 RequestMappingHandlerAdapter를 찾고, 요청을 전달합니다.
3. 파라미터 분석 및 변환 (ArgumentResolver)
- HandlerAdapter는 컨트롤러의 파라미터 타입과 어노테이션(@RequestParam, @RequestBody 등)을 보고, ArgumentResolver를 통해 요청 데이터를 Java 객체로 변환함.
- 필요한 경우 내부적으로 HttpMessageConverter가 동작해 JSON 등을 Java 객체로 변환.
4. 컨트롤러 실행 (Handler)
- 변환된 파라미터를 사용하여 실제 컨트롤러 메서드를 호출함.
5. 반환값 처리 (ReturnValueHandler)
- 컨트롤러가 반환한 값을 ReturnValueHandler가 처리하여 응답 형태로 변환.
- 예: @ResponseBody가 붙어 있으면 Java 객체를 JSON으로 변환해야 하므로, 다시 HttpMessageConverter 사용.
6. DispatcherServlet이 응답 반환
- 최종적으로 변환된 응답을 DispatcherServlet이 받아 클라이언트에게 전달함.
ArgumentResolver vs HttpMessageConverter의 차이점
항목 | `ArgumentResolver` | `HttpMessageConverter` |
역할 | 컨트롤러 메서드의 파라미터를 생성 | HTTP 요청/응답 본문(body)을 변환 |
처리 대상 | `@RequestParam`, `@PathVariable`, `@RequestHeader`, `@ModelAttribute` 등 | `@RequestBody`, `@ResponseBody` 등 |
데이터 위치 | 주로 URL, 헤더, 쿼리 파라미터 등 | 주로 HTTP body |
기반 기술 | 직접 값 추출 및 변환 (스프링 내부 구현) | JSON ↔ Java 변환 (Jackson 등 사용) |
✨ `ArgumentResolver`는 파라미터를 Java 객체로 변환하지만, `HttpMessageConverter`는 Http body 데이터를 Java 객체로 변환합니다. 헷갈리지 않도록 주의!!
https://kimyongjun0129.tistory.com/186
[Spring] Spring MVC, RequestMappingHandlerAdapter의 요청 및 응답 처리 과정 : ArgumentResolver & ReturnValueHandler란?
목차RequestMappingHandlerAdapter의 요청 및 응답 처리 전체 구조RequestMappingHandlerAdapter 구조ArugmentResolverReturnValueHandler RequestMappingHandlerAdapter의 요청 및 응답 처리 전체 구조https://kimyongjun0129.tistory.com/185 [
kimyongjun0129.tistory.com
'Spring' 카테고리의 다른 글
[Spring] Spring MVC, RequestMappingHandlerAdapter의 요청 및 응답 처리 과정 : HttpMessageConverter (0) | 2025.06.06 |
---|---|
[Spring] Spring MVC, RequestMappingHandlerAdapter의 요청 및 응답 처리 과정 : ArgumentResolver & ReturnValueHandler란? (0) | 2025.06.05 |
[Spring] Spring URI 매핑 방식의 진화: 초기 Bean 이름 매핑부터 어노테이션 기반까지 (0) | 2025.05.26 |
[Spring] 의존 관계 주입 방법 4가지 (2) | 2025.05.23 |
[Spring] Bean 등록 방법 (4) | 2025.05.23 |