문제 발생
Redis API와 통신하는 RestTemplate을 쓰는데,
- 한글이 깨지고
- JSON 직렬화 시 커스텀한 ObjectMapper 설정이 적용되지 않는 문제가 터졌다.
처음에는 Redis 응답 문제인 줄 알았는데, 로그를 보니 RestTemplate 자체 설정 문제였다.
원인 파악
- 기본 RestTemplate의
StringHttpMessageConverter는 ISO-8859-1을 사용한다. (한글 깨짐 원인) - 직접 등록한 Custom ObjectMapper는 기본 RestTemplate에 전혀 반영되지 않는다.
Spring이 제공하는 기본 RestTemplate은 내 설정대로 동작하지 않는다는 걸 깨달았다.
해결
Bean을 직접 만들어 UTF-8 + Custom ObjectMapper를 적용했다.
/** @Primary: 기본 RestTemplate */
@Primary
@Bean
public RestTemplate restTemplate(@Qualifier("customObjectMapper") ObjectMapper customObjectMapper) {
RestTemplate rt = new RestTemplate();
MappingJackson2HttpMessageConverter jackson = new MappingJackson2HttpMessageConverter();
jackson.setObjectMapper(customObjectMapper);
FormHttpMessageConverter form = new FormHttpMessageConverter();
form.setCharset(StandardCharsets.UTF_8);
rt.setMessageConverters(Arrays.asList(
new StringHttpMessageConverter(StandardCharsets.UTF_8),
form,
jackson
));
return rt;
}
효과
- 모든 API 호출에서 한글 깨짐 사라짐
- JSON 변환 시 Custom ObjectMapper 설정 반영됨
- Form 전송도 UTF-8로 문제없이 처리
삽질 끝에 결론: RestTemplate은 직접 Primary Bean으로 등록해야 한다.