클라이언트로부터 HTTP 요청이 들어오면 가장 먼저 DispatcherServlet이 이를 받습니다. DispatcherServlet은 프론트 컨트롤러로서 모든 웹 요청의 진입점 역할을 합니다. 이후 RequestMappingHandlerMapping을 사용하여 요청 URL과 HTTP 메서드를 기반으로 적절한 컨트롤러 메서드를 찾습니다. 이 과정에서 해당 요청을 처리할 수 있는 핸들러 어댑터가 선택되어 실제 컨트롤러 메서드 호출을 준비합니다.
컨트롤러 메서드가 선택된 후, 해당 메서드의 파라미터를 처리하는 과정이 시작됩니다. 특히 @RequestBody 어노테이션이 있는 경우, HTTP 메시지 컨버터가 동작하여 요청 본문을 Java 객체로 변환합니다. 이때 요청의 Content-Type 헤더를 확인하여 적절한 메시지 컨버터가 선택되는데, JSON 요청의 경우 일반적으로 MappingJackson2HttpMessageConverter가 사용됩니다. URL 경로 변수나 쿼리 파라미터도 이 시점에서 적절한 타입으로 변환되어 메서드 파라미터에 바인딩됩니다.
컨트롤러 메서드가 실행되어 비즈니스 로직을 처리한 후, 반환값이 생성됩니다. @RestController 어노테이션이 있거나 메서드에 @ResponseBody가 있는 경우, 반환된 객체는 뷰 리졸버를 거치지 않고 직접 HTTP 응답 본문으로 변환됩니다. 이때도 HTTP 메시지 컨버터가 동작하는데, 클라이언트의 Accept 헤더를 기반으로 적절한 메시지 컨버터가 선택됩니다. ResponseEntity를 사용하면 HTTP 상태 코드나 응답 헤더와 같은 세부적인 응답 제어가 가능합니다.
HTTP 메시지 컨버터는 요청과 응답 과정에서 핵심적인 역할을 수행합니다. 요청 시에는 HTTP 요청 본문을 Java 객체로 역직렬화하고, 응답 시에는 Java 객체를 HTTP 응답 본문으로 직렬화합니다. 특히 Spring Boot에서는 Jackson 라이브러리를 기본으로 사용하여 JSON 형식의 데이터를 처리합니다. 메시지 컨버터는 Content-Type과 Accept 헤더를 기반으로 자동으로 선택되며, @ResponseBody와 @RequestBody 어노테이션과 긴밀하게 연동되어 동작합니다.