목록 보기
Spring Cache(@Cacheable) + Spring Data Redis 사용 시 record 직렬화 오류 원인과 해결
백엔드

Spring Cache(@Cacheable) + Spring Data Redis 사용 시 record 직렬화 오류 원인과 해결

우아한 형제들
우아한 형제들
2025년 8월 19일

두줄요약

Spring Cache와 Redis에서 record 캐싱 시 발생하는 역직렬화 오류의 원인과 해결책을 정리했습니다. Jackson의 타입 정보 처리와 GenericJackson2JsonRedisSerializer의 동작 방식까지 함께 설명했습니다.

문제 상황

  • Spring Cache(@Cacheable)와 Spring Data Redis 조합에서 record 반환값 캐싱 시 두 번째 요청부터 역직렬화 예외 발생
  • GenericJackson2JsonRedisSerializer와 커스텀 ObjectMapper 사용 시 JSON에 @class 타입 정보가 빠져 InvalidTypeIdException 발생

원인 분석

  • activateDefaultTyping(..., NON_FINAL, ...) 설정으로 final 클래스인 record에는 타입 정보가 붙지 않음
  • 캐시 조회 시 원본 타입을 모르는 상태에서 JSON 내부 타입 정보에 의존하므로 역직렬화 실패
  • 첫 요청은 저장만 수행되어 정상처럼 보이고, 실제 문제는 재조회 시점에 드러남

해결 방법

  • DefaultTyping.EVERYTHING 사용으로 모든 타입에 타입 정보 포함
  • record 대신 일반 class 사용
  • @JsonTypeInfo를 붙인 Wrapper로 감싸 다형성 타입 정보 보장

주의할 점

  • EVERYTHING 설정은 직렬화 크기 증가와 성능 부담 가능성 존재
  • Spring Data Redis는 ObjectMapper 기본 커스터마이징을 책임지지 않으므로 개발자 주입 설정 필요
  • 캐시가 실제 동작하는 재조회 시나리오 테스트 필요

댓글 0

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...