본문 바로가기
프로그래밍언어/파이썬[중급]

[파이썬][중급] Chapter43. pickle을 활용한 객체 직렬화

by about_IT 2025. 5. 24.
728x90

객체 직렬화(Serialization)는 객체를 파일로 저장하거나 네트워크로 전송할 수 있도록 이진 형식으로 변환하는 과정입니다. 파이썬에서는 pickle 모듈을 통해 객체를 간단하게 직렬화하고 복원할 수 있습니다.


● 객체 직렬화하기 (dump)

import pickle

data = {"name": "Alice", "age": 30, "scores": [90, 85, 88]}
with open("data.pkl", "wb") as f:
    pickle.dump(data, f)

wb 모드로 파일을 열어 dump()를 사용하면 객체를 바이너리 파일로 저장할 수 있습니다.


● 직렬화된 객체 복원하기 (load)

with open("data.pkl", "rb") as f:
    loaded_data = pickle.load(f)
print(loaded_data)

pickle 파일을 다시 읽어 객체를 복원할 때는 rb 모드로 열고 load()를 사용합니다.


● 여러 객체 저장하기

여러 객체를 하나의 파일에 연속적으로 저장할 수도 있습니다.

with open("multi.pkl", "wb") as f:
    pickle.dump([1, 2, 3], f)
    pickle.dump("hello", f)

with open("multi.pkl", "rb") as f:
    print(pickle.load(f))  # [1, 2, 3]
    print(pickle.load(f))  # hello

● 사용자 정의 클래스 직렬화

class Person:
    def __init__(self, name):
        self.name = name

p = Person("Bob")
with open("person.pkl", "wb") as f:
    pickle.dump(p, f)

사용자 정의 객체도 pickle로 저장 가능하지만, 클래스 정의는 복원 시 동일한 위치에 존재해야 합니다.


● 보안 주의사항

pickle은 신뢰할 수 없는 파일을 절대 load() 하지 말아야 합니다. 악의적인 코드가 포함될 수 있기 때문입니다. 안전한 직렬화가 필요할 경우 json 등을 사용하는 것이 좋습니다.


● 마무리

pickle은 파이썬 객체를 손쉽게 저장하고 불러오는 데 적합합니다. 실험 결과 저장, 세션 유지, 캐싱 등 다양한 목적에 사용할 수 있지만, 보안 이슈를 항상 유념하여 활용해야 합니다.

728x90