Spring Cache + Redis record 직렬화 문제, 똑똑하게 해결!
by DD
9개월 전
조회수 13
Spring Data Redis에서 record와 GenericJackson2JsonRedisSerializer 조합 시 직렬화 문제 발생
Jackson의 DefaultTyping.NON_FINAL 설정으로 인해 record의 타입 정보가 누락됨
RecordSupportingTypeResolver를 구현하여 record에도 타입 정보를 추가, 문제 해결
Record 직렬화 문제의 기술적 배경
GenericJackson2JsonRedisSerializer는 ObjectMapper를 사용하여 객체를 JSON으로 직렬화한다. 구체적으로 DefaultTyping.NON_FINAL 설정은 final 클래스인 record의 타입 정보를 생략한다. 따라서 역직렬화 실패로 이어진다.
Jackson 설계와 트레이드오프 분석
Jackson은 다형성 지원을 위해 타입 정보를 사용한다. 반면, record는 final이므로 타입 정보를 생략하여 직렬화 결과 크기를 줄인다. DefaultTyping.EVERYTHING 사용은 해결책이나, 성능 저하와 Deprecated될 수 있다는 단점이 있다.
Record 전용 TypeResolver 구현 및 적용
RecordSupportingTypeResolver를 구현하여 record에도 타입 정보를 추가한다. 따라서 ObjectMapper 설정 변경 없이 record의 직렬화/역직렬화가 가능해진다. 결과적으로 캐시 데이터 무결성을 보장하고, 개발 편의성을 향상시킨다.