본문 바로가기

Backend/Java Spring

[Java] 직렬화와 역직렬화

직렬화

객체 -> 바이트 스트림 

자바에서는 Serializable 인터페이스를 구현한 클래스의 인스턴스를 직렬화할 수 있다. 직렬화된 데이터는 파일로 저장하거나 네트워크를 통해 전송할 수 있다.

 

역직렬화

바이트 스트림 -> 객체 

역직렬화는 직렬화된 바이트 스트림을 다시 자바 객체로 변환하는 과정이다. 이렇게 복원된 객체는 원래의 상태와 속성을 가지게 된다.

 

단점 

  1. 수정 어려움: Serializable 인터페이스를 구현한 클래스를 릴리스한 후에는 해당 클래스의 구조를 수정하기 어렵다. 이로 인해 버전 관리와 호환성 문제가 발생할 수 있다.
  2. 보안 문제: 역직렬화는 보안 취약점을 가질 수 있다. 악의적인 사용자가 신뢰할 수 없는 직렬화 데이터를 역직렬화하면 애플리케이션의 보안에 위협을 가할 수 있다.
  3. 크로스 플랫폼 호환성: 직렬화된 데이터는 자바 특정 형식으로 제한되므로 다른 플랫폼 간 데이터 교환에 제한이 있다.

대안

크로스 플랫폼 구조화된 데이터 표현(cross-platform structured data representation)

JSON 과 protocol buffer 가 예시임. 

 

  • JSON -> 인간이 읽고 쓰기 쉬운 형식으로 데이터를 표현하는 데 사용되며, 많은 언어에서 지원
  • Protocol buffer -> 이진 형식으로 데이터를 표현하며, 다양한 언어에서 사용할 수 있는 스키마 기반 형식

'Backend > Java Spring' 카테고리의 다른 글

[Java] 제너릭(Generic)  (0) 2023.11.17
[Java] 공유 중인 가변 데이터  (0) 2023.11.12
[Spring] @Transactional  (2) 2023.11.09
[Spring] singleton scope  (0) 2023.11.05