Spring MVC에서 @RequestMapping 및 그 변형(@GetMapping, @PostMapping, ...)을 처리하는 핵심 컴포넌트로, 다음 역할을 합니다:
- HTTP 요청을 적절한 컨트롤러 메서드에 연결
- 메서드에 필요한 파라미터를 생성(ArgumentResolver)
- 메서드를 실행하고 결과 값을 반환하며 반환 값을 응답 형태로 변환(ReturnValueHandler)
🧭 동작 순서: 전반적인 흐름
- DispatcherServlet이 클라이언트 요청 수신
- HandlerMapping이 적절한 Controller 메서드를 찾음
- HandlerAdapter(RequestMappingHandlerAdapter)가 해당 메서드를 호출하기 위한 작업 수행
- ArgumentResolver를 통해 파라미터 바인딩
- Controller 메서드 실행
- ReturnValueHandler를 통해 반환값을 응답으로 변환
- 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 내부 동작을 디버깅하는 방법은 어떤 방식이 효과적인가요?