개발 기록
> [Spring] Spring 은 요청을 어떻게 처리 해주고 있는 걸까? (4) Convert 본문

■
1 . Converter 개념
데이터나 신호, 프로그램 등을 어떤 형식에서 다른 형식으로 변환하는 것을 컨버터라고 한다.
ex. 오디오 CD 를 MP3 형식의 음원 파일로 변환해주는 프로그램
물론 Spring 에서도 Converter 를 지원하고 있다. Spring Converter는 전략 인터페이스로 전략패턴으로 사용된다.

Converter <S, T>
S는 sourceType, T는 targetType 으로 이 Convert 인터페이스는 S 에서 T 로 변환해주는 기능의 함수형 인터페이스이다.
※ 보통 바인딩한 데이터가 일치하지 않는 경우 실행에 필요한 컨트롤러 메서드의 인자 타입을 맞추기 위해 바인딩한 데이터 타입을 변경하는 용도로 사용한다.
■
2. Converter 구조

1. ConversionService는 canConvert() 메서드를 이용해 내부에 Converter가 등록되어있는지 확인하고 해당 타입으로 convert 가 확인 가능한지 확인한다. 이후 convert() 메서드로 실제 convert 를 수행한다.
2. ConverterRegistry는 addConverter() 메서드로 Converter 를 등록한다.
정리하자면, ConversionService 와 ConverterRegistry 상속하는 ConfigurableConversionService 인터페이스의 구현체는 Converter를 내부적으로 관리하고 sourceType을 targetType 으로 변환하는 역할을 한다.
■
2. 사용처
ArgumentResolver 가 핸들러 메서드의 인자값을 바인딩 할 때 Converter 를 사용한다.

(1) resolverArugument
메서드 파라미터 타입을 확인하고 동일하지 않다면 convertIfNessary 메서드를 호출한다.
- biderFactory : 요청 핸들러 메서드의 Parameter를 Binding할 데이터 바인더를 생성하는 팩토리
- arg : 해당 argument (ex. RequestParamMethodArgumentResolver) 에서 요청값을 담은 obj

(2) convertIfNessary
convertIfNessary 메서드를 최종적으로 구현한 TypeConverterDelegate Class 의 convertIfNessary 메서드 부분이다.
Converter를 관리하는 ConversionService 불러와서 convert 가능시 수행하여 컨트롤러 메서드 인자 type과 일치시켜준다.

참고
https://www.baeldung.com/spring-httpmessageconverter-rest
https://velog.io/@e1psycongr00/Converter-%EB%B6%84%EC%84%9D%ED%95%98%EA%B8%B0
'DIVE' 카테고리의 다른 글
| > 캐싱에 대해 알아보자! 캐시는 언제 써야 할까? (0) | 2024.01.05 |
|---|---|
| > [Spring] Spring 은 요청을 어떻게 처리 해주고 있는 걸까? (5) HttpMessageConvert (0) | 2023.12.12 |
| > [Spring] Spring 은 요청을 어떻게 처리 해주고 있는 걸까? (3) Request, Response Log (0) | 2023.12.08 |
| > [Spring] Spring 은 요청을 어떻게 처리 해주고 있는 걸까? (2) HandlerMethodArgumentResolver : Request Value Binding (0) | 2023.12.07 |
| > [Spring] Spring 은 요청을 어떻게 처리 해주고 있는 걸까? (1) (0) | 2023.12.07 |