파이썬 Pickle과 JSON의 차이

피클(Pickle) 라이브러리

파이썬에는 피클이라는 라이브러리가 존재합니다. pickle은 파이썬 객체(상수, 불리언, 리스트, 딕셔너리등)의 대부분 파이썬 객체를 바이너리화 할 수 있는 메서입니다. 파이썬에서 딕셔너리 같은 자료형을 txt 파일에 저장한다면 다시 반복문으로 파싱 하는 과정을 거쳐야 하는데, pickle에서는 단순히. load를 사용해 데이터를 복원하는 것이 가능합니다. 하지만 조금만 관심 있게 파보더라도, 대부분의 개발자들이 추천하지 않는 프로토콜인 것을 볼 수 있습니다. 왜일까요? 

 

왜냐하면 피클을 사용하면 프로그램의 보안이 굉장히 취약 해질 수 있기 때문입니다. 피클로 저장한 파일을 다시 파이썬 객체로 언 피클링(Unpickling)을 할 때, 함수를 리턴하면서 실행될 수 있기 때문입니다. 그렇기에 웬만한 상황에서는 선호되지 않으며, 제삼자가 제공한 피클 압축파일(. pkl)은 역직렬화해서는 안됩니다.

 

 

 

JSON 형식

JavaScript Object Notation의 약자로, 데이터 교환을 목적으로 하는 텍스트기반 형식의 데이터입니다. 피클파일은 이진화되어 사람이 볼 수 없는 형태인 반면에, JSON은 텍스트 기반이라 누구나 알아볼 수 있습니다. 또, 피클로 저장된 데이터는 보안 취약점이 존재하고, 무엇보다 파이썬환경에서만 사용이 가능하지만 JSON형식은 다양한 언어와 호환된다는 점이 있습니다. 

 

하지만 파이썬으로 한정한다면 피클보다는 복잡한 코드 구조를 저장한다거나, 코드 리팩토링에 호환되지 않는다는점이 있습니다. 

 

 

 

 

 

결론

피클의 경우에는 파이썬 객체를 저장할때, 바이너리화 해서 열어볼 필요가 없고, 공동작업을 하지 않고 파이썬 객채의 상태를 저장해 둘 때만 사용하시는 게 좋습니다. 

JSON의 경우는, 간단한 구조의 객채를 저장하거나, 나머지 거의 모든 상황에서 사용하시면 되겠습니다.