HandlerAdapter의 추상화 작업
2023. 6. 23. 06:56ㆍSpring Framework/Web on Servlet Stack
✅ HandlerAdapter가 추상화를 제공한다는 의미
DispatcherServlet
은 HandlerMapping
으로부터 적절한 핸들러 객체(예: @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 예:
@RequestParam
→RequestParamMethodArgumentResolver
@PathVariable
→PathVariableMethodArgumentResolver
@ModelAttribute
→ModelAttributeMethodProcessor
@RequestBody
→RequestResponseBodyMethodProcessor
Authentication
→AuthenticationPrincipalArgumentResolver
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 |