che01 님의 블로그
Spring 데이터 변환 메커니즘 완벽 정리 본문
핵심 개념 요약
HttpMessageConverter
언제 사용되나요?
상황 어노테이션
| HTTP 요청 데이터를 객체로 변환 | @RequestBody, HttpEntity<>, RequestEntity<> |
| 객체를 HTTP 응답 본문으로 변환 | @ResponseBody, HttpEntity<>, ResponseEntity<> |
우선순위
- byte[]
- String
- JSON (application/json) → 보통 Jackson이 담당
Spring 내부 구조
핵심 구성요소
- HandlerMethodArgumentResolver
- 요청 데이터를 → 컨트롤러의 메서드 파라미터로 변환
- 사용 예: @RequestParam, @ModelAttribute, @PathVariable
- HandlerMethodReturnValueHandler
- 컨트롤러의 반환값을 → 응답 본문(또는 View)으로 변환
- 사용 예: @ResponseBody, ResponseEntity<>
Converter vs Formatter
항목 Converter Formatter
| 목적 | 타입 변환 | 포맷 포함 타입 변환 |
| 방향 | A → B | 문자열 ↔ 객체 |
| 예시 | "10" → int | "1,000" ↔ int (숫자 포맷) |
| 지역(Locale) 고려 | 안 함 | Locale 기반 포맷 지원 |
관련 인터페이스와 설정 도구
WebMvcConfigurer
- addFormatters() 메서드로 커스텀 Converter, Formatter 등록 가능
ConversionService
- 어댑터 역할: Converter, Formatter를 일관성 있게 처리
- 주로 @RequestParam, @ModelAttribute, @PathVariable 등에 사용
HttpMessageConverter
- ConversionService와는 별개로 동작
- @RequestBody, @ResponseBody에서 JSON 변환 처리
- Jackson 라이브러리를 이용: @JsonFormat, @JsonDeserialize, 커스텀 Deserializer
핵심 요약
- 스프링의 많은 기능은 인터페이스 기반으로 설계되어 있음
- 대부분은 기본 구현체가 잘 갖춰져 있음 (우리는 주로 가져다 쓰기만 하면 됨)
- 다만, 요구사항이 특별하거나 확장이 필요할 때, 해당 인터페이스를 직접 구현해서 등록하면 됨
- 그럴 땐 **스프링 내부 구조 (ArgumentResolver, ReturnValueHandler 등)**를 제대로 이해하고 있어야 함
실무 활용 팁
- 기본 변환은 대부분 스프링이 자동 처리
- 커스텀 변환이 필요할 때만 직접 구현
- JSON 처리는 Jackson 설정 활용
- 타입 안전성을 위해 제네릭 적극 활용
'Spring' 카테고리의 다른 글
| JPA 1:1 관계 완전 정리 (0) | 2025.06.09 |
|---|---|
| JPA 1:N 관계 완전 정리 (0) | 2025.06.09 |
| Spring Formatter란 ? (0) | 2025.06.06 |
| ConversionService란? (1) | 2025.06.05 |
| TypeConverter — HTTP 요청 문자열을 객체로 편리하게 변환하기 (1) | 2025.06.05 |