본문 바로가기
파이썬/파이썬 플라스크

ep 9. marshmallow 로 Python 에서 직렬화 / 비직렬화 처리하기

by L_SU 2022. 9. 11.

marshmallow로 직렬화와 비직렬화를 처리하기 전에 우리는 직렬화와 비직렬화가 무엇인지 알 필요가 있다.

 

직렬화란?

객체의 내용을 바이트 단위로 변환해 파일 or 네트워크를 통해 송수신이 가능하도록 만드는 것

비직렬화란?

직렬화된 파일을 다시 객체의 형태로 만드는 것

직렬화를 하는 이유?

시스템이 종료되어도 사라지지 않는 데이터이기에 메모리에만 상주되어 있는 객체 데이터를 영속화 해야할 때 사용됨

 

marshmallow Schema 클래스

dump_only : 역직렬화 중 건너뛸 필드, read_only(읽기 전용)

 

load_only : 직렬화 중 건너뛸 필드, write_only(쓰기 전용)

 

many : 오브젝트가 collection이면 True로 설정해야 객체가 리스트에 직렬화 된다

 

 

marshmallow - 직렬화

실습을 위해 위와 같이 가상환경을 만들고, 활성화 시켜준다. 그리고 serialization.py 파일을 만들어주면 된다. 이때 터미널에 pip list를 입력하면 pip, setuptools 만 있어야 한다.

다음과 같은 명령어로 marshmallow를 설치해준다.

 

그리곤 위와 같이 serialization.py에 필자는 animal class를 하나 정의 해줬다. 

위와 같이 인자에 맞춰 데이터를 넣어주면 아래처럼 __dict__ 메소드를 이용해 객체 정보를 확인할 수 있다.

이거를 이제 딕셔너리에서 값을 얻어와 다시 딕셔너리의 값으로 넘기는 과정 ,직렬화를 json을 활용해 진행해보자.

다음과 같이 작업해줄 수도 있지만, 이렇게 되면 여러 데이터를 보내게 될 때 우리는 매우 아주 긴 코드를 짜게 될 것이고, 그 데이터의 양이 많아질 수록 현실에선 사용하기 어려운 코드가 될 것이다. 이를 해결 하기 위해 우리는 다음과 같이 해결할 수 있다.

import 작업후, 스카마 클래스를 상속 받아 animalSchema를 만들어준다.

그리고 스카마를 저장하고, dump()에 내가 원하는 데이터를 넣어주면

위처럼 데이터가 반환이 되는 것을 볼 수 있다.

그리고 json을 import 해줘 출력을 조금 바꿔준다면 json 형식으로 딕셔너리를 바꿀 수 있다.

 

marshmallow - 역직렬화

deserialization.py 파일을 만들어 위와 같은 내용을 import 해준다.

마저 코드를 작성해주면 되는데 JSON_animal_data 는 우리가 임시로 Json 형식으로 데이터를 받은 예시를 나타내준 것이다. 이 Json 데이터를 받아 스카마를 통해 data에 저장되고, 이를 animal_object로 받으면 역직렬화 과정을 진행할 수 있게 되는 것이다.