[TIL] java.io.InvalidClassException, local class incompatible: stream classdesc serialVersionUID, local class serialVersionUID

시온·2023년 8월 30일
0

TIL

목록 보기
7/7
post-thumbnail

스프링 Redis 실행 안됨

빠른 조회를 위해 Redis를 사용하는 서비스에서 새로운 데이터를 추가하니 local class incompatible 에러가 발생하였다.

Redis 관련 클래스에서 전부 serializable을 implement 하고 있는데, 객체 직렬화 - 역직렬화 과정에서 주의할 점이 있었다.

바로 serialVersionUID 가 명시되어 있지 않은 클래스의 경우, JVM이 클래스 구조 정보에 따라 serialVersionUID 해싱값을 만들어내는 것.

따라서 아래와 같은 해결책이 존재한다.

해결방법

1. serialVersionUID 명시하기

private static final long serialVersionUID = ?L;

이렇게 serialVersionUID 값을 serializable을 사용하는 클래스에 선언해두면 해당 값으로 고정이 된다.

2. Redis Flush

내가 성공한 방법인데, redis의 경우 이미 기존에 저장되어 있던 해싱값이 남아 있어 serialVersionUID를 명시를 해줘도 계속 local class incompatible 에러가 발생하였다.

그럴때는 그냥 redis를 flush 하도록 하자.

$ redis-cli
127.0.0.1:6379> flushall
OK

redis-cli를 켜서 flushall 명령을 입력한 다음, 서버를 다시 시작하면 해결됨.

profile
끊임없이 성장중

0개의 댓글