che01 님의 블로그
ConversionService란? 본문
Spring에서 타입 변환을 총괄 관리하는 서비스입니다.
쉽게 말하면 "변환기들의 매니저" 같은 존재입니다.
왜 필요한가?
웹에서 우리한테 오는 데이터들을 생각해보세요:
- 사용자가 폼에 입력한 나이: "25" (문자열)
- URL 파라미터로 온 날짜: "2023-12-25" (문자열)
- 설정 파일의 값: "true" (문자열)
하지만 우리가 코드에서 원하는 것:
- int age = 25
- LocalDate date = LocalDate.of(2023, 12, 25)
- boolean flag = true
문자열 → 원하는 타입 으로 변환이 필요합니다.
ConversionService가 하는 일
변환기들을 모아서 관리
// 여러 변환기들을 등록해서 관리
conversionService.addConverter(new StringToIntegerConverter());
conversionService.addConverter(new StringToDateConverter());
conversionService.addConverter(new StringToPersonConverter());
변환 작업 실행
// "25"를 Integer 타입으로 변환
Integer age = conversionService.convert("25", Integer.class);
// "wonuk:100"을 Person 객체로 변환
Person person = conversionService.convert("wonuk:100", Person.class);
실제 동작 과정
- 요청 접수: "이 문자열을 저 타입으로 바꿔줘!"
- 변환기 찾기: 등록된 변환기들 중에서 적절한 것을 찾음
- 변환 실행: 찾은 변환기로 실제 변환 작업 수행
- 결과 반환: 변환된 객체를 돌려줌
핵심 포인트
ConversionService는 변환만 담당합니다.
- 변환기 관리하고 변환 실행하는 것이 역할
- 언제, 어디서 변환할지는 다른 컴포넌트가 결정
쉬운 비유
- ConversionService = 번역 센터
- 개별 Converter = 각 언어별 번역사
- ArgumentResolver = 고객
고객이 "이 문서 영어로 번역해주세요" 하면, 번역 센터가 영어 번역사를 찾아서 번역해주는 구조입니다.
간단한 코드 예시
// ConversionService 생성
DefaultConversionService conversionService = new DefaultConversionService();
// 내가 만든 변환기 등록
conversionService.addConverter(new StringToPersonConverter());
// 변환 실행
Person person = conversionService.convert("wonuk:100", Person.class);
// 결과: Person(name="wonuk", age=100)
실제로 어디서 쓰이나?
우리가 평소에 쓰는 이런 상황들에서 뒤에서 알아서 동작합니다:
@GetMapping("/user")
public String getUser(@RequestParam int age, // "25" → 25
@RequestParam LocalDate birth, // "2023-01-01" → LocalDate
@RequestParam boolean active) { // "true" → true
// ConversionService가 알아서 변환해줌
}
한 줄 정리
ConversionService = 스프링의 타입 변환 전담 매니저
여러 변환기들을 관리하고, 필요할 때 적절한 변환기를 찾아서 변환해주는 서비스입니다.
이제 Spring에서 문자열이 자동으로 원하는 타입으로 바뀌는 마법의 정체를 알았습니다.
'Spring' 카테고리의 다른 글
| Spring 데이터 변환 메커니즘 완벽 정리 (0) | 2025.06.06 |
|---|---|
| Spring Formatter란 ? (0) | 2025.06.06 |
| TypeConverter — HTTP 요청 문자열을 객체로 편리하게 변환하기 (1) | 2025.06.05 |
| WebMvcConfigurer로 프레임워크 확장하기 (1) | 2025.06.05 |
| Spring MVC ArgumentResolver와 ReturnValueHandler (1) | 2025.06.05 |