77
AI 요약
이 글은 AI가 원문을 분석하여 핵심 내용을 요약한 것입니다.
Spring Cache(@Cacheable)와 Spring Data Redis에서 record 직렬화 문제
이 게시물은 Spring Data Redis에서 GenericJackson2JsonRedisSerializer를 사용할 때 record와 @Cacheable 조합에서 발생하는 직렬화 오류 문제를 다룹니다.문제 원인과 분석
- ObjectMapper 설정에서 DefaultTyping.NON_FINAL은 final인 record에 타입 정보를 추가하지 않음
- 타입 정보가 JSON에 없으면 역직렬화 시 InvalidTypeIdException 발생
- 첫 요청은 정상 처리되나 두 번째 요청부터 캐시 역직렬화 시 오류가 발생
Jackson과 다형성 처리
- Jackson은 다형성 지원을 위해 명시적으로 타입 정보를 포함해야 하며, final 클래스는 타입 정보 생략
- record는 final이므로 DefaultTyping.NON_FINAL 설정에서 타입 정보가 누락되어 문제 발생
해결책과 한계
- DefaultTyping.EVERYTHING 설정은 타입 정보 누락 문제를 해결하지만 비효율적이고 권장되지 않음
- record 대신 일반 클래스를 사용하거나 Wrapper 클래스로 감싸 @JsonTypeInfo를 활용하는 방법
- Spring Data Redis는 ObjectMapper 커스터마이징 책임을 사용자에게 위임하고 있음

