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
'프로그래밍언어 > 파이썬[중급]' 카테고리의 다른 글
[파이썬][중급] Chapter45. CSV 파일과 pandas의 통합 활용 (0) | 2025.05.24 |
---|---|
[파이썬][중급] Chapter44. JSON과 pickle의 차이점 (0) | 2025.05.24 |
[파이썬][중급] Chapter42. subprocess로 외부 명령 실행 (0) | 2025.05.24 |
[파이썬][중급] Chapter41. 압축 파일 처리 (zipfile, tarfile) (0) | 2025.05.24 |
[파이썬][중급] Chapter40. 파일 입출력 고급 기법 (0) | 2025.05.24 |