내 잡다한 노트

직렬화와 역직렬화 본문

DevOps

직렬화와 역직렬화

peanutwalnut 2024. 12. 25. 20:46

직렬화(Serialization)와 역직렬화(Deserialization)는 데이터 구조나 객체를 저장하거나 전송할 수 있는 형태로 변환하는 과정과 그 반대 과정을 의미

 

 

1. 직렬화(Serialization)란?

정의

직렬화는 복잡한 데이터 구조나 객체를 연속된 바이트 스트림으로 변환하는 과정입니다. 이를 통해 데이터를 파일에 저장하거나 네트워크를 통해 전송할 수 있게 됩니다.

작동 방식

  1. 데이터 구조 선택: 직렬화할 객체나 데이터 구조를 선택합니다.
  2. 변환 과정: 객체의 상태(데이터)를 바이트 형태로 변환합니다.
  3. 저장 또는 전송: 변환된 바이트 스트림을 파일, 데이터베이스, 메모리, 또는 네트워크를 통해 저장하거나 전송합니다.

사용 사례

  1. 데이터 저장: 객체 상태를 파일이나 데이터베이스에 저장할 때.
  2. 네트워크 전송: 클라이언트와 서버 간에 데이터를 전송할 때.
  3. 캐싱: 메모리 내에 데이터를 저장하여 빠른 접근을 가능하게 할 때.
  4. 원격 프로시저 호출(RPC): 분산 시스템에서 함수 호출 시 데이터를 전송할 때.

2. 역직렬화(Deserialization)란?

정의

역직렬화는 직렬화된 바이트 스트림을 원래의 데이터 구조나 객체로 복원하는 과정입니다. 이를 통해 전송되거나 저장된 데이터를 다시 사용할 수 있습니다.

작동 방식

  1. 바이트 스트림 수신: 직렬화된 데이터를 수신하거나 파일에서 읽어옵니다.
  2. 변환 과정: 바이트 스트림을 원래의 데이터 구조나 객체로 변환합니다.
  3. 데이터 사용: 복원된 객체나 데이터를 프로그램 내에서 사용합니다.

사용 사례

  1. 데이터 로드: 저장된 파일이나 데이터베이스에서 데이터를 불러올 때.
  2. 네트워크 수신: 클라이언트나 서버로부터 전송된 데이터를 복원할 때.
  3. 캐시 복원: 캐시된 데이터를 원래의 객체로 복원하여 사용할 때.
  4. RPC 응답 처리: 원격 프로시저 호출의 응답 데이터를 복원할 때.

3. 직렬화와 역직렬화의 중요성

데이터 영속성

직렬화는 프로그램 실행이 종료된 후에도 데이터를 유지할 수 있게 해줍니다. 예를 들어, 애플리케이션의 상태를 파일에 저장하고 나중에 다시 불러올 수 있습니다.

데이터 교환

서로 다른 시스템 간에 데이터를 교환할 때 직렬화와 역직렬화는 필수적입니다. 특히, 웹 애플리케이션에서 클라이언트와 서버 간의 데이터 통신에 널리 사용됩니다.

분산 시스템

분산 시스템에서는 네트워크를 통해 데이터를 전송해야 하므로, 데이터를 직렬화하여 전송하고, 수신 측에서 역직렬화하여 사용합니다.

보안

데이터의 직렬화 과정에서 데이터의 형식과 구조를 표준화함으로써 데이터의 일관성을 유지하고, 데이터 전송 중 발생할 수 있는 오류를 줄일 수 있습니다.


4. 직렬화 포맷의 종류

다양한 직렬화 포맷이 존재하며, 각각의 특징과 용도에 따라 선택됩니다. 주요 포맷은 다음과 같습니다:

a. JSON (JavaScript Object Notation)

  • 특징: 인간이 읽기 쉬운 텍스트 형식, 다양한 프로그래밍 언어에서 지원.
  • 장점: 가독성 높음, 경량, 광범위한 호환성.
  • 단점: 바이너리 데이터를 직접적으로 표현하기 어려움.

b. XML (eXtensible Markup Language)

  • 특징: 마크업 언어로, 복잡한 데이터 구조 표현 가능.
  • 장점: 유연한 구조, 데이터 검증을 위한 스키마 지원.
  • 단점: 상대적으로 무겁고, 가독성이 낮을 수 있음.

c. Protocol Buffers (Protobuf)

  • 특징: 구글에서 개발한 이진 직렬화 포맷.
  • 장점: 고효율, 컴팩트한 이진 형식, 빠른 직렬화/역직렬화.
  • 단점: 인간이 읽기 어려움, 스키마 필요.

d. YAML (YAML Ain't Markup Language)

  • 특징: 가독성이 높은 데이터 직렬화 포맷.
  • 장점: 인간이 읽기 쉬움, 복잡한 데이터 구조 표현 가능.
  • 단점: 파싱이 복잡할 수 있으며, 공백에 민감함.

e. MessagePack

  • 특징: 이진 형식의 효율적인 직렬화 포맷.
  • 장점: JSON보다 더 컴팩트하고 빠름.
  • 단점: 인간이 읽기 어려움.

5. 직렬화와 역직렬화의 주의사항

보안

직렬화된 데이터를 신뢰할 수 없는 출처로부터 받을 경우, 역직렬화 과정에서 보안 취약점이 발생할 수 있습니다. 예를 들어, 원격 코드 실행 공격 등이 가능할 수 있으므로, 역직렬화 전에 데이터의 무결성과 신뢰성을 검증해야 합니다.

호환성

데이터 구조가 변경되면 이전 버전의 직렬화된 데이터를 역직렬화할 때 문제가 발생할 수 있습니다. 따라서, 데이터 구조의 변경 시 버전 관리를 철저히 하고, 호환성을 유지하도록 설계해야 합니다.

성능

대용량 데이터를 직렬화하거나 역직렬화할 때 성능 저하가 발생할 수 있습니다. 효율적인 직렬화 포맷을 선택하고, 필요에 따라 데이터 압축을 고려해야 합니다.

'DevOps' 카테고리의 다른 글

Provisioning 이란?  (0) 2024.11.24
DORA 메트릭  (1) 2024.11.23
CI / CD  (0) 2024.11.19
Stateless 애플리케이션  (0) 2024.11.17
Stateful 애플리케이션  (0) 2024.11.17