파이썬에서 pickle 모듈은 객체 직렬화(serialization)와 역직렬화(deserialization)를 위한 기능을 제공합니다. pickle 모듈을 사용하면 파이썬 객체를 파일에 저장하고 나중에 다시 복원할 수 있습니다. pickle 모듈의 주요 기능과 사용법에 대해 알아보고, 실제 예제를 통해 활용 방법을 살펴보겠습니다.
객체 직렬화와 역직렬화
pickle 모듈은 파이썬 객체를 직렬화하고 이를 파일에 저장하는 기능을 제공합니다. 주요 함수들은 다음과 같습니다.
- pickle.dump(obj, file): 객체를 직렬화하여 파일에 저장합니다.
- pickle.load(file): 파일에서 객체를 읽어 역직렬화합니다.
import pickle
data = {'name': 'Alice', 'age': 30}
with open('data.pkl', 'wb') as f:
pickle.dump(data, f)
with open('data.pkl', 'rb') as f:
loaded_data = pickle.load(f)
print(loaded_data) # {'name': 'Alice', 'age': 30}
직렬화 가능한 객체
pickle 모듈을 사용하여 객체를 저장하려면 해당 객체가 직렬화 가능(serializable)해야 합니다. 파이썬에서는 대부분의 내장 데이터 유형과 사용자 정의 클래스 객체를 직렬화할 수 있습니다. 하지만 몇 가지 주의할 점이 있습니다.
일부 파일과 소켓과 같은 일부 객체는 직렬화할 수 없습니다.
__getstate__() 및 __setstate__() 메서드를 통해 직렬화 및 역직렬화를 사용자 정의할 수 있습니다.
import pickle
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __getstate__(self):
return self.name, self.age
def __setstate__(self, state):
self.name, self.age = state
person = Person('Alice', 30)
with open('person.pkl', 'wb') as f:
pickle.dump(person, f)
with open('person.pkl', 'rb') as f:
loaded_person = pickle.load(f)
print(loaded_person.name) # Alice
print(loaded_person.age) # 30
보안과 주의 사항
pickle 모듈을 사용할 때 주의해야 할 몇 가지 사항이 있습니다.
pickle은 안전하지 않은 데이터 포맷이므로 신뢰할 수 없는 소스에서 가져온 피클 데이터를 역직렬화하지 않는 것이 좋습니다.
역직렬화된 데이터에는 악성 코드가 포함될 수 있으므로, 신뢰할 수 없는 피클 파일을 열지 않도록 주의해야 합니다.
결론
pickle 모듈은 파이썬에서 객체 직렬화와 역직렬화를 위한 강력한 도구입니다. 이를 사용하여 객체를 파일에 저장하고 필요할 때 다시 복원할 수 있습니다. 그러나 보안에 주의하고, 신뢰할 수 없는 데이터를 역직렬화하지 않도록 주의해야 합니다.
'IT > python' 카테고리의 다른 글
파이썬 클래스(class) (0) | 2023.06.02 |
---|---|
파이썬 glob 모듈 (0) | 2023.06.02 |
파이썬 os 모듈 (1) | 2023.06.01 |
파이썬 random 모듈 (0) | 2023.05.31 |
파이썬 집합(Set) (0) | 2023.05.31 |
댓글