개발/Back-end
[Python] 직렬화와 역직렬화
맹수자두
2024. 7. 20. 17:01
직렬화(Serialization)와 역직렬화(Deserialization)는 데이터를 전송하거나 저장하기 위해 객체를 바이트 스트림으로 변환하고, 다시 그 바이트 스트림을 원래 객체로 변환하는 과정입니다.
- 직렬화: 객체 -> 바이트 스트림 (또는 문자열)
- 역직렬화: 바이트 스트림 (또는 문자열) -> 객체
직렬화의 필요성
직렬화는 다음과 같은 경우에 유용합니다:
- 네트워크 전송: 데이터를 네트워크를 통해 전송하기 위해 객체를 바이트 스트림으로 변환.
- 파일 저장: 객체를 파일 시스템에 저장하기 위해 바이트 스트림으로 변환.
- 캐싱: 객체를 캐시에 저장하기 위해 바이트 스트림으로 변환.
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이 출력된다.
결론
직렬화와 역직렬화는 데이터를 효율적으로 전송하고 저장하기 위한 필수 기술입니다. Python에서는 pickle, json, 그리고 gRPC에서 사용하는 프로토콜 버퍼 등 다양한 방법으로 이를 수행할 수 있습니다. 해당 글에서는 python의 pickle을 사용한 이유는 리턴값이 Byte 객체로 리턴되기 때문에 이해하기 쉬울것 같아서 pickle을 사용하였습니다.