JuBin's personal study blog

[JAVA] 직렬화(Serialize)란? 본문

JAVA

[JAVA] 직렬화(Serialize)란?

JuBin 2021. 3. 14. 18:36
반응형

직렬화란?

직렬화(Serialize)

  • 자바 시스템 내부에서 사용되는 Object 또는 Data를 외부의 자바 시스템에서도 사용할 수 있도록 byte 형태로 데이터를 변환하는 기술.
  • JVM(Java Virtual Machine 이하 JVM)의 메모리에 상주(힙 또는 스택)되어 있는 객체 데이터를 바이트 형태로 변환하는 기술
  • java.io.Serializable 인터페이스를 상속받은 객체는 직렬화 할 수 있다.
  • 직렬화 포맷은 여러 포맷이 존재한다 Ex) json, xml, csv
  • 자바 직렬화는 상당히 타입의 엄격하다

 

역직렬화(Deserialize)

  • byte로 변환된 Data를 원래대로 Object나 Data로 변환하는 기술을 역직렬화(Deserialize)라고 부릅니다.
  • 직렬화된 바이트 형태의 데이터를 객체로 변환해서 JVM으로 상주시키는 형태.

 

직렬화를 사용하는 이유?

  • 복잡한 데이터 구조의 클래스의 객체라도 직렬화 기본 조건만 지키면 큰 작업 없이 바로 직렬화, 역직렬화가 가능합니다.
  • 데이터 타입이 자동으로 맞춰지기 때문에 관련 부분을 큰 신경을 쓰지 않아도 됩니다.

 

어디에 사용되는가?

  • Servlet Session ex) session을 DB에 저장할 경우 직렬화하여 저장
  • Cache(Redis, Memcached 등 사용)
  • Java RMI(Remote Method Invocation) 원격 시스템간 메세지 교환을 위해 사용

 

사용시 유의할점

  • 외부 저장소로 저장되는 데이터는 짧은 만료시간의 데이터를 제외하고 자바 직렬화를 사용을 지양합니다.
  • 역직렬화시 반드시 예외가 생긴다는 것을 생각하고 개발합니다.
  • 자주 변경되는 비즈니스적인 데이터를 자바 직렬화을 사용하지 않습니다.
  • 긴 만료 시간을 가지는 데이터는 JSON 등 다른 포맷을 사용하여 저장합니다.
반응형

'JAVA' 카테고리의 다른 글

[JAVA] JVM 메모리 구조 정리 - 2  (0) 2021.03.23
[JAVA] MapStruct 사용하기(Object Mapping Library)  (0) 2021.03.19
Maven Wrapper란(mvnw)  (0) 2021.01.05
[Java] ObjectMapper란  (0) 2020.12.23
[JVM] JVM의 Memory영역 ( Stack & Heap&Static )  (0) 2020.11.10