| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
- java
- sql #부트캠프 #내일배움캠프 #웹관리자 #도전 #학습
- sql #내일배움캠프 #스파르타코딩클럽
- java #문법
- html #css #부트스트랩 #웹사이트 #개발 #초보 #til #내일배움캠프 #스파르타코딩클럽
- Today
- Total
Hyeok의 웹 개발 블로그
<2025.04.15> HttpMessageConverter 본문
🔎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가 적용되는 경우
- HTTP 요청 : @RequestBody, HttpEntity<>, RequestEntity<>
- 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에 데이터를 입력한다.

- 요청시에는 Argument Resolver가 사용하는것이다.
- 응답시에는 ReturnValueHandler가 사용한다.
💡 요청과 응답
- HTTP 요청
- @RequestBody 를 처리하는 ArgumentResolver가 존재한다.
- HttpEntity를 처리하는 ArgumentResolver가 존재한다.
- 다양한 ArgumentResolver들이 HttpMessageConverter를 호출하여 필요한 Object로 변환한다.
- HTTP 응답
- @ResponseBody 를 처리하는 ReturnValueHandler가 존재한다.
- HttpEntity를 처리하는 ReturnValueHandler가 존재한다.
- 다양한 ReturnValueHandler 들이 HttpMessageConverter를 호출하여 필요한 응답을 입력한다.
🧨 WebMvcConfigurer
- Spring MVC의 설정을 사용자 정의 할 수 있도록 제공되는 인터페이스로 implements하여
설정을 확장하거나 커스터마이징 할 수 있다.
- 주요 인터페이스
- HandlerMethodArgumentResolver
- HandlerMethodReturnValueHandler
- HttpMessageConverter
- 모두 인터페이스로 구현되어 있으며 대부분 구현되어 있다.
- Spring에서 기본적으로 제공하고 있다.
- 개발자는 잘 사용하면 된다.
-
-
- 주요 인터페이스
- HandlerMethodArgumentResolver
- HandlerMethodReturnValueHandler
- HttpMessageConverter
- 모두 인터페이스로 구현되어 있으며 대부분 구현되어 있다.
- Spring에서 기본적으로 제공하고 있다.
- 개발자는 잘 사용하면 된다.
- WebMvcConfigurer
- 기능의 확장
- WebMvcConfigurer를 상속받고 Spring Bean으로 등록
-
- addArgumentResolvers()
- addReturnValueHandlers()
- 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 |