Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- transaction
- java
- Servlet
- pointcut
- JDBC
- 김영한
- jpa
- Proxy
- 그리디
- Greedy
- Exception
- 자바
- 스프링
- spring
- Android
- db
- http
- 인프런
- Thymeleaf
- QueryDSL
- kotlin
- AOP
- springdatajpa
- 스프링 핵심 기능
- SpringBoot
- 스프링 핵심 원리
- 알고리즘
- JPQL
- Spring Boot
- 백준
Archives
- Today
- Total
개발자되기 프로젝트
RequestMapping Handler Adapter 구조 본문
HTTP 메시지 컨버터는 SpringMVC 어디 쯤? 에서 사용됨....?
1. SpringMVC 구조
- @RequestMapping을 처리하는 핸들러 Adapter인 RequestMappingHandlerAdapter에서 처리함.
2. RequestMappingHandlerAdapter 동작 방식
2.1 Argument Resolver
- annotation 기반 controller는 다양한 파라미터 사용 가능
- HttpServletRequest, Model, @RequestParam, @ModelAttribute, @RequsetBody, HttpEnttiy 등등
- 이렇게 유연한 처리가 가능한 이유는 ArgumentResolver 때문임.
- annotaion기반 Controller를 처리하는 RequestMappingHandlerAdapter는 ArgumentResolver를 호출하여
- controller(=handler)가 필요한 다양한 파라미터 값(or 객체)를 생성하여 controller 호출 및 값 전달.
- HandlerMethodArgumentResolver를 줄여서 ArgumentResolver
2.2 ArgumentResolver 동작 방식
- ArgumentResolver 의 supportsParameter() 를 호출해서 해당 파라미터를 지원여부 확인
- 지원하면 resolveArgument() 를 호출해서 실제 객체를 생성한다.
- 그리고 이렇게 생성된 객체가 컨트롤러 호출시 넘어감.
3. ReturnValueHandler
- ArgumentResolver와 비슷
- Controller에서 반환한 값을 변환해줌.
- String으로 view이름 반환해도 동작하고 ModelAndView를 반환해도 동작하고 @ReponseBody 등등 유연하게 지원
4. HTTP Message Converter 위치
- Message Converter는 ArgumentResoler, ReturnValueHandler에서 사용함.
- 요청하는 경우
- @RequestBody 를 처리하는 ArgumentResolver 가 있고, HttpEntity 를 처리하는ArgumentResolver 가 있다.
- ArgumentResolver 들이 HTTP 메시지 컨버터를 사용해서 필요한 객체를 생성하는 것.
- 응답하는 경우
- @ResponseBody 와 HttpEntity 를 처리하는 ReturnValueHandler 가 있다.
- 그리고 여기에서 HTTP 메시지 컨버터를 호출해서 응답 결과를 만든다.(write() 호출)
- SpringMVC는
- @RequestBody @ResponseBody 가 있으면 RequestResponseBodyMethodProcessor (ArgumentResolver)
- HttpEntity 가 있으면 HttpEntityMethodProcessor (ArgumentResolver)를 사용한다.
5. 확장
- 스프링은 다음을 모두 인터페이스로 제공한다. 따라서 필요하면 언제든지 기능을 확장할 수 있다.
- HandlerMethodArgumentResolver
- HandlerMethodReturnValueHandler
- HttpMessageConverter
- 스프링이 필요한 대부분의 기능을 제공하기 때문에 실제 기능을 확장할 일이 많지는 않다.
- 기능 확장은 WebMvcConfigurer 를 상속 받아서 스프링 빈으로 등록하면 됨.
- 실제 자주 사용하지는 않으니 실제 기능 확장이 필요할 때 WebMvcConfigurer 확인.
'인프런 > [인프런] 스프링 MVC 1' 카테고리의 다른 글
[WebPage] 상품 도메인 개발 (0) | 2021.09.16 |
---|---|
[WebPage] 프로젝트 생성, 요구사항 분석 (0) | 2021.09.16 |
HTTP 메시지 컨버터 (0) | 2021.09.15 |
HTTP response - HTTP API, 메시지 바디에 직접 입력 (0) | 2021.09.15 |
Response - static resource, View Template (0) | 2021.09.15 |
Comments