본문 바로가기
[파이썬]/pickle

[파이썬] pikcle

by sung min_Kim 2023. 11. 9.
pickle

데이터 보관소

 


· 사용하는 이유


 pickle 모듈은 파이썬의 모든 종류의 객체를 파일에 저장할 수 있다.
 이를 통해 저장된 객체들은 종료 후에도 데이터를 유지할 수 있으며, 사용하고자 할 때 불러올 수 있게 된다.


· 기본 형태 및 동작 원리

 
 기본적으로 pickle 모듈을 사용하기 위해선 import를 해주어야 한다.

import pickle

 

 - 직렬화 : 파이썬의 객체를 저장하는 과정

 

import pickle

data = ['저장할 파이썬 객체']

with open('ex.pkl', 'wb') as f:
    pickle.dump(data, f)


 위 코드를 실행하면 'ex.pkl'라는 이름의 파일이 생성되고, 그 안에는 pickle 타입의 객체 data가 저장된다.


 이렇게 pickle 형식으로 저장된 데이터는 텍스트처럼 읽을 수 없으며, road 함수를 이용하여 조회할 수 있다.

 
 
 사용된 각 키워드에 대해 살펴보자.

  • with : 이는 파일을 열고 작업을 수행하고 난 후에 자동으로 파일을 닫아준다. with 을 사용하지 않는다면 파일을 close 함수를 사용하여 수동으로 닫아주어야 한다.

  • open('ex.pkl', 'wb') : open 함수는 파일을 여는 함수이다. 첫 번째 인자로는 파일의 이름을 받고, 두 번째 인자로는 파일을 여는 모드를 받는다. ' alphabets.pkl'는 여는 파일의 이름이고, 'wb'는 write binary의 약자로, 파일을 쓰기 위해 사용한다.

  • as f : 이 파일 객체를 ' f '라는 이름으로 사용하겠다는 의미이며, 보통 file의 앞글자를 딴 f 를 사용한다.

  • pickle.dump(data, f) : pickle.dump 함수는 파이썬 객체를 pickle 형식으로 저장할 때 사용하는 함수이다. 첫 번째 인자로는 저장할 파이썬 객체, 두 번째 인자인 f 는 파일 객체이다.

 

 - 역직렬화 : 저장된 파이썬의 객체를 불러오는 과정

 

import pickle

with open('ex.pkl', 'rb') as f:
    data = pickle.load(f)

print(data) # ['저장할 파이썬 객체'] 출력


 위의 코드를 실행하면 'ex.pkl' 이름의 파일을 조회하여, 안에 저장된 pickle타입의 data를 읽어올 수 있다.

 
사용된 각 키워드에 대해 살펴보자.

  • with open('ex.pkl', 'rb') as f : 'rb'는 read binary의 약자로 파일을 읽기 위해 사용한다. 외의 코드는 위에 설명한 바와 동일하다.

  • data = pickle.load(f) : pickle.load 함수는 pickle 형식으로 저장된 객체를 파일에서 읽어오는 함수이다. 여기서 f 는 데이터가 저장된 파일 객체를 가리킨다. 불러온 데이터는 data 변수에 할당된다.

  • print(data) : 불러온 결과를 출력한다. 이를 통해 'ex.pkl' 파일에 저장되어 있던 파이썬 객체가 정상적으로 출력되는 것을 확인할 수 있다.

 



pickle에 대해 살펴보았다.

pickle은 파이썬의 모든 종류의 객체를 간단하게 저장 및 조회할 수 있다.

또한 종료 후에도 데이터를 유지할 수 있으며, 불러올 때 저장한 데이터를 그대로 출력한다.

주의할 점으로는 악의적인 사용자가 바이러스, 해킹 등의 코드를 포함한 객체를 pickle로 저장하여 전달하면, 그 데이터를 읽을 때 악의적인 코드가 실행될 수 있어 보안상 큰 문제가 발생한다.

이런 이유로 신뢰할 수 없는 사용자에게 pickle 소스를 받아 사용하지 않도록 해야 한다.

pickle은 파이썬 전용 모듈이다. 따라서 호환성 역시 다소 아쉬운 부분을 보인다.

따라서, pickle 모듈 사용은 이러한 장단점을 고려하여 신중하게 사용해야 한다.