[Etc] 파이썬 데이터의 직렬화 (Pickle과 JSON)

clean·2023년 6월 28일
0

출처:
https://docs.python.org/ko/3/library/pickle.html

파일을 파싱해서 딕셔너리, 리스트 등으로 만들어 놓은 파이썬 객체를 저장해놓아야하는 일이 생겼다.
찾아보다가 pickle 라이브러리를 쓰는 방법, JSON으로 저장하는 방법 크게 두 가지가 있다는 것을 알았다.

일단 피클링(pickling)을 한다는 것은 객체를 직렬화하는 것, 언피클링(unpickling)은 직렬화된 데이터를 다시 객체 계층 구조로 복원하는 것을 의미한다.
직렬화(serialization)은 마샬링(marshalling) 또는 평탄화(flattening)이라고도 한다.

Pickle과 JSON의 비교

  • JSON은 텍스트 직렬화 형식(유니코드 텍스트를 출력, 대게는 utf-8로 인코딩)이지만, pickle은 바이너리 직렬화 형식이다.
  • JSON은 사람이 읽을 수 있지만, pickle은 그렇지 않다.
  • JSON은 파이썬 생태계 외부에서 널리 사용되지만, pickle은 파이썬에서만 쓸 수 있다.
  • JSON은 기본적으로 파이썬 내장형 일부만 표시할 수 있으며 사용자 정의 클래스는 표현할 수 없다.
  • pickle과 달리, JSON의 역직렬화는 그 자체로 임의 코드 실행 취약점을 만들지 않는다.

마지막 실행 취약점이 무슨말인가 하니...
반드시 신뢰할 수 있는 데이터만 언피클 해야한다는 것이다.
언피클시에 외부 코드나 임의의 코드를 실행하는 것은 악의적인 피클 데이터를 구성할 수가 있다.
만약 변조되지 않았음을 보장하려면 hmac으로 데이터에 서명하는 방법을 쓸 수도 있다고 한다.

profile
블로그 이전하려고 합니다! 👉 https://onfonf.tistory.com 🍀

0개의 댓글