인프런에서 '스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술' 강의를 학습하고 정리한 내용입니다.
모든 이미지는 제가 다시 만든 것이므로 복사해서 쓰시는 경우 출처를 남겨주시기 바랍니다.
1. http request를 처리 할 수 있는 핸들러(컨트롤러) 있는지 찾기
2. 해당 컨트롤러를 동작시킬 수 있는 어댑터 찾기
3. 어댑터를 통해 컨트롤러 실행을 요청한다.
4. 어댑터는 필요한 리졸버를 찾아 컨트롤러에게 파라미터를 전달해주도록 한다.
컨트롤러를 보고 필요한 리졸버를 찾고(위에선 3개), 이 3개를 for loop을 돌려 실행한다.
스프링은 30개가 넘는 ArgumentResolver 를 기본으로 제공한다. (인터페이스 HandlerMethodArgumentResolver 의 구현체들)
5. http body가 있는 경우, http 메시지 컨버터를 호출한다.
http body 내용의 형식에 따라 다양한 http 메시지 컨버터가 존재한다.
여러가지 HttpMessageConverter 를 for loop으로 확인하면서 가능한 컨버터를 찾는다.
스프링은 다양한 HttpMessageConverter 를 기본으로 제공한다. (인터페이스 HttpMessageConverter 의 구현체들)
6. 어댑터가 컨트롤러를 호출한다.
7. ReturnValueHandler를 호출하여 컨트롤러 결과값을 알맞은 리턴값으로 변환한다.
위 그림은 @ResponseBody여서 리졸버때 호출했던 클래스가 ReturnValueHandler 기능도 구현하고 있어 다시 한번 호출한 경우이다. 리턴값이 ModelAndView 또는 String 또는 다른 것이었다면 별도의 ReturnValueHandler를 호출했을 것이다.
for loop를 돌면서 알맞은 ReturnValueHandler 구현체를 찾는다.
스프링은 10개가 넘는 ReturnValueHandler 를 지원한다. (인터페이스 HandlerMethodReturnValueHandler 의 구현체들)
8. http body에 바로 넣어야하는 경우, http 메시지 컨버터를 호출한다.
여러가지 HttpMessageConverter 를 for loop으로 확인하면서 가능한 컨버터를 찾는다.
9. 응답값 리턴
'SpringBoot' 카테고리의 다른 글
쿠키, 세션 구현, 동작 원리 (0) | 2024.05.17 |
---|---|
bindingResult 가 쌓이는 과정, @Valid (0) | 2024.05.16 |
[SpringBoot] 웹서버, WAS, JSP, Servlet, MVC 패턴, MVC 프레임워크, Front Controller (0) | 2024.03.18 |
[SpringBoot] API 상태코드, HTTP 헤더, 콘텐츠 네고시에이션, 쿠키, 캐시 (0) | 2024.03.18 |
[SpringBoot] @Bean, @Autowired, TCP, UDP, URI, HTTP 메소드 (0) | 2024.03.18 |
댓글