배경
- 메타 데이터를 저장하는 과정에서 어느 순간 GPT가 피클 저장방식을 권유했다.
- 그래서 메타 데이터를 저장하는 과정에서 피클과 json 저장방식을 비교하고 차이점을 도출한다.
피클(Pickle) vs JSON 차이점 비교
특징 | 피클(Pickle) | JSON |
---|---|---|
언어 지원 | Python 전용 | 다수의 언어에서 사용 가능 (Python, JavaScript 등) |
자료형 유지 | Python 객체의 모든 자료형을 유지 | 기본 자료형만 지원 (str, int, list, dict 등) |
커스텀 객체 지원 | 클래스 인스턴스, 함수 등 복잡한 객체도 직렬화 가능 | 지원하지 않음 (직접 처리 필요) |
직렬화 속도 | 바이너리(b) 형태라 상대적으로 빠름 | 텍스트 형태라 상대적으로 느림 |
파일 크기 | 피클은 객체 구조 전체를 직렬화하므로 더 클 수 있음 | 텍스트 형식으로 상대적으로 작은 파일 크기 |
데이터 가독성 | 이진 데이터로 사람이 읽을 수 없음 | 사람이 읽을 수 있는 텍스트 형식 |
보안 | 신뢰할 수 없는 데이터는 위험 (피클링된 객체 실행) | 텍스트 형식이므로 상대적으로 안전 |
다중 언어 간 호환성 | Python 전용 | JSON은 다양한 언어 간 데이터 교환에 적합 |
피클과 JSON을 이용한 저장/불러오기 코드 비교
피클(Pickle) 방식 코드
import pickle
# 데이터
data_with_types = {
"name": "John Doe",
"age": 30,
"is_student": False,
"height": 1.75,
"courses": ["Math", "Science"],
"grades": {"Math": "A", "Science": "B"}
}
# wb(바이너리 형태로) 피클 파일 저장
with open('data_with_types.pkl', 'wb') as f:
pickle.dump(data_with_types, f)
# wb(바이너리 형태로) 피클 파일에서 불러오기
with open('data_with_types.pkl', 'rb') as f:
loaded_data = pickle.load(f)
# 출력
print(loaded_data)
JSON 방식 코드
import json
# 데이터
data_with_types = {
"name": "John Doe",
"age": 30,
"is_student": False,
"height": 1.75,
"courses": ["Math", "Science"],
"grades": {"Math": "A", "Science": "B"}
}
# 텍스트 쓰기(w) JSON 파일로 저장
with open('data_with_types.json', 'w') as f:
json.dump(data_with_types, f, indent=4)
# 텍스트 읽기(r) JSON 파일에서 불러오기
with open('data_with_types.json', 'r') as f:
loaded_data = json.load(f)
# 출력
print(loaded_data)
주요 차이점 정리:
저장 방식: 피클은 이진(binary) 형식으로 데이터를 직렬화하고, JSON은 텍스트 형식으로 데이터를 직렬화합니다.
불러올 때 자료형: JSON은 Python의 기본 자료형(문자열, 숫자, 리스트, 딕셔너리 등)만 복원, 피클은 여기에 더해서 함수를 포함해 Python 객체의 모든 자료형을 그대로 복원
complex_structure = {"person": Person("Bob", 25), "data": {1, 2, 3}, "func": my_function}
호환성: 피클은 Python 전용이므로 다른 언어에서 읽을 수 없으나, JSON은 다수의 언어에서 사용 가능해 데이터 교환에 적합합니다.
'사용툴 분석' 카테고리의 다른 글
Union이 뭐고 왜 사용하는가? (1) | 2024.11.08 |
---|---|
Type Hinting과 Pydantic 차이 (0) | 2024.11.08 |
RabbitMQ로 우선순위 큐 실제 적용해보자 (0) | 2024.10.02 |
메타데이터 활용한 코딩들 (0) | 2024.10.02 |
TypedDict의 개념과 langsmith (1) | 2024.09.08 |