개발/Back-end

[Python] 직렬화와 역직렬화

맹수자두 2024. 7. 20. 17:01

직렬화(Serialization)와 역직렬화(Deserialization)는 데이터를 전송하거나 저장하기 위해 객체를 바이트 스트림으로 변환하고, 다시 그 바이트 스트림을 원래 객체로 변환하는 과정입니다.

  • 직렬화: 객체 -> 바이트 스트림 (또는 문자열)
  • 역직렬화: 바이트 스트림 (또는 문자열) -> 객체

직렬화의 필요성

직렬화는 다음과 같은 경우에 유용합니다:

  1. 네트워크 전송: 데이터를 네트워크를 통해 전송하기 위해 객체를 바이트 스트림으로 변환.
  2. 파일 저장: 객체를 파일 시스템에 저장하기 위해 바이트 스트림으로 변환.
  3. 캐싱: 객체를 캐시에 저장하기 위해 바이트 스트림으로 변환.

Python에서의 직렬화와 역직렬화

Python에서 직렬화와 역직렬화는 여러 가지 방법으로 수행할 수 있습니다. 가장 일반적인 방법 중 하나는 pickle 모듈을 사용하는 것입니다. 또한 JSON 형식의 문자열로 직렬화/역직렬화하는 방법도 자주 사용됩니다.

1. pickle 모듈을 사용한 직렬화와 역직렬화

pickle은 Python 객체를 바이트 스트림으로 변환하고 다시 객체로 복원하는 모듈입니다.

import pickle

# 예시 dict
data = {'name': 'plum', 'age': 7, 'city': 'incheon'}

# 직렬화
serialized_data = pickle.dumps(data)
print(f'Serialized data: {serialized_data}')
print(type(serialized_data))

# 역직렬화
deserialized_data = pickle.loads(serialized_data)
print(f'Deserialized data: {deserialized_data}')
print(type(deserialized_data))

 

위의 코드를 돌리면 아래와 같은 OUTPUT이 출력된다.

output

결론

직렬화와 역직렬화는 데이터를 효율적으로 전송하고 저장하기 위한 필수 기술입니다. Python에서는 pickle, json, 그리고 gRPC에서 사용하는 프로토콜 버퍼 등 다양한 방법으로 이를 수행할 수 있습니다. 해당 글에서는 python의 pickle을 사용한 이유는 리턴값이 Byte 객체로 리턴되기 때문에 이해하기 쉬울것 같아서 pickle을 사용하였습니다.