카테고리 없음
🌐 HttpMessageConverter란?
creator7087
2025. 4. 15. 19:33
HttpMessageConverter는 Spring MVC에서 요청(Request)과 응답(Response)의 Body 데이터를 객체로 변환하거나, 객체를 Body 데이터로 변환하는 역할을 하는 인터페이스입니다. 주로 @RequestBody, @ResponseBody 애노테이션을 통해 동작하며, Spring의 Rest API 처리 핵심 구성요소 중 하나입니다.
🔁 동작 방식
1. 요청(Request)에 적용될 때
- 사용 예시: @RequestBody, HttpEntity<T>, RequestEntity<T>
- 동작: HTTP 요청의 Body 데이터를 Java 객체로 변환
2. 응답(Response)에 적용될 때
- 사용 예시: @ResponseBody, HttpEntity<T>, ResponseEntity<T>
- 동작: Java 객체를 HTTP 응답 Body로 변환
팁:
Controller에 @RestController 또는 메서드에 @ResponseBody가 붙으면 View가 아닌 데이터 자체를 반환하며, 이 때 HttpMessageConverter가 자동으로 작동합니다. + ResponseEntity는 HttpEntity의 상속을 받았습니다.
💡 SSR vs CSR
구분특징예시
SSR (Server Side Rendering) | 서버에서 HTML을 렌더링하여 응답 | @Controller + View Template (JSP, Thymeleaf) |
CSR (Client Side Rendering) | 서버에서 데이터만 받고 클라이언트가 렌더링 | @RestController + JSON, XML 등 데이터만 전송 |
현업에서는 SSR과 CSR이 혼합된 방식이 일반적입니다. 예를 들어, 초기 진입 화면은 SSR로 처리하고 이후 데이터는 CSR 방식으로 처리하는 형태가 많습니다.
⚙️ HttpMessageConverter 적용 조건
조건설명
요청의 경우 | @RequestBody, HttpEntity, RequestEntity 사용 시 |
응답의 경우 | @ResponseBody, HttpEntity, ResponseEntity 사용 시 |
Content Negotiation | 클라이언트의 Accept Header와 서버의 응답 타입에 따라 적절한 Converter 선택 |
🥇 HttpMessageConverter 우선순위
Spring은 다양한 HttpMessageConverter를 기본적으로 제공하며, 어떤 Converter를 사용할지 결정하는 기준은 다음과 같습니다:
- Java 객체 타입 (대상 Class)
- MediaType (예: application/json, text/plain)
주요 HttpMessageConverter 목록
Converter대상 객체MediaType반환 Content-Type
ByteArrayHttpMessageConverter | byte[] | */* | application/octet-stream |
StringHttpMessageConverter | String | */* | text/plain |
MappingJackson2HttpMessageConverter | Object, Map | application/json | application/json |
추가공부:
커스텀 타입을 JSON으로 반환하고 싶다면, MappingJackson2HttpMessageConverter가 적용됩니다. 이는 Jackson 라이브러리를 이용하여 객체를 JSON 문자열로 자동 변환해 줍니다.
✅ 정리
- HttpMessageConverter는 객체와 HTTP 메시지의 Body 간 변환을 자동화합니다.
- @ResponseBody, @RequestBody 등에서 자동 적용됩니다.
- Accept, Content-Type 헤더 값과 반환 객체 타입에 따라 어떤 Converter를 사용할지 자동 결정됩니다.
- 우선순위는 기본 제공 Converter 중 대상 객체와 MediaType이 잘 맞는 것으로 선택됩니다.
GPT에게 물어본 후속질문
- [1] 커스텀 HttpMessageConverter를 직접 구현하려면 어떻게 해야 하나요?
- [2] MappingJackson2HttpMessageConverter에서 ObjectMapper 설정을 커스터마이징하는 방법은?
- [3] Spring에서 Content Negotiation 전략은 어떻게 동작하나요?