[출처]springmvc1 강의 자료/178페이지
강의에서 제공하는 그림에서 HTTP 메시지 컨버터의 위치가 보이지 않는다. 이 부분에 대해서 진도를 나갔다. 강사님이 모든 비밀은 @RequestMapping을 처리하는 핸들러 어댑터인 RequestMappingHandlerAdapter에 있다고 했다.
RequestMappingHandlerAdapter 동작 방식이다.
RequestMapping(핸들러 어댑터)가 ArgumentResolver에게 필요한 객체를 가져와 달라고 요청하고 ArgumentResolver는 객체를 가져다 준다. 이렇게 객체를 다 만들고 RequestMapping은 핸들러(컨트롤러)를 호출하게 되고 호출을 하면서 핸들러가 필요로하는 파라미터를 ArgumentResolver가 전달해 준다. 그 뒤 ReturnValueHandler가 컨트롤러의 반환 값을 변환(ModelAndView, @ResponseBody, HttpEntity)하여 응답해준다.
어노테이션 기반 컨트롤러는 매우 다양한 파라미터를 사용할 수 있었는데 이번 강의를 통해 그렇게 자유롭고 유연하게 처리할 수 있었던 이유는 ArgumentResolver 덕이였다는 것을 알게 되었다.
ArgumentResolver가 제공하는 파라미터 목록은 **공식 문서**에서 확인할 수 있다.
정확히는 HandlerMethodArgumentResolver인데 줄여서 ArgumentResolver라고 부르고 동작 방식은 이렇다.
ArgumentResolver의 supportsParameter()를 호출해서 해당 파라미터를 지원하는지 체크하고 지원하면 resolveArgument()를 호출해 실제 객체를 생성하고 컨트롤러 호출 시 이 객체를 넘기게 된다.
HandlerMethodReturnValueHandler를 줄여서 ReturnValueHandle라고 부른다. ArgumetnResolver와 비슷한데 이것은 응답 값을 변환하고 처리한다. 컨트롤러에서 Spring으로 뷰 이름을 반환해도 동작하는 이유가 ReturnValueHandler 덕분이라고 한다.
강의에서 HTTP 메시지 컨버터가 어디쯤에서 동작하고 있을지에 대해서도 다뤘다.
[출처] springmvc1 강의 자료 / 180페이지
@RequestBody도 컨트롤러가 필요로 하는 파라미터의 값에 사용이 되고 @ResponseBody도 컨트롤러의 반환 값을 이용한다.
요청은 @ResponseBody를 처리하는 ArgumentResolver가 있고 HttpEntity를 처리하는 ArgumentResolver가 있다고 한다. 이 ArgumentResolver들이 HTTP 메시지 컨버터를 사용해 필요한 객체를 생성한다.
응답은 @ResponseBody와 HttpEntity를 처리하는 ReturnValueHandler가 있고 여기에서 HTTP 메시지 컨버터를 호출해 응답 결과를 만든다.
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술을 참고하여 공부하였습니다.
'Framework & Library > Spring Boot' 카테고리의 다른 글
[Spring Boot] : 요구사항에 맞춰 상품 도메인을 개발하고 테스트 코드를 작성하기 (0) | 2022.02.02 |
---|---|
[Spring Boot] : 프로젝트 생성 및 요구사항 분석 (0) | 2022.02.01 |
[Spring Boot] : HTTP 메시지 컨버터 (0) | 2022.01.28 |
[Spring Boot] : HTTP, API 메시지 바디에 직접 입력해 HTTP 응답하기 (0) | 2022.01.28 |
[Spring Boot] : 정적 리소스 및 뷰 템플릿 (0) | 2022.01.26 |
댓글