Hyeok의 웹 개발 블로그

<2025.04.15> HttpMessageConverter 본문

TIL/Spring

<2025.04.15> HttpMessageConverter

Yhyeok 2025. 4. 15. 19:48

🔎HttpMessageConverter

  • View를 읍답하는 것이 아닌, Rest API(HTTP API)로 JSON, TEXT, XML 등의 데이터를 응답
  • Message Body에 직접 입력하는 경우 HttpMessageConverter를 사용

💡 1. SSR → @Controller + View Template → 서버 측에서 화면을 동적으로 그린다.

     2. CSR → @RestController + Data → 클라이언트 측에서 화면을 동적으로 그린다.

     3. 실제로는 두가지 기술이 함께 사용되는 경우가 많다.

 

 

 - HTTP 응답 메세지 Body에 데이터를 직접 입력 후 반환

 - 요청 Accept Header + Controller 반환 타입

 

 

  • HttpMessageConverter가 적용되는 경우
    1. HTTP 요청 : @RequestBody, HttpEntity<>, RequestEntity<>
    2. HTTP 응답 : @ResponseBody, HttpEntity<>, ResponseEntity<>
    • HttpMessageConverter는 요청과 응답 모두 사용된다. 

* RestController = @Controller + @ResponseBody

 

 

 

 

 

 ✔ 우선 순위

- 대표적인 HttpMessageConverter

 

1. ByteArrayHttpMessageConverter

  • byte[] Data를 처리한다.
  • 대상 : byte[]
  • MediaType : */*
  • 반환 : application/octet-stream

 

2. StringHttpMessageConverter

  • String Data를 처리한다.
  • 대상 : String
  • MediaType : */*
  • 반환 : text/plain

3. MappingJackson2HttpMessageConverter

  • JSON Data를 처리한다.
  • 대상 : Object, HashMap
  • MediaType : application/json
  • 반환 : application/json

 

✔ 동작 순서

- 요청 데이터 읽기

 1️⃣ 요청 

 2️⃣ Controller에서 @RequestBody or HttpEntity<> 로 파라미터 바인딩

 3️⃣ MessageConverter는 canRead() 메서드로 읽기 가능 여부를 조회

     - 대상 클래스가 byte[], String, Object 인지 여부 확인

     - 요청 헤더의 Content- Type의 Media Type 지원 여부 확인

 4️⃣ read() 메서드를 호출하여 Object를 생성

 

- 응답 데이터 쓰기 

 1️⃣ Controller에서 @ResponseBody 혹은 HttpEntity<> 로 응답이 반환된다.

 2️⃣ MessageConverter는 canWrite() 메서드로 사용가능 여부를 조회

      - 반환 클래스가 byte[], String, Object 인지 여부 확인

      - 요청 헤더 Accept 의 Media Type 지원 여부 확인

 3️⃣ write() 메서드를 호출하여 HTTP Response Message Body에 데이터를 입력한다.

  1.  

 

 

  • 요청시에는 Argument Resolver가 사용하는것이다.
  • 응답시에는 ReturnValueHandler가 사용한다.

 

💡 요청과 응답 

  1. HTTP 요청
    • @RequestBody 를 처리하는 ArgumentResolver가 존재한다.
    • HttpEntity를 처리하는 ArgumentResolver가 존재한다.
    • 다양한 ArgumentResolver들이 HttpMessageConverter를 호출하여 필요한 Object로 변환한다.
  2. HTTP 응답
    • @ResponseBody 를 처리하는 ReturnValueHandler가 존재한다.
    • HttpEntity를 처리하는 ReturnValueHandler가 존재한다.
    • 다양한 ReturnValueHandler 들이 HttpMessageConverter를 호출하여 필요한 응답을 입력한다.

 

 

🧨 WebMvcConfigurer

 - Spring MVC의 설정을 사용자 정의 할 수 있도록 제공되는 인터페이스로 implements하여

   설정을 확장하거나 커스터마이징 할 수 있다.

 

  • 주요 인터페이스
    1. HandlerMethodArgumentResolver
    2. HandlerMethodReturnValueHandler
    3. HttpMessageConverter
    • 모두 인터페이스로 구현되어 있으며 대부분 구현되어 있다.
      • Spring에서 기본적으로 제공하고 있다.
    • 개발자는 잘 사용하면 된다.
      • 주요 인터페이스
        1. HandlerMethodArgumentResolver
        2. HandlerMethodReturnValueHandler
        3. HttpMessageConverter
        • 모두 인터페이스로 구현되어 있으며 대부분 구현되어 있다.
          • Spring에서 기본적으로 제공하고 있다.
        • 개발자는 잘 사용하면 된다.
      • WebMvcConfigurer
        • 기능의 확장
          • WebMvcConfigurer를 상속받고 Spring Bean으로 등록
            1. addArgumentResolvers()
            2. addReturnValueHandlers()
            3. extendMessageConverters()
            • 필요한 메서드를 오버라이딩 하면된다.

 

  • @Configuration
    • @Component 를 포함하고 있다. (Spring Bean 등록이 된다.)

 

'TIL > Spring' 카테고리의 다른 글

<2025.04.21> [Spring - advanced] 코드 개선 & 트러블 슈팅  (1) 2025.04.21
<2025.04.17> Formatter  (0) 2025.04.17
<2025.03.31> IOC / DI  (0) 2025.03.31
<2025.03.28> 객체 지향 설계 (SOLID 원칙)  (0) 2025.03.28
<2025.03.21> MVC 패턴  (0) 2025.03.21