본문 바로가기

Spring/core

HandlerAdapter

 개인적으로 스프링 MVC를 처음 공부할 때 가장 이해하기 어려운 부분이 HandlerAdapter이었는데요. 최범균님의 스프링5 책 덕분에 갈증을 해소하게 되었습니다. 포스팅은 범균님의 스프링5, 영한님의 스프링 MVC 1,2 편 강의가 섞여 정리되어 있습니다.


HandlerAdapter : 컨트롤러 역할을 하는 클래스를 공통으로 처리하는 주체

 

스프링 2.5 이후에는 @Controller 애노테이션을 많이 사용했지만 과거에는 Controller 인터페이스를 이용했습니다. 

 

Controller 구현 예시

또한 특수 목적으로 사용되는 HttpRequestHandler 인터페이스까지 컨트롤러를 구현할 수 있는 방법은 여러가지입니다. 이 여러가지 방법을 동일한 방식으로 처리하기 위해 중간에 사용되는 것이 바로 HandlerAdapter입니다.

 

HandlerAdapter 역할을 그림으로 나타내면 아래와 같습니다. 

 

HandlerAdapter 대표적인 구현체는 RequestMappingHandlerAdapter인데요. 실제로 클래스를 살펴보면 상당히 복잡합니다. 무언가 역할이 더 있는 것 같은데요. 그 중 하나가 ArgumentResolver 호출입니다.

 

 api를 개발할 때 우리는 @RequestBody, @PathVariable, 시큐리티의 @AuthenticatedPrincapal 등 다양한 파라미터 애노테이션을 사용합니다. 

컨트롤러 메서드 파라미터에 붙는 애노테이션 예시

 

이들은 어떻게 잘 동작할 수 있을까요? 바로 이것을 가능하게 해주는 객체가 ArgumentResolver입니다. 다음 포스팅에선 ArgumentResolver에 대해 다뤄보겠습니다.


정리

HandlerAdapter 주요 역할

1. 컨트롤러 역할을 할 수 있는 객체 공통 처리

2. ArgumentResolver 호출