pickle은 「파이썬 객체를 바이트로 변환해 저장하거나 전송할 수 있게 하는」 직렬화(serialization) 표준 라이브러리입니다.
「피클(절임)」이라는 이름답게 객체를 「피클 항아리에 절여 보관하는」 비유입니다.
기본 사용.
import pickle.
with open("data.pkl", "wb") as f: pickle.dump(my_object, f).
with open("data.pkl", "rb") as f: loaded = pickle.load(f).
「wb」/「rb」(바이너리 모드) 사용에 주의.
어떤 파이썬 객체든 — 리스트·딕셔너리·클래스 인스턴스·심지어 함수까지 — 거의 모두 절일 수 있습니다.
JSON과 비교.
JSON은 「텍스트 + 언어 독립」으로 다른 언어와 호환되지만 「딕셔너리·리스트·기본 타입」만 가능.
pickle은 「바이너리 + 파이썬 전용」으로 호환성은 없지만 「클래스 인스턴스, 함수, 복잡한 객체」 등 거의 모든 파이썬 객체를 다룰 수 있습니다.
주요 활용.
ML 모델 저장(scikit-learn 모델은 pickle로), 캐시 데이터 보관, 멀티프로세스 간 객체 전달.
단, 모델 저장에는 pickle보다 joblib이 더 빠르며, ML 분야는 점차 ONNX·SafeTensors 같은 다른 형식으로 옮겨 가는 추세입니다.
보안 경고: 「알 수 없는 출처의 pickle 파일은 절대 로드하지 마세요」.
pickle.load()는 임의 코드 실행을 허용해 악성 pickle 파일이 시스템을 손상시킬 수 있습니다.
신뢰할 수 있는 자기 데이터만 pickle을 쓰고, 외부 데이터는 JSON 같은 안전한 형식을 써야 합니다.
한 줄 요약
pickle은 파이썬 객체를 바이트로 직렬화해 저장·전송합니다.
클래스 인스턴스·함수까지 거의 모든 객체를 절일 수 있지만, 알 수 없는 출처의 pickle은 보안 위험으로 로드 금지입니다.
더 알아볼 것
- joblib — 큰 NumPy 배열에 더 효율적
- SafeTensors — Hugging Face의 안전 직렬화
- pickle 보안 사고 사례