스프링 MVC: 핸들러 어뎁터 구조 (몰랐던것 중심)

RisingJade의 개발기록·2022년 3월 4일
0

SPRING MVC

목록 보기
6/6

요청 매핑 핸들러 어뎁터 구조

SpringMVC구조

위의 그림에서 보이듯이, DispatcherServlet이 가지고 있는 핸들러를 처리할 수 있는 핸들러 어뎁터를 조회하고, 핸들러 어뎁터는 그것에 맞는 핸들러를 호출해서 값을 전달한다.
이때, HTTP 메시지 컨버터는 @RequestMapping을 처리하는 핸들러 어뎁터인 요청 매핑 핸들러에 들어가 있다.

ArgumentResolver

애노테이션 기반 컨트롤러를 생각해보면 매우 다양한 파라미터를 받는다는 것을 알 수 있다.
어떻게 이 많은 파라미터를 다 받을 수 있을까? 그런 바로 ArgumentResolver 덕분이다.

애노테이션 기반 컨트롤러를 처이하는 RequestMappingJandlerAdaptor는 바로 이 ArgumentResolver를 호출해서 컨트롤러(핸들러)가 필요로 하는 다양한 파라미터 값(객체)을 '자동'으로 생성하고, 이 파라미터 값을 전부 만들면 컨트롤러를 호출하면서 값을 넘겨준다.

ReturnValueHandler

위에서 말한 ArgumentResolver랑 성격이 비슷하다. 단지 이것은 응답 값을 변환하고 처리한다는 것이 다르다. 컨트롤러에서 ModelAndView가 아닌String 타입으로 뷰 이름을 반환해도 알아서 동작하는 이유가 이 ReturnValueHandler가 각종 타입으로 만들어서 넘겨주기 때문이다.

HTTP 메시지 컨버터

ArgumentResolver나 ReturnValueHandler가 HTTP바디 내부에 다이렉트로 넣어야하고 내부적으로 객체를 생성할 일이 있으면(ex. @RequestBody HelloData data같은거) HTTP 메시지 컨버터를 호출한다.(쉽게 말해서 @ResponseBody같은거 붙어있어서 HTTP-body에 다이렉트로 뭘 적고 싶을때 혹은 다이렉트로 HTTP-body 값을 받고싶을때 호출된다는 뜻)

profile
언제나 감사하며 살자!

0개의 댓글