DRF-1

김의석 ·2024년 5월 24일

Django

목록 보기
28/39

직렬화

데이터의 구조와 상태를 해치지 않고 다른 컴퓨팅 환경에 저장하고 재구성이 가능한 포맷으로 변환하는 과정

파이썬과 클래스 그리고 직렬화

파이썬의 클래스를 선언해서 데이터 구조를 표현했다고 가정
이 클래스 데이터는 파이썬만 이해할 수 있고 다른 언어는 이해하지 못한다.
이런 문제를 해결하기 위해서 데이터 구조를 표현하는 통일된 규칙(JSON과 XML)을 사용한다.

이때 데이터 구조를 표현하는 통일된 규칙으로 변환하는 과정을 직렬화(Serializer) 라고 한다!
데이터를 저급(Low Level)하게 변환하는 과정이라고도 부른다.

클래스 : 컴퓨터 입장에서 매우 무겁고 쓸모없는 데이터 표현 방식?

클래스는 인간이 데이터 구조를 쉽게 표현하기 위해 만든 인간 친화적인 데이터 구조이다.
기계어(0101010, 이진수)-> bytes -> char, string -> class, OOP

인간 친화적인 언어 : 고급 언어
컴퓨터 친화적인 언어 : 저급 언어
(품질의 정도를 의미하는 것은 아니다!)

파이썬 입장에서 데이터 직렬화 수준

1) 클래스


# 클래스
class User:
    def __init__(self, user_id, name, age):
        self.user_id = user_id
        self.name = name
        self.age = age

    # 딕셔너리로 변환하는 메서드
    def to_dict(self):
        return {
            "user_id": self.user_id,
            "name": self.name,
            "age": self.age
        }
        
# 클래스 객체 생성
user = User(user_id=1, name="John Doe", age=30)

2) 클래스 -> 딕셔너리

user_dict = user.to_dict()

3) 딕셔너리 -> JSON

user_json = json.dumps(user_dict)

4) bytes

user_bytes = user_json.encode('utf-8')

결과

딕셔너리: {'user_id': 1, 'name': 'John Doe', 'age': 30}
JSON 문자열: {"user_id": 1, "name": "John Doe", "age": 30}
bytes: b'{"user_id": 1, "name": "John Doe", "age": 30}'
복원된 딕셔너리: {'user_id': 1, 'name': 'John Doe', 'age': 30}
profile
널리 이롭게

0개의 댓글