본문 바로가기

이야기/용어사전

자바 직렬화 & 역직렬화

  • 직렬화
    • Serialize
    • Java Object / Data 형식을 외부 시스템에서 사용할 수 있도록 byte 형태로 데이터를 변환하는 기술
    • JVM 상의 Heap / Stack 메모리에 상주되어 있는 객체 데이터를 byte 형태로 변환하는 기술
  • 역직렬화
    • DeSerialize
    • byte 형태로 변환된 데이터를 Object / Data 형태로 변환시키는 기술
    • 직렬화된 byte 형태의 데이터를 자바 객체로 변환시켜 JVM 메모리에 상주시키는 기술

 

  • 직렬화 조건 및 방법
    • java.io.Serializable 인터페이스를 상속받은 객체만 직렬화 가능
    • java.io.ObjectOutputStream 패키지를 활용하여 직렬화를 진행
  • 역직렬화 조건 및 방법
    • 직렬화된 객체를 import 해야한다
    • 직렬화된 객체의 .class 파일이 classpath 안에 존재한다
    • 직렬화와 역직렬화는 진행하는 시스템이 서로 다를 수 있다
    • 자바 직렬화 대상 객체는 동일한 serialVersionUID를 가져야 한다.
    • java.io.ObjectInputStream 패키지를 사용하여 역직렬화를 진행한다
  • 자바 직렬화 주의사항
    • 직렬화 시스템과 역직렬화 시스템이 다르다면 java.io.InvalidClassException 예외를 유발한다. (클래스 구조 변경)
    • 이를 방지하기 위해 SUID(serialVersionUID)가 필요하다.
    • JSON에 비하여 data size가 두 배 가량 크다
    • 데이터 사이즈 문제 때문에 데이터 타입에 엄격하다
  • 어디에 사용하지?
    • Servlet Session
      • 파일 저장, 세션 클러스터링, DB 저장 등
    • Cache
      • Ehcache, Redis, Memcached, etc...
    • Remote Method Invocation
      • 원격 시스템 간의 메세지 교환을 위해 자바에서 지원하는 기술
    • 외부 저장소로 저장되는 데이터 중 짧은 만료 시간을 가진 데이터
    • 긴 만료 시간을 지닌 데이터는 JSON 등 다른 데이터 포맷을 사용

 

참고블로그

https://go-coding.tistory.com/101