HandlerAdapter의 추상화 작업

2023. 6. 23. 06:56Spring Framework/Web on Servlet Stack

✅ HandlerAdapter가 추상화를 제공한다는 의미

DispatcherServletHandlerMapping으로부터 적절한 핸들러 객체(예: @Controller의 메서드) 를 찾은 후, 이를 실행해야 합니다.
하지만 핸들러는 다양할 수 있고, 처리 방식도 달라질 수 있습니다.
예를 들어, 다음과 같은 다양한 타입이 존재할 수 있습니다:

  • @RequestMapping이 붙은 HandlerMethod
  • HttpRequestHandler
  • Controller 인터페이스 구현체 등

DispatcherServlet이 이 모든 타입을 직접 처리하면 매우 복잡해지므로,
이를 추상화하는 계층이 바로 HandlerAdapter 입니다.

 

✅ 그럼 "추상화"는 무엇을 포함하나요?

HandlerAdapter는 단순히 handler.handle(request, response) 식으로 실행하는 것이 아니라 다음과 같은 복잡한 작업들을 대신 수행합니다:

1. 핸들러의 메서드 시그니처 분석

  • 예: public String myHandler(@RequestParam("id") Long id, @RequestBody User user, Authentication auth, ...)
  • 이처럼 다양한 파라미터 타입을 해석해야 합니다.

2. 각 파라미터에 적절한 아규먼트를 주입

  • 이것이 바로 아규먼트 리졸버 (HandlerMethodArgumentResolver) 의 역할입니다.
  • 대표적인 Resolver 예:
    • @RequestParamRequestParamMethodArgumentResolver
    • @PathVariablePathVariableMethodArgumentResolver
    • @ModelAttributeModelAttributeMethodProcessor
    • @RequestBodyRequestResponseBodyMethodProcessor
    • AuthenticationAuthenticationPrincipalArgumentResolver

3. 실제 핸들러 메서드를 실행하고 리턴값을 수집

  • 리턴값의 종류(String, ResponseEntity, void, ModelAndView 등)를 해석
  • 필요 시 HandlerMethodReturnValueHandler를 사용하여 리턴값을 가공

 

🔁 정리

"HandlerAdapter가 추상화를 제공한다"
→ DispatcherServlet이 핸들러의 내부 구조(파라미터, 리턴값 등)를 몰라도 되도록 도와준다.
→ 실제로는 내부에서 파라미터 타입 분석, ArgumentResolver 실행, 핸들러 실행, 리턴값 처리까지 수행한다.

 

'Spring Framework > Web on Servlet Stack' 카테고리의 다른 글

Annotated Controllers[1]  (1) 2024.10.06
PathPattern  (0) 2023.06.23
contextPath와 servletPath  (0) 2023.06.23
requestURI  (0) 2023.06.23
Filter  (0) 2023.05.19