Spring

HttpMessageConverter

윤승 2025. 4. 15. 20:50

✅ HttpMessageConverter 개요

 

  • HttpMessageConverter는 HTTP 요청(Request) 또는 HTTP 응답(Response)본문(Body) 내용을 Java 객체 ↔ HTTP 메시지변환(직렬화/역직렬화) 해주는 Spring Framework의 인터페이스이다.
HttpMessageConverter는 Spring에서 HTTP 요청과 응답의 본문을 Java 객체로 변환하거나 Java 객체를 HTTP 메시지로 직렬화해주는 인터페이스로, 주로 REST API 개발에서 사용되며, 요청의 Content-Type과 응답의 Accept 헤더를 기준으로 JSON, XML, 문자열, 바이트 배열 등 다양한 형식의 데이터를 자동으로 처리해준다.

 

✅ 사용 예시

 

예시 1: String 처리

@PostMapping("/string")
public String string(@RequestBody String data) {
  return data;
}
  • 요청 Content-Type: text/plain
  • 응답: text/plain (기본값)

클라이언트가 text/plain 타입의 데이터를 보낼 때 @PostMapping("/string")과 함께 @RequestBody String data를 사용하면, 내부적으로 StringHttpMessageConverter가 동작하여 요청 본문을 문자열로 변환하고, 응답도 다시 text/plain으로 변환된다.

 

예시 2: JSON → DTO

@PostMapping("/json")
public Data json(@RequestBody Data data) {
  return data;
}
  • 요청: application/json
  • 응답: application/json

클라이언트가 application/json 타입으로 JSON 데이터를 보내고, 서버가 @RequestBody Data data처럼 DTO를 받는다면, MappingJackson2HttpMessageConverter가 JSON을 Java 객체로 역직렬화하고, 반환값도 자동으로 JSON으로 직렬화하여 클라이언트에 전달된다.

✅ 동작 순서

요청 (Request → Java Object)

  1. 클라이언트가 JSON 등 Body 데이터를 포함한 요청을 보냄
  2. @RequestBody / HttpEntity<> 등으로 Controller가 요청 데이터를 바인딩
  3. HttpMessageConverter 목록을 순회하며 canRead()로 변환 가능 여부 확인
  4. 가능한 Converter의 read() 실행 → Java 객체로 변환

응답 (Java Object → Response)

  1. Controller가 응답 객체를 반환
  2. @ResponseBody 또는 HttpEntity<>, ResponseEntity<> 등 사용
  3. canWrite()로 변환 가능한 Converter 탐색
  4. 가능한 Converter의 write() 실행 → HTTP 응답 Body로 출력
Spring Boot 기본 설정에서는 아래 3가지가 자주 사용된다.

 

Converter 대상 타입 Content-Type (요청/응답)
ByteArrayHttpMessageConverter byte[] application/octet-stream
StringHttpMessageConverter String text/plain
MappingJackson2HttpMessageConverter Object, Map, DTO application/json

 

 

 

 

 

'Spring' 카테고리의 다른 글

Early Return 패턴  (1) 2025.04.17
JPA 연관관계  (1) 2025.04.16
뉴스피드 프로젝트 트러블 슈팅  (4) 2025.04.14
JPQL이란? (@Query)  (1) 2025.04.10
뉴스피드 프로젝트 설계  (1) 2025.04.07