HTTP 메시지 컨버터 (HTTP Message Converter)
- HTTP Request와 Response를 변환하는데 사용되는 컴포넌트
- 다양한 데이터 형식 간의 변환(직렬화, 역직렬화)을 자동으로 처리
- HTTP 메시지 컨버터는 요청 본문(request body)을 객체로 변환하거나, 객체를 응답 본문(response body)으로 반환
1. 개념
- 요청 메시지 컨버터 (Request Message Converter)
- 클라이언트가 전송한 HTTP 요청의 본문을 자바 객체로 변환
- 예를 들어, JSON 형식이 요청 본문을 자바 클래스의 객체로 변환
- 응답 메시지 컨버터 (Response Message Converter)
- 자바 객체를 HTTP 응답의 본문으로 변환
- 예를 들어, 자바 객체를 JSON 형식으로 변환하여 클라이언트에게 전송
2. Spring에서의 메시지 컨버터
Spring Framework에서 메시지 컨버터는 주로 HttpMessageConverter 인터페이스를 구현하여 사용된다. Spring MVC는 요청과 응답의 데이터 변환을 위해 이 컨버터를 자동으로 관리한다.
- MappingJackson2HttpMessageConverter
- JSON 데이터를 객체로 변환하거나, 객체를 JSON으로 변환
- XmlMapperHttpMessageConverter
- XML 데이터를 객체로 변환하거나, 객체를 XML로 변환
- StringHttpMessageConverter
- FormHttpMessageConverter
- 폼 데이터(application/x-www-form-urlencoded)를 객체로 변환
3. Spring MVC 구조에서 HTTP 메시지 컨버터의 실행 위치

- 요청 수신
- 클라이언트로부터 HTTP 요청이 디스패처 서블릿에 도달
- 핸들러 매핑
- 디스패처 서블릿은 요청 URL을 기반으로 적절한 핸들러(컨트롤러)를 조회
- 핸들러 어댑터 실행
- 핸들러 매핑이 성공하면, 디스패처 서블릿은 핸들러 어댑터에게 요청 처리를 위임
- 핸들러 어댑터는 핸들러(컨트롤러)를 호출하여 실제로 요청을 처리
- 요청 본문 변환
- 핸들러 어댑터는 컨트롤러 메서드의 파라미터에
@RequestBody가 붙어있는 경우, 요청 본문을 적절한 자바 객체로 변환하기 위해 메시지 컨버터를 사용
- 이 과정에서
HttpMessageConverter가 실행
- 컨트롤러 실행
- 변형된 자바 객체가 컨트롤러 메서드의 파라미터로 전달되고, 컨트롤러 메서드 실행
- 응답 본문 변환
- 컨트롤러 메서드가 값을 반환하면, 핸들러 어댑터는 반환 값을 HTTP 응답 본문으로 변환하기 위해 메시지 컨버터를 다시 사용
- 이 과정에서 응답 객체는 적절한 형식(JSON, XML 등)으로 변환
- 응답 전송
- 변환된 응답 본문은 디스패처 서블릿을 통해 클라이언트에게 전송