본문 바로가기
Spring/이론

Spring 데이터 변환 컴포넌트들

by JuNo_12 2025. 6. 4.

오늘 배운 내용

스프링 숙련 단계 강의에서 HttpMessageConverter, Converter, ConversionService, Formatter에 대해 학습했습니다.


핵심 개념 정리

HttpMessageConverter

  • HTTP 요청/응답 본문과 객체 간의 변환을 담당
  • JSON ↔ Java 객체 변환이 대표적인 예
  • Spring MVC 플로우에서 양방향으로 작동:
    • 요청 시: ArgumentResolver에서 @RequestBody 처리
    • 응답 시: ReturnValueHandler에서 @ResponseBody 처리

 

Converter vs Formatter

처음엔 둘이 비슷해 보였지만 차이가 있었습니다:

 

Converter

  • 타입 간 일반적인 변환 (A → B)
  • 양방향 처리시 별도 Converter 필요
  • 주로 내부 로직에서 사용

Formatter

  • String ↔ 객체 간 변환에 특화
  • 하나의 Formatter로 양방향 처리 가능
  • 사용자 인터페이스 표시 최적화
  • Locale(지역화) 지원

 

// Converter 예시
String → LocalDate (단방향)

// Formatter 예시  
"2024-12-25" ↔ LocalDate (양방향, 지역화 지원)

 

왜 스프링 방식을 쓸까?

  1. 일관성: 프로젝트 전체에서 같은 변환 로직 적용
  2. 재사용성: 한 번 정의하면 어디서든 자동 적용
  3. 유지보수: 변환 로직 변경시 한 곳만 수정
  4. 설정 중심: 비즈니스 로직과 변환 로직 분리

Spring MVC 전체 플로우 이해

이 구조를 이해하니 @RequestBody, @ResponseBody의 내부 동작이 명확해졌습니다.


오늘의 깨달음

"모든 인터페이스를 외우려 하지 말자"

  • 스프링의 다양한 인터페이스들(HttpMessageConverter, ArgumentResolver, ReturnValueHandler 등)
  • 정확한 이름을 외우는 것보다 "존재한다는 것"만 기억해두고,
  • 필요할 때 찾아보는 것이 더 효율적이라고 생각했습니다.
  • 실무에서는 대부분 스프링이 자동 처리, 커스텀 필요시에만 직접 구현

 

앞으로의 학습 방향

  1. 전체적인 흐름과 구조 이해에 집중
  2. 언제 어떤 도구를 써야 하는지 감각 기르기
  3. 세부 API는 필요시 검색하여 활용
  4. 실제 프로젝트에서 직접 커스텀 구현해보기

"개발자도 다 찾아가면서 한다"는 말이 와닿는 하루였습니다. 완벽하게 외우려 하지 말고, 큰 그림을 이해하는 데 집중해보겠습니다.