자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있도록
byte 형태로 데이터 변환하는 기술
아래 조건에 맞춰 클래스에 implement Serializable
를 한다.
private static final long serialVersionUID = 1L;
사실 이 포스팅을 쓴 이유이다.
JPA 표준스펙은 Entity에서의 Serializable 사용을 지향하지만, 우아한&김영한님의 생각은 다르다. 이유는 아래와 같다.
Q(질문자):
가끔 블로그를 보면 entity에 Serializable을 붙이는 경우가 있는데 이것에 대한 설명 부탁드립니다.
Serializable은 객체를 외부 서버로 보낼 때 객체로는 보낼 수 없어서 스트림으로 만들기 위해 사용하는 것으로 알고 있는데, 보통 dto로 매핑을 받으니 entity가 다른 곳으로 이동할 일이 없다고 보거든요.
오히려 외부 서버에 보내기 위해서는 dto를 serializable로 만드는게 맞지 않을까요?
A(김영한):
결론부터 말씀드리면 Q님이 생각하신게 맞습니다.
JPA 표준 스펙은 Entity에 Serializable를 구현하도록 되어 있습니다. JPA 구현체에 따라 엔티티를 분산 환경에서 사용할 수 있거나, 직열화해서 다른 곳에 전송할 수 있는 가능성을 열어준거지요.
하지만 저희가 주로 사용하는 하이버네이트 구현체는 제가 아는 바로 다음 사례를 제외하고는 Entity를 직열화해서 내부에서 사용하는 경우는 못봤습니다. https://www.inflearn.com/questions/16570
그래서 저는 실용적인 관점에서 실무에서 엔티티에 Serializable를 거의 사용하지 않습니다. (하지만 표준 스펙이니 적용해두는게 더 나은 선택입니다.)
https://www.inflearn.com/questions/17117
https://techblog.woowahan.com/2550/