본문 바로가기
카테고리 없음

시리얼라이저(Seriallizer)란?

by 보안매크로 2024. 6. 27.
728x90

 시리얼라이저(Serializer)는 Django REST framework (DRF)에서 제공하는 기능으로, Django 모델 인스턴스와 기타 데이터 타입을 JSON, XML, 또는 다른 콘텐츠 타입으로 변환(직렬화)하거나, 반대로 그 데이터를 다시 Python 데이터 타입으로 변환(역직렬화)하는 역할을 합니다. 이를 통해 API 요청과 응답에서 데이터의 변환 및 검증을 효율적으로 처리할 수 있습니다.

주요 기능

  1. 직렬화: Python 객체(예: Django 모델 인스턴스)를 JSON, XML 등의 포맷으로 변환.
  2. 역직렬화: JSON, XML 등의 포맷으로 받은 데이터를 Python 객체로 변환.
  3. 검증: 입력된 데이터가 올바른지 검증.

Serializer 클래스 정의

Django REST framework에서 시리얼라이저를 사용하려면 serializers.Serializer 클래스를 상속받아 정의합니다. 또한 serializers.ModelSerializer를 사용하여 Django 모델과 쉽게 연동할 수 있습니다.

예제

다음은 MyModel이라는 Django 모델을 위한 시리얼라이저를 정의하고 사용하는 예제입니다.

1. 모델 정의


from django.db import models

class MyModel(models.Model):
    name = models.CharField(max_length=100)
    value = models.IntegerField()

2. 시리얼라이저 정의


from rest_framework import serializers
from .models import MyModel

class MyModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = MyModel
        fields = ['id', 'name', 'value']

3. 뷰 정의


from rest_framework import viewsets
from .models import MyModel
from .serializers import MyModelSerializer

class MyModelViewSet(viewsets.ModelViewSet):
    queryset = MyModel.objects.all()
    serializer_class = MyModelSerializer

4. URL 설정

from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import MyModelViewSet

router = DefaultRouter()
router.register(r'mymodel', MyModelViewSet)

urlpatterns = [
    path('', include(router.urls)),
]

시리얼라이저의 사용 예

  1. 직렬화: 모델 인스턴스를 JSON으로 변환
  2.  
  3. instance = MyModel.objects.first()
    serializer = MyModelSerializer(instance)
    json_data = serializer.data
  4. 역직렬화: JSON 데이터를 모델 인스턴스로 변환
    json_data = {'name': 'Example', 'value': 123}
    serializer = MyModelSerializer(data=json_data)
    if serializer.is_valid():
        instance = serializer.save()

추가 기능

  • 필드 수준 검증: 특정 필드의 값을 검증하는 메서드를 정의할 수 있습니다.
  • 객체 수준 검증: 객체 전체를 검증하는 메서드를 정의할 수 있습니다.
  • 커스텀 필드: 기본 필드 외에 추가적인 커스텀 필드를 정의할 수 있습니다.

필드 수준 검증 예제

class MyModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = MyModel
        fields = ['id', 'name', 'value']

    def validate_value(self, value):
        if value < 0:
            raise serializers.ValidationError("Value must be non-negative.")
        return value

객체 수준 검증 예제

class MyModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = MyModel
        fields = ['id', 'name', 'value']

    def validate(self, data):
        if data['name'] == 'Invalid' and data['value'] < 0:
            raise serializers.ValidationError("Invalid name cannot have a negative value.")
        return data

 이와 같이, 시리얼라이저는 데이터의 직렬화, 역직렬화, 검증을 위해 필수적인 역할을 수행하며, Django REST framework를 사용할 때 핵심적인 부분을 차지합니다.

 

- 클라이언트 > 역직렬화 > 서버 > 직렬화 > 클라이언트

 

  • 클라이언트 > 서버: 역직렬화 (Deserialization) - JSON 데이터가 Python 객체로 변환됩니다.
  • 서버 > 클라이언트: 직렬화 (Serialization) - Python 객체가 JSON 데이터로 변환됩니다.

 

728x90