HandlerAdapter
Spring MVC에서 HTTP 요청을 컨트롤러 메서드에 매핑하고 실행하는 핵심 구성 요소이다.
클라이언트 요청에 대한 적절한 컨트롤러의 메서드와 연결한 후 이 메서드를 호출하여 결과를 반환하는 역할을 수행한다.
Spring MVC 구조에서 메시지 컨버터는 어디에?
Handler를 호출하기 위해 요청 바디 메시지의 내용을 메시지 컨버터를 통해 변환 후 파라미터 값에 전달해야한다.
HandlerAdapter와 Handler 사이에서 어떤 일이 일어난다.
ArgumentResolver
@RequestMapping 을 처리하는 HandlerAdapter 구현체인 RequestMappingHandlerAdapter로 동작의 예시를 보면 다음과 같다.
- RequestMappingHandlerAdapter 는 ArgumentResolver 를 호출하여 Controller 가 필요한 다양한 파라미터 값을 생성한다.
- HttpServletRequest, Model, HttpEntity, @ModelAttribute, @RequsetBody, @RequestParam 등 다양한 파라미터 바인딩을 할 수 있는 이유이다.
- ArgumentResolver 를 통하여 값이 준비되면 해당값을 가지고 실제 Controller를 호출한다.
ArgumentResolver
Spring MVC에서 컨트롤러 메서드의 파라미터를 자동으로 바인딩하는 역할을 하는 인터페이스로 요청이 컨트롤러 메서드에 전달될 때 파라미터를 적절한 객체로 변환하여 주입하는 것을 담당한다.
ArgumentResolver 종류
Spring은 다양한 Argument Resolver들을 기본적으로 제공한다.
- RequsetBodyArgumentResolver (@RequestBody)
- RequestHeaderArgumentResolver (@RequestHeader)
HandlerMethodArgumentResolver
ArgumentResolver의 실제 이름으로 인터페이스로 구성되어 있다. 이것을 구현하여 커스텀하게 파라미터를 만들 수 있다.
주요 메서드는 다음과 같다.
- supportsParameter(MethodParameter parameter);
- 컨트롤러가 필요로하는 메서드의 파라미터를 지원하는지 여부를 검사한다.
- resolveArgument()
- 지원한다면 resolveArgument()를 호출하여 Object(객체)로 만들어준다.
- 만들어진 객체가 Controller 호출 시 메서드의 파라미터로 전달된다.
아래 공식 문서를 통해 지원하는 파라미터 목록을 확인할 수 있다.
ReturnValueHandler
Spring MVC에서 컨트롤러 메서드가 반환하는 값을 처리하여 HTTP 응답에 맞게 변환하는 역할을 하는 인터페이스이다.
컨틀롤러 메서드가 실행 후 반환값을 HTTP 응답의 본문에 적절히 담아 전송할 수 있도록 도와준다.
ReturnValueHandler
ModelAndView, @ResponseBody, HttpEntity<> 등이 있으면 응답에 필요한 값으로 변환된다.
- Controller에서 String으로 ViewName을 반환해도 View가 동작하는 이유이다.
Spring은 다양한 ReturnValueHandler를 기본적으로 제공한다.
HandlerMethodReturnValueHandler 인터페이스를 구현해서 ReturnValueHandler를 확장할 수 있다.
HttpMessageConverter는 어디에서 동작하는가?
요청시에는 Argument Resolver가 사용하는 것이고
응답시에는 ReturnValueHandler가 사용한다.
'스프링 프레임워크' 카테고리의 다른 글
TypeConverter (0) | 2024.11.27 |
---|---|
WebMvcConfigure (0) | 2024.11.27 |
HttpMessageConverter (0) | 2024.11.27 |
Spring의 MVC의 구조 (0) | 2024.11.27 |
프론트 컨트롤러 패턴와 어댑터 패턴 (0) | 2024.11.27 |