파이썬 시리얼라이제이션: JSON, Pickle, Shelve 모듈 사용법

시리얼라이제이션의 기본 개념

파이썬에서 데이터를 파일이나 네트워크를 통해 저장하거나 전송하기 위해선 객체를 직렬화해야 합니다. 주로 사용되는 세 가지 내장 모듈은 json, pickle, shelve입니다.

1. JSON 모듈: 인간이 읽을 수 있는 형식으로 데이터 변환

json은 자바스크립트 객체 표기법과 호환되며, 문자열과 파이썬 기본 타입 간에 변환을 지원합니다. 주요 함수는 다음과 같습니다:

  • dumps(): 파이썬 객체를 문자열로 변환
  • loads(): 문자열을 파이썬 객체로 복원
  • dump(): 객체를 파일에 직렬화
  • load(): 파일에서 데이터를 읽어와 객체로 변환
import json

data = {"key": "value"}
serialized = json.dumps(data)
print(serialized)  # {"key": "value"}

deserialized = json.loads(serialized)
print(deserialized)  # {'key': 'value'}

2. Pickle 모듈: 파이썬 고유 타입 직렬화

pickle는 파이썬만의 복잡한 타입(함수, 클래스 인스턴스 등)도 직렬화할 수 있습니다. 하지만 출력은 바이너리 형식이며, 다른 언어와 호환되지 않습니다.

import pickle

obj = [1, 2, 3, 'hello']
binary_data = pickle.dumps(obj)
print(binary_data)  # b'\x80\x03]q\x00(K\x01K\x02K\x03X\x05\x00\x00\x00helloe.'

restored = pickle.loads(binary_data)
print(restored)  # [1, 2, 3, 'hello']

파일로 저장/불러오기 시에는 반드시 바이너리 모드로 열어야 합니다:

with open('data.bin', 'wb') as f:
    pickle.dump([1, 2, 3], f)

with open('data.bin', 'rb') as f:
    loaded_data = pickle.load(f)
    print(loaded_data)  # [1, 2, 3]

3. Shelve 모듈: 딕셔너리처럼 동작하는 파일 기반 저장소

shelve는 간단한 키-값 저장을 위한 래퍼입니다. 내부적으로 pickle를 사용하지만, 딕셔너리처럼 접근 가능하며, 파일에 영구 저장됩니다.

import shelve

# 데이터 저장
with shelve.open('config.db', 'c') as db:
    db['site'] = 'https://example.com'
    db['user'] = {'name': 'Alice', 'age': 30}

# 데이터 읽기
with shelve.open('config.db', 'r') as db:
    print(db['site'])  # https://example.com
    print(db['user'])  # {'name': 'Alice', 'age': 30}

업데이트도 가능하며, 변경 사항은 자동으로 반영됩니다:

with shelve.open('inventory.db', 'c') as db:
    if 'products' not in db:
        db['products'] = {}
    products = db['products']
    products.update({'laptop': 1200, 'mouse': 25})
    db['products'] = products

태그: JSON pickle shelve serialization file storage

7월 12일 05:14에 게시됨