Notice
Recent Posts
Recent Comments
Link
«   2026/01   »
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 31
Tags
more
Archives
Today
Total
관리 메뉴

che01 님의 블로그

Spring 데이터 변환 메커니즘 완벽 정리 본문

Spring

Spring 데이터 변환 메커니즘 완벽 정리

che01 2025. 6. 6. 17:52

핵심 개념 요약

HttpMessageConverter

언제 사용되나요?

상황 어노테이션

HTTP 요청 데이터를 객체로 변환 @RequestBody, HttpEntity<>, RequestEntity<>
객체를 HTTP 응답 본문으로 변환 @ResponseBody, HttpEntity<>, ResponseEntity<>

우선순위

  1. byte[]
  2. String
  3. 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 등)**를 제대로 이해하고 있어야 함

실무 활용 팁

  1. 기본 변환은 대부분 스프링이 자동 처리
  2. 커스텀 변환이 필요할 때만 직접 구현
  3. JSON 처리는 Jackson 설정 활용
  4. 타입 안전성을 위해 제네릭 적극 활용

'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