📘 DRF - serializer_class 

  1. serializer_class?
  2. 왜 serializer_class를 정의하는가?
  3. 예시로 살펴보기
  4. 직렬화와 역직렬화 처리 과정
  5. 유효성 검사

📘 serializer_class?

serializer_class는 Django REST Framework (DRF)에서 입력 및 출력 데이터를 직렬화하는 방식을 정의하는 데 사용됩니다.

serializer_class를 정의함으로써,
어떤 데이터가 클라이언트에게 반환되고, 클라이언트에서 받은 데이터를 어떻게 처리할 것인지를 명확하게 지정할 수 있습니다.

🔝


📘 왜 serializer_class를 정의하는가?

🗣️ 데이터 직렬화 및 역직렬화

  • 직렬화(Serialization)
    • Django 모델 인스턴스를 JSON이나 XML과 같은 데이터 형식으로 변환하여 클라이언트에게 반환할 수 있도록 하는 과정
  • 역직렬화(Deserialization)
    • 클라이언트에서 보내는 데이터를 Django 모델로 변환하는 과정
      즉, 클라이언트가 보낸 JSON 데이터를 받아서, 이를 Book 모델 인스턴스(instance)로 변환하는 작업

🗣️ 데이터 유효성 검사

  • 직렬화 과정에서 유효성 검사(validation)도 자동으로 처리
    예를 들어, 사용자가 필수 필드를 빠뜨렸을 때, serializer_class는 이를 감지하고 오류 메시지를 반환

🗣️ 기본적인 CRUD 작업 처리:

  • DRF에서 제네릭 뷰를 사용할 때, serializer_class를 지정하면 DRF가 이 직렬화기를 사용해 데이터를 자동으로 처리
    즉, 뷰가 클라이언트로부터 데이터를 받거나 반환할 때, 해당 데이터를 직렬화하거나 역직렬화하는 작업을 serializer_class가 담당

🔝


📘 예시로 살펴보기

⚙️ serializers.py

from rest_framework import serializers
from .models import Book

class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = ['id', 'title', 'author', 'published_date']
  • BookSerializer는 Book 모델을 직렬화하는 데 사용됩니다.
  • fields는 직렬화할 모델의 필드를 지정합니다.
    이 예시에서는 id, title, author, published_date 필드가 포함됩니다.

⚙️ 뷰에서 serializer_class 사용 예시

from rest_framework import generics
from .models import Book
from .serializers import BookSerializer

class BookListView(generics.ListCreateAPIView):
    queryset = Book.objects.all()  # 어떤 데이터베이스 모델을 사용할지
    serializer_class = BookSerializer  # 직렬화기를 사용하여 데이터를 처리
  • serializer_class = BookSerializer는 이 뷰에서 사용되는 직렬화기를 지정합니다.
  • ListCreateAPIView
    • GET 요청 시, BookSerializer를 사용하여 Book 객체들을 JSON 형태로 변환하여 반환하고,
    • POST 요청 시, 클라이언트가 보낸 JSON 데이터를 BookSerializer를 통해 역직렬화하여 데이터베이스에 저장합니다.

🔝


📘 직렬화와 역직렬화 처리 과정

⚙️ 직렬화:

클라이언트에게 반환할 때 Book 모델 인스턴스를 JSON으로 변환합니다.

# 예시 출력 (GET 요청에 대한 응답)
[
    {
        "id": 1,
        "title": "Book Title 1",
        "author": "Author 1",
        "published_date": "2022-01-01"
    },
    {
        "id": 2,
        "title": "Book Title 2",
        "author": "Author 2",
        "published_date": "2022-02-01"
    }
]

 

⚙️ 역직렬화:

클라이언트가 보내는 JSON 데이터를 Book 객체로 변환합니다.

{
    "title": "New Book",
    "author": "New Author",
    "published_date": "2023-01-01"
}

 

이 JSON 데이터를 서버에서 받아 처리할 때,

BookSerializer는 이를 Book 모델 인스턴스로 변환하고, 유효성 검사 후 데이터베이스에 저장합니다.

🔝


📘 유효성 검사

serializer_class를 정의하면, 유효성 검사도 자동으로 처리됩니다.

예를 들어, 필수 필드가 빠졌거나 잘못된 데이터 형식이 들어오면, DRF는 자동으로 오류 메시지를 반환해 줍니다.

from rest_framework import serializers

class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = ['id', 'title', 'author', 'published_date']

    def validate_title(self, value):
        if len(value) < 3:
            raise serializers.ValidationError("Title must be at least 3 characters long.")
        return value

 

위 코드에서 validate_title 메서드는 title 필드에 대해 유효성 검사를 수행합니다.

만약 title이 3자 미만이면 ValidationError를 발생시키고, 클라이언트에게 에러 메시지를 전달합니다.

🔝


📘 결론

serializer_class는 DRF에서 입력과 출력 데이터를 처리하고, 데이터 유효성 검사를 자동으로 해주는 중요한 역할을 합니다.

이를 통해 클라이언트와 서버 간의 데이터 변환 작업을 간단하고 안전하게 처리할 수 있습니다.

serializer_class를 정의함으로써,

데이터를 직렬화하고 역직렬화하는 과정에서 코드의 복잡성을 줄이고, 코드의 재사용성을 높일 수 있습니다.

🔝

'🔥 공부 > 📘 DRF 공부' 카테고리의 다른 글

[DRF] 페이지네이션(pagination)  (1) 2025.03.25
[DRF] generics.GenericAPIView?  (0) 2025.02.17
[DRF] Generics?  (1) 2025.02.17
[DRF] Django REST framework simple JWT  (1) 2025.02.15
[DRF] Django Deploy with AWS, 배포  (0) 2025.02.06

🐾Recent posts