TIL-Converter (Spring 심화 1주차)_25.04.15
백지 요약
- Converter는 입력 <-> 출력 사이에서 데이터 양식을 바꿔주는 역할
- Converter는 크게 HttpMessageConverter와 ConversionService로 나뉨
- HttpMessageConverter는 HTTP Body 값을 변환해줌. @RequestBody, @HttpEntity, @RequestEntity / @ResponseBody, @HttpEntity, @ResponseEntity에 사용 -> json to 다른 양식으로 변환
- ConversionService는 Converter의 묶음. Converter를 Custom해서 ConversionService에 추가해 사용 가능
- ConversionService는 HTTP Body 이외의 입력 (@Path, @RequestParam, @ModelAttribute)을 변환할 때 사용
- formatter는 Converter의 일종인데, 세밀한 양식(form)으로 바꿔주고 싶을 때 사용함
- 주로 String을 특정 양식으로 바꿀 때 사용한다고.
- formatter, converter 모두 ConversionService에 통합되어 사용되는데, 그럼 json 데이터 중 일부는 특정 데이터 양식으로 못 바꾸냐?
- 이걸 가능하게 하는게 de삐리리lizer / @JsonFormat인가? 이거였던 듯. 세부적인 방법은 차차 익혀가면 되고, HttpMessageConverter, ConversionService가 각각 언제 쓰이는 건지 아는게 중요한 것 같다!
백지 요약에 대한 Dr.G 피드백
- 당근

- 채찍

- Spring의 변환 매커니즘은 두 가지다! HttpMessageConverter와 ConversionService. 전자는 JSON/XML <-> 객체 / 후자는 (대부분) String <-> 타입 변환

- Formatter는 Converter<String, T>와 Converter<T, String>을 쌍으로 구현하는 특별한 Converter라고! 국제화나 숫자/날짜 포맷 지정에 유용!

- JSON 안의 세부 필드들을 어떻게 직렬화/역직렬화할지 정하는 건 Jackson 라이브러리가 담당! @JsonFormat, @JsonDeserialize, @JsonSerialize 같은 어노테이션이 이걸 가능하게 함

- Converter는 가장 상위 개념. 타입 간 데이터 변환을 담당하는 녀석
- ConversionService는 여러 Converter/Formatter를 등록/관리하는 변환 인프라(주로 단일 값에 사용)
- HttpMessageConverter: HTTP 요청/응답 바디 전체를 객체 <-> JSON 등으로 변환 (Jackson 기반)
- Formatter : Converter의 특수한 형태. 포맷 제어 및 국제화 대응
- JSON의 세부 필드 변환은 @JsonFormat, @JsonDeserializer 등을 사용해 Jackson에서 처리
- 핵심은 "어떤 데이터가 어디에서 오느냐에 따라 어떤 변환 시스템이 동작하는지를 구분하는 것!"
정리 좋았다!