본문 바로가기

Spring

[Spring] Spring MVC, RequestMappingHandlerAdapter의 요청 및 응답 처리 과정

 


 

RequestMappingHandlerAdapter 구조

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