스프링을 사용하다보면 Controller에 @RequestBody 어노테이션을 붙여 Request Dto를 만들어 쓰곤하는데 이게 어떻게 동작하는지 궁금해서 찾아보고 정리한 글이다.
일단 스프링은 HTTP 요청이 오면 간단하게는 아래와 같이 동작한다.
이 때 @RequestBody는 Controller 쪽에 붙이는 어노테이션이므로 Controller의 존재에 대해 알고있으면서, HTTP 요청으로 온 Request 정보도 알고 있는 DispatcherServelet 에서 처리하겠구나 정도를 예상할 수 있다.
DispatcherServlet의 코드를 확인해보면 요청을 처리할 Handler를 가져오는 과정이 있다. 이 Handler는 해당 요청을 처리할 컨트롤러의 특정 메서드 정보를 가지고 있는데, 이 정보 안에 파라미터 정보가 있고, 따라서 @RequestBody가 붙어있는 파라미터 정보도 알 수 있다.
그리고 이 정보를 기반으로 HandlerAdapter 라는 클래스가 이후 처리를 맡게 되는데 여기서 @RequsetBody 정보를 읽고 적절한 처리를 해준다.
코드를 간단히 요약하면 아래와 같은 형태로 존재한다.