본문 바로가기
Python/Django

DRF(Serializer)

by 좌우지간에 2025. 1. 21.

 

 

Django REST Framework (Serializer)

Django는 웹 페이지(HTML)를 생성하는 데 특화된 프레임워크입니다. 하지만 현대 웹 환경은 다양한 클라이언트(웹, 모바일, 앱)에서 데이터를 소비하므로, 서버는 데이터를 API 형태로 제공하는 것이 효과적입니다. Django REST Framework(DRF)는 이러한 요구에 맞춰, 장고를 사용하여 RESTful API를 쉽게 구축하도록 지원합니다. DRF의 핵심 기능 중 하나는 Serializer로, 파이썬 객체를 JSON과 같은 형식으로 직렬화하여 클라이언트에게 데이터를 제공하고, 클라이언트로부터 받은 데이터를 파이썬 객체로 역직렬화합니다.

 

이 글에서는 DRF Serializer의 역할과 중요성을 퓨어 장고 Form과 비교하며 알아보고, 쿼리셋과의 관계 및 직렬화가 필요한 이유를 상세히 살펴보겠습니다.

 

 

1. Serializer: 데이터 처리의 핵심 도구

DRF의 Serializer는 다음과 같은 세 가지 주요 역할을 수행합니다.

  • 데이터 직렬화 (Serialization): 쿼리셋, 모델 인스턴스, 딕셔너리 등 파이썬 객체를 JSON, XML과 같이 웹에서 사용하기 적합한 형식으로 변환합니다. 이는 백엔드에서 데이터를 가져와 프론트엔드가 사용할 수 있도록 가공하는 과정입니다.
  • 데이터 역직렬화 (Deserialization): JSON, XML 등 클라이언트로부터 받은 데이터를 파이썬 객체로 변환합니다. 이는 클라이언트에서 받은 데이터를 백엔드에서 처리하기 용이하게 만들어줍니다.
  • 데이터 유효성 검사 (Validation): 입력된 데이터가 미리 정의된 규칙(필수 항목, 데이터 타입 등)을 충족하는지 확인합니다. 유효성 검사를 통과하지 못한 데이터는 에러를 발생시켜 데이터 무결성을 유지합니다.

즉, Serializer는 데이터를 주고받을 때 가공 및 검증을 담당하는 핵심적인 도구입니다.

 

 

2. Serializer vs. 퓨어 장고 Form: API 개발에 적합한 이유

퓨어 장고의 Form과 DRF의 Serializer는 모두 데이터 처리 및 유효성 검증 기능을 제공하지만, 목적과 활용 방식에 차이가 있습니다. Form은 주로 HTML Form 데이터를 처리하고 HTML 페이지를 렌더링하는 데 특화되어 있습니다. 반면, Serializer는 API를 통해 데이터를 주고받는 데 최적화되어 있습니다.

 

특징 퓨어 장고 Form DRF Serializer
주요 목적 웹 페이지 HTML Form 데이터 처리 및 렌더링 웹 API 데이터 직렬화/역직렬화 및 검증
처리 대상 HTML Form 데이터 JSON, XML 등 다양한 형식의 데이터
유효성 검사 HTML Form 데이터 기반 유효성 검사 다양한 형식의 데이터에 대한 유효성 검사
API 활용도 API에서 직접 사용하기 어려움 API에서 핵심적인 역할 수행
프론트엔드 연동 HTML Form 렌더링에 의존적 다양한 프론트엔드와 유연하게 연동

 

예시:

Form은 HTML 렌더링을 위한 필드와 위젯을 포함하고 있으며, 특정 HTML 구조에 종속적입니다. 반면, Serializer는 데이터 구조를 추상화하고 JSON, XML 등 다양한 데이터 형식을 지원하여 API 개발에 더욱 유연하게 적용할 수 있습니다. 즉, Serializer는 데이터 자체에 집중하며 프론트엔드 기술에 독립적으로 동작합니다.

 

 

3. 쿼리셋과 직렬화: 데이터 전송의 핵심

장고 모델에서 데이터를 가져올 때 사용하는 쿼리셋은 파이썬 객체이며, 데이터베이스에서 데이터를 가져오는 과정을 추상화한 지연 평가(Lazy Evaluation) 특징을 가지고 있습니다. 이러한 쿼리셋을 클라이언트에 직접 전송할 수는 없습니다. 클라이언트가 데이터를 이해할 수 있는 JSON과 같은 형식으로 변환해야 합니다.

  • 쿼리셋: 파이썬 객체 (지연 평가, SQL 쿼리 추상화)
  • JSON: 웹 표준 데이터 형식 (클라이언트에서 쉽게 처리 가능)

 

Serializer는 이러한 쿼리셋을 효율적으로 JSON으로 변환합니다. DRF는 ModelSerializer, Serializer 등 다양한 Serializer 클래스를 제공하며, 필요에 따라 커스터마이징하여 사용할 수 있습니다.

  • ModelSerializer: 모델 기반으로 필드를 자동 생성 (간편)
  • Serializer: 모든 필드를 수동으로 정의 (유연)

 

또한, Serializer는 데이터를 직렬화할 때 모델 필드와 Serializer 필드를 매핑하여 불필요한 데이터 노출을 방지하고, 데이터 유효성 검사를 통해 클라이언트에서 잘못된 데이터를 전송하는 경우 오류를 발생시켜 데이터의 무결성을 유지합니다.

예시 코드:


# models.py
class Book(models.Model):
    title = models.CharField(max_length=200)
    author = models.CharField(max_length=100)
    publisher = models.CharField(max_length=100)

# serializers.py
from rest_framework import serializers
from .models import Book

class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = ['title', 'author']  # 특정 필드만 직렬화

class BookSerializer2(serializers.Serializer):
    title = serializers.CharField(max_length=200)
    author = serializers.CharField(max_length=100)
        
  • 위 예시에서 BookSerializer ModelSerializer를 사용하여 모델의 특정 필드 (title, author)만 직렬화합니다. BookSerializer2 Serializer를 사용하여 모든 필드를 직접 정의합니다.

 

4. DRF의 RESTful API 지원과 장고의 확장

DRF는 장고의 웹 특화적인 한계를 극복하고, RESTful API를 쉽게 만들 수 있도록 지원합니다. RESTful API는 자원(Resource)을 중심으로 설계되며, HTTP 메서드(GET, POST, PUT, DELETE 등)를 사용하여 자원을 조작합니다. DRF는 이러한 RESTful 원칙을 따르도록 API를 설계하고, 다양한 클라이언트(웹, 모바일, 앱)에서 데이터를 효율적으로 주고받을 수 있도록 합니다. DRF의 이러한 기능은 장고를 단순한 웹 프레임워크에서 API 백엔드로 확장시켜줍니다.

 

 

5. 결론

DRF Serializer는 웹 API 개발에서 데이터를 처리하고 유효성을 검사하는 핵심 도구입니다. Serializer를 통해 쿼리셋을 JSON으로 직렬화하여 클라이언트에게 데이터를 제공하고, 클라이언트로부터 받은 데이터를 파이썬 객체로 역직렬화할 수 있습니다. DRF는 Serializer를 통해 장고의 한계를 극복하고 RESTful API 개발을 지원합니다. Serializer에 대한 이해는 DRF를 활용한 API 개발에 필수적입니다.

'Python > Django' 카테고리의 다른 글

Django Serialize 심화  (0) 2025.01.23
Django User정보 넣기  (0) 2025.01.22
Django 에서 commit  (0) 2025.01.20
웹보안을 위해 쿠키, 세션, 해시 그리고 JWT (Django 관점)  (1) 2025.01.17
DRF학습전 API, RESTful API 미리보기  (1) 2025.01.16