카테고리 없음

🌐 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를 사용할지 결정하는 기준은 다음과 같습니다:

  1. Java 객체 타입 (대상 Class)
  2. 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 전략은 어떻게 동작하나요?