본문 바로가기
IT/python

파이썬 pickle 모듈

by 뉴코딩맨 2023. 6. 1.
파이썬에서 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

댓글