DRF : Serializer
우리는 Representational State Transfer (REST)의 개념을 이해하면서, RESTful한 웹 어플리케이션을 만들기 위하여 서버와 클라이언트를 분리해야 함을 깨달았다. 서버와 클라이언트는 Application Programming Interface (API)를 통해 데이터를 통신한다. 서버에서는 API를 통해 데이터를 처리하여 전송하고 클라이언트는 이를 사용자에게 적절한 형태로 출력하거나 입력받는다. 이러한 연결고리에서 데이터는 JSON, XML 같은 웹에서 교환하기 쉬운 형태로 주고 받는 것이 좋다.
이것이 Serializer가 필요한 이유이다. Django를 생각해보면, Django는 모델과 QuerySet이라는 복잡한 객체로 데이터를 주고 받기 때문에 웹에 전송하기에는 많은 애로사항이 있다. 이를 JSON과 같은 형태로 변환해주고 데이터를 검증하는 것이 바로 Serializer다. 우리가 일반 Django에서 사용했던 Form의 역할을 대신한다고 생각하면 적절한 것 같다.
from rest_framework import serializers
class CustomSerializer(serializers.Serializer):
field1 = serializers.CharField(max_length=100)
field2 = serializers.IntegerField()
기본 serializer는 다음과 같은 형태로 시작한다. 자신이 사용할 필드에 대해서 임의대로 지정해주면 된다. 모델에 정의된 필드와 차이가 없거나, 추가적인 로직으로 인한 데이터가 필요하지 않다면, 모델을 기반으로 자동으로 Serializer를 생성해주는 ModelSerializer를 사용하면 된다.
from rest_framework import serializers
from .models import MyModel
class MyModelSerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = '__all__'
위 코드를 살펴보면, MyModel을 기반으로 모든 필드를 사용한다는 의미임을 직관적으로 알 수 있다. ModelSerializer를 사용하면 짧고 간단하게 serializer를 생성할 수 있다.
이렇게 생성된 serializer는 view를 통해 로직이 수행되거나 하여 클라이언트에서 받아들이기 좋은 형태(보통 JSON)로 전송된다.