기술블로그-Django편

📌 Django에서 DRF 사용 시 Serializer가 꼭 필요한 이유

Chansman 2025. 5. 15. 11:36

📌 Django에서 DRF 사용 시 Serializer가 꼭 필요한 이유

Django는 원래 HTML을 렌더링하는 웹 프레임워크입니다. 하지만 **DRF(Django REST Framework)**는 Django 위에서 동작하며, JSON 기반 API 서버를 만들기 위해 사용됩니다.

이때 핵심이 되는 것이 바로 **Serializer(직렬화 도구)**입니다.


✅ 1. 왜 Serializer가 필요한가요?

1️⃣ API는 사람보다 프로그램이 사용한다

  • Django는 기본적으로 HTML 페이지를 응답합니다.
  • 반면 DRF는 프론트엔드 앱, 모바일 앱 등이 데이터를 JSON으로 요청하고 응답 받습니다.

2️⃣ 모델 인스턴스는 JSON이 아니다

book = Book.objects.get(id=1)
  • 이 객체는 Python 클래스 객체이지 JSON 형식이 아닙니다.
  • 프론트에 데이터를 보내려면 JSON으로 변환해야 합니다.

3️⃣ Serializer는 데이터 변환 + 유효성 검사 + 저장까지 처리

  • Python 객체 → JSON (직렬화)
  • JSON → Python 객체 + DB 저장 (역직렬화)
  • 자동 유효성 검사 지원

🔄 직렬화 vs 역직렬화

동작 설명 예시

📤 직렬화 Python → JSON 응답 데이터를 전송할 때
📥 역직렬화 JSON → Python POST/PUT 요청 처리 시

🧱 실전 예제

📌 모델

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=100)

📌 Serializer

from rest_framework import serializers

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

📤 직렬화 (GET)

book = Book.objects.first()
serializer = BookSerializer(book)
serializer.data
# 출력: {'id': 1, 'title': '어린왕자', 'author': '생텍쥐페리'}

📥 역직렬화 + 저장 (POST)

data = {'title': '해리포터', 'author': 'J.K.롤링'}
serializer = BookSerializer(data=data)
if serializer.is_valid():
    serializer.save()

✅ Serializer의 주요 기능

기능 설명

🔁 직렬화 Python → JSON 응답 생성
🔂 역직렬화 JSON → Python + DB 저장
✅ 유효성 검사 필드 누락, 형식 오류 자동 체크
💾 저장 .save()로 모델 인스턴스 생성/수정

⚠️ 흔한 실수

실수 원인

serializer.data가 비어 있음 is_valid() 호출 안 함
.save() 오류 필수 필드 누락, 모델 필드와 매핑 불일치

🎯 요약

Django 모델 객체는 API 응답에 직접 쓸 수 없습니다.
DRF에서 Serializer는 Django 객체를 JSON으로 바꿔주고, JSON을 다시 객체로 바꿔주는 필수 연결고리입니다.

Serializer 없이 DRF는 존재할 수 없습니다. REST API 개발의 시작점이자 핵심입니다. 🚀