본문 바로가기

카테고리 없음

🚦 RequestMappingHandlerAdapter란?

Spring MVC에서 @RequestMapping 및 그 변형(@GetMapping, @PostMapping, ...)을 처리하는 핵심 컴포넌트로, 다음 역할을 합니다:

  • HTTP 요청을 적절한 컨트롤러 메서드에 연결
  • 메서드에 필요한 파라미터를 생성(ArgumentResolver)
  • 메서드를 실행하고 결과 값을 반환하며 반환 값을 응답 형태로 변환(ReturnValueHandler)

🧭 동작 순서: 전반적인 흐름

  1. DispatcherServlet이 클라이언트 요청 수신
  2. HandlerMapping이 적절한 Controller 메서드를 찾음
  3. HandlerAdapter(RequestMappingHandlerAdapter)가 해당 메서드를 호출하기 위한 작업 수행
  4. ArgumentResolver를 통해 파라미터 바인딩
  5. Controller 메서드 실행
  6. ReturnValueHandler를 통해 반환값을 응답으로 변환
  7. HttpMessageConverter 등을 통해 최종 HTTP 응답 생성

🧩 주요 컴포넌트 세부 설명

1. HandlerMethodArgumentResolver

컨트롤러 메서드에 필요한 파라미터를 생성해주는 인터페이스

대표적인 Resolver 종류

Resolver 클래스적용 대상
RequestParamMethodArgumentResolver @RequestParam
PathVariableMethodArgumentResolver @PathVariable
RequestBodyMethodArgumentResolver @RequestBody
ModelAttributeMethodArgumentResolver @ModelAttribute
ServletRequestMethodArgumentResolver HttpServletRequest, HttpServletResponse 등

핵심 메서드

boolean supportsParameter(MethodParameter parameter);
Object resolveArgument(...);
  • supportsParameter: 해당 파라미터를 이 Resolver가 처리할 수 있는지 확인
  • resolveArgument: 실제 파라미터 객체를 생성
 

팁:
필요에 따라 HandlerMethodArgumentResolver를 implements 하여 나만의 커스텀 파라미터 바인딩 로직을 추가가능!

 

2. HandlerMethodReturnValueHandler

컨트롤러 메서드의 반환 값을 응답으로 변환하는 인터페이스

대표적인 Handler 종류

Handler 클래스적용 대상
ModelAndViewMethodReturnValueHandler ModelAndView
ViewNameMethodReturnValueHandler String (View 이름)
HttpEntityMethodProcessor HttpEntity, ResponseEntity
RequestResponseBodyMethodProcessor @ResponseBody, JSON 반환 등

핵심 메서드

boolean supportsReturnType(MethodParameter returnType);
void handleReturnValue(Object returnValue, ...);
  • supportsReturnType: 해당 반환 값을 이 Handler가 처리할 수 있는지 확인
  • handleReturnValue: 반환값을 응답 형식으로 처리 (View, JSON 등)

팁:
@ResponseBody가 붙은 메서드는 RequestResponseBodyMethodProcessor가 처리하며, 여기서 HttpMessageConverter를 사용해 객체를 JSON, XML 등의 포맷으로 변환합니다.

 

🔁 요약 도식화

[요청]
        ↓
DispatcherServlet
  ↓
HandlerMapping → Controller Method 결정
  ↓
RequestMappingHandlerAdapter
  ├─ ArgumentResolver → 메서드 파라미터 준비
  ├─ Controller Method 실행
  └─ ReturnValueHandler → 응답 객체 변환
      └─ (필요시) HttpMessageConverter → JSON, XML 응답

 

✅ 정리 포인트

구성요소역할
RequestMappingHandlerAdapter 컨트롤러 호출 전체 처리 담당
HandlerMethodArgumentResolver 메서드 파라미터 생성
HandlerMethodReturnValueHandler 메서드 반환 값 처리
HttpMessageConverter 응답 본문 데이터 변환 (JSON, XML 등)

팁:
Spring MVC의 유연함은 대부분 이 인터페이스 기반 구조 덕분입니다. 기본 제공 외에도 개발자가 직접 구현해 원하는 방식으로 확장할 수 있습니다!


후속 추천 질문

  • [1] 커스텀 HandlerMethodArgumentResolver는 어떻게 만들고 등록하나요?
  • [2] ReturnValueHandler를 커스터마이징하여 특정 타입을 JSON 대신 다른 포맷으로 응답하려면 어떻게 하나요?
  • [3] RequestMappingHandlerAdapter 내부 동작을 디버깅하는 방법은 어떤 방식이 효과적인가요?