해결 방법
기본적으로 NotSerializableException이 일어나면 해당 클래스를 직렬화(implements Serializable)하면 해결된다. 이 오류는 아래 사진처럼 java.io.NotSerializableException 뒤에 익셉션이 발생한 클래스를 알려주는데, 그 클래스를 수정하면 되는 것이다.
public class Product implements Serializable {
@Id @Column(length = 50)
private String id;
@Column(nullable = false, length = 500)
private String name;
}
위 코드에서 implements Serializable을 통해 직렬화가 가능한 클래스라는 것을 명시했다.
원인
필자는 보통 직렬화는 자바 기반 시스템에서 객체 데이터를 주고받을 때(혹은 저장할 때) 사용한다고 알고 있었다. 기본 CRUD API 등만 제공했던 나로써는 갑자기 나타난 직렬화 오류에 황당해했다.
생각해보니 필자는 코드에서 Redis를 활용해 캐싱을 하고 있었다. 즉, Redis의 value에는 객체 데이터가 들어가야 하는 것이다. 그러므로 Redis에 캐싱될 타깃 클래스들은 직렬화(implements Serializable)를 해줘야 하는 것이다.
(혹시 글에서 틀린 부분, 지식 오류가 있으면 언제든 알려주세요!)
반응형