yoondoong.log
로그인
yoondoong.log
로그인
직렬화(Serialize)
YH
·
2023년 4월 3일
팔로우
0
Java
개념 정리
직렬화
0
✅ 직렬화(Serialize)란?
자바 시스템 내부에서 사용되는 Object 또는 Data를 외부의 자바 시스템에서도 사용할 수 있도록 바이트 형태로 데이터를 변환하는 기술로써, JVM의 메모리 (in Stack or heap) 에 상주되어 있는
객체 데이터를 바이트 형태로 변환
하는 기술
다차원의 자료를 파일로 저장하거나 네트워크로 보내기에 알맞게 일차원으로 펼치고 다시 원래대로 되돌리는 것을 직렬화(Serialization)라고 함
역직렬화는 직렬화의 반대의 의미로
바이트 -> 객체
로 변환하는 것
✅ 자바에서의 직렬화
자바에서의 직렬화는 JVM 메모리에서만 상주되어있는 객체 데이터를
영속화
할 때 사용됨
네트워크 전송도 가능하고 필요할 때 직렬화된 객체를 역직렬화 하여 객체를 바로 사용 할수도 있게 해줌
주로 아래 항목에서 사용됨
서블릿 세션(Servlet Session)
서블릿 기반의 WAS(톰캣, 웹로직 등) 대부분 세션의 자바 직렬화를 지원
파일로 저장하거나 세션 클러스터링, DB에 저장하는 옵션 등을 선택하게 된다면 세션 자체가 직렬화 되어 저장되어 전달
캐시(Cache)
캐시 할 부분을 자바 직렬화된 데이터를 저장해서 사용
데이터베이스에서 조회하는 동작보다 캐시에서 꺼내오는 동작이 더 저렴
Java RMI(Remote Method Invocation)
RMI는 원결 시스템 간의 메시지 교환을 위해서 사용하는 자바에서 지원하는 기술
원격의 시스템의 메서드를 호출 시에 전달하는 메시지(객체)를 자동으로 직렬화 시켜 사용
✅ SerialVersionUID(SUID) 란?
직렬화에 사용되는 고유 버전을 의미하는 값
직렬화 과정에서 serialVersionUID의 버전이 포함되게 되고, 역직렬화 과정에서 Java class에 선언되어 있는 serialVersionUID의 버전과 서로 동일한지를 체크
직접 선언하지 않아도 내부적으로 자동 생성해줌
그러나, 직접 선언하지 않는 경우에는 컴파일러 구현에 따라 달라질 수 있는 클래스에 변경이 생기면 역직렬화 시 오류가 발생함.
따라서, 자바에서 직렬화를 사용할 때는 Serializable 클래스에 SerialVersionUID(SUID)를 명시적으로 생성하여 관리하는 것이 좋음
잠재적으로 네트워크를 넘나들거나 파일로 저장할 가능성이 조금이라도 있는 클래스는 기본적으로 Serializable을 구현해서 의도를 명확하게 밝히는 것이 좋음
참고 Reference
https://haranglog.tistory.com/4
https://huisam.tistory.com/entry/javaserialization
https://techblog.woowahan.com/2551/
https://blog.naver.com/kkson50/220564273220
https://madplay.github.io/post/java-serialization-advanced
https://haranglog.tistory.com/4
https://m.blog.naver.com/writer0713/220922099055
YH
하루하루 꾸준히 포기하지 말고
팔로우
이전 포스트
절차 지향, 객체 지향, 함수형 프로그래밍
다음 포스트
디자인 패턴
0개의 댓글
댓글 작성