스프링 mvc의 전체적인 동작 과정(argument resolver, returnvalue handler)
지금까지는 스프링MVC에서 request, response를 다루는 방법을 알아보았다. 이번 글은 그 과정에서 파라미터로 받는 객체(Model, HttpEntity<>), return 값(url, String) 등은 어떻게 처리되는지에 대하여 알아볼 것이다.
위의 그림 간단 설명
1. 요청이 들어오면, 핸들러 조회 후 핸들러 어댑터는 알맞은 핸들러(컨트롤러)를 호출하여, 로직을 수행한다.
이때, Argument Resolver는 컨트롤러에 필요한 객체를 생성하고 파라미터로 전달해준다.
2. 핸들러에서 return 하는 반환값은 ReturnValue Handler가 값을 변환하고 처리해서 view로 보여주게 된다.
============================================================================================
Spring mvc 구조의 동작 과정을 다시 한번 정리해보겠다.
1. Http 요청이 들어온다.
2. DispatcherServlet으로 요청이 전달된다.
--DispatcherServlet에는 핸들러 어댑터 목록, 핸들러 매핑 기능, 핸들러 어댑터 실행 기능, 뷰 리졸버 호출 기능, 뷰 응답 기능이 있다.
3. Dispatcher Servlet은 @RequestMapping("urlname")으로 들어온 urlname이라는 핸들러가 있는지 조회한다.
--@Controller라는 어노테이션이 붙으면 스프링은 핸들러로 인식 후 싱글톤 스코프 스프링 빈으로 등록한다.(객체 생성)
(알맞는 핸들러가 없을 시 404오류 반환)
4. Dispatcher Servlet은 3번에서 들어온 핸들러를 처리할 수 있는 핸들러 어댑터 목록을 조회한다.
--스프링 빈에는 여러가지의 핸들러를 처리할 수 있는 기본 핸들러 어댑터들이 등록되어 있다.
--@Controller라고 등록된 클래스의 메소드들에는 @RequestMapping, @GetMapping등의 어노테이션이 붙는데, 이를 인식 후 DispatcherServlet은 알맞는 핸들러 어댑터를 사용한다.
5. 핸들러와, 핸들러 어댑터가 준비가 되었을 시, 핸들러 어댑터를 실행한다. 핸들러 어댑터는 핸들러를 실행한다.
--위의 그림처럼 이때, 핸들러 어댑터는 Argument Resolver를 호출, Argument Resolver는 java의 리플랙션 기능을 활용하여, 파라미터를 분석 후 파라미터에 맞는 객체를 생성하여 핸들러에 전달한다.
--리플랙션: 프로그램 실행중에 자신의 코드를 분석할 수 있는 java의 기술.
6. 핸들러는 처리 후 ReturnValueHandler 에 return을 하고 ReturnValueHandler는 return 된 값을 인식 후 핸들러 어댑터에 형식을 바꿔 전달하게된다.
7. 핸들러 어댑터는 이를 Dispatcher Servlet으로 반환하고, Dispatcher Servlet은 view Resolver를 호출한다.
8. view Resolver는 view 객체를 반환 후, Dispatcher Servlet은 그 view에 Model을 넘겨주며, 응답을 하게 된다.
다음 글 부터는 스프링 mvc로 간단한 웹 어플리케이션을 만들어 보겠다.
<본 글은 김영한님의 강의를 듣고 작성되었습니다.>