안녕하세요! 오늘은 Django REST Framework(DRF)의 핵심 기능 중 하나인 Serializer에 대해 쉽고 재미있게 알아보겠습니다.
코드를 통해 Serializer가 어떻게 동작하는지, 그리고 왜 필요한지 함께 살펴볼까요?
Serializer, 번역가와 같아요! 🗣️
Serializer는 한 마디로 번역가 역할을 합니다.
- Django 모델(Python 객체): 우리가 데이터베이스에 저장하고 싶어 하는 파이썬 객체입니다.
- JSON(문자열): 인터넷을 통해 데이터를 주고받을 때 사용되는 범용적인 형식입니다.
Django는 파이썬 객체를 다루지만, 웹은 JSON 형태의 텍스트 데이터를 주고받는 것이 일반적입니다. Serializer는 이 둘 사이에서 데이터를 변환해주는 역할을 담당합니다.
- 파이썬 객체 → JSON: 사용자가 요청한 데이터를 웹에 보여주기 위해 직렬화(Serialization)합니다.
- JSON → 파이썬 객체: 사용자가 입력한 데이터를 데이터베이스에 저장하기 위해 역직렬화(Deserialization)합니다.
코드 분석: UserSerializer 한 줄씩 뜯어보기 🛠️
UserSerializer 코드를 한 줄씩 살펴보면서 Serializer가 어떻게 동작하는지 알아봅시다.
from django.contrib.auth import get_user_model
from rest_framework import serializers
class UserSerializer(serializers.ModelSerializer):
"""Serializer for the user object."""
- from django.contrib.auth import get_user_model: Django의 기본 유저 모델을 가져오는 함수를 임포트합니다.
- from rest_framework import serializers: DRF의 Serializer 기능을 사용하기 위해 필요한 모듈을 임포트합니다.
- class UserSerializer(serializers.ModelSerializer): UserSerializer 클래스를 정의하고, DRF의 ModelSerializer를 상속받습니다. ModelSerializer는 Django 모델과 Serializer를 쉽게 연결해주는 강력한 클래스입니다.
class Meta:
model = get_user_model()
fields = ['email', 'password', 'name']
extra_kwargs = {'password': {'write_only': True, 'min_length': 5}}
- class Meta: UserSerializer에 대한 설정을 정의하는 내부 클래스입니다.
- model = get_user_model(): 이 Serializer가 어떤 Django 모델을 기반으로 할지 지정합니다. 여기서는 get_user_model() 함수를 통해 프로젝트에 설정된 유저 모델을 가져옵니다.
- fields = ['email', 'password', 'name']: Serializer가 다룰 필드를 명시적으로 지정합니다. email, password, name 필드를 통해 데이터를 읽고 쓸 수 있게 됩니다.
- extra_kwargs = {'password': {'write_only': True, 'min_length': 5}}: 필드에 추가적인 옵션을 설정합니다.
- 'password': password 필드에 대한 설정입니다.
- 'write_only': True: 이 필드는 쓰기(write)만 가능하고, 읽기(read)는 불가능하게 만듭니다. 즉, 사용자에게 비밀번호가 노출되지 않도록 데이터를 직렬화할 때(응답으로 보낼 때)는 포함되지 않습니다.
- 'min_length': 5: 유효성 검사를 수행하여, 비밀번호의 최소 길이를 5자로 제한합니다.
def create(self, validated_data):
"""Create and return a user with encrypted password."""
return get_user_model().objects.create_user(**validated_data)
- def create(self, validated_data): POST 요청이 들어와 새로운 데이터를 생성할 때 호출되는 메서드입니다.
- ModelSerializer는 기본 create() 메서드를 가지고 있지만, 여기서는 비밀번호를 암호화하기 위해 이 메서드를 오버라이드(재정의)했습니다.
- validated_data: email, password, name과 같이 유효성 검사를 통과한 데이터들이 담겨 있는 딕셔너리입니다.
- return get_user_model().objects.create_user(**validated_data): 이 코드가 핵심입니다. create_user라는 유저 모델의 특별한 메서드를 호출하여, validated_data에 있는 비밀번호를 평문 그대로 저장하는 대신 안전하게 암호화하여 유저 객체를 생성하고 반환합니다.
이렇게 Serializer를 사용하면 복잡한 데이터 처리 로직을 간단하게 구현하고, 유효성 검사나 보안과 같은 중요한 기능들을 쉽게 적용할 수 있습니다. Serializer는 Django REST Framework에서 API를 만드는 데 없어서는 안 될 필수적인 도구랍니다! 👍
'Programming > Django' 카테고리의 다른 글
| [Django] 중첩된 시리얼라이저(Nested Serializers) 완벽 이해하기 (1) | 2025.08.11 |
|---|---|
| DRF(Django REST Framework) 개발자를 위한 비교: APIView vs. Viewsets 🧐 (2) | 2025.08.07 |
| 🧾 Django REST Framework에서 API 문서 자동화하기 (DRF Spectacular + Swagger) (2) | 2025.08.06 |
| 🔌 API란 무엇일까? 쉽게 풀어보는 API의 개념과 동작 원리 (3) | 2025.08.06 |
| ✅ TDD란 무엇인가? 테스트 주도 개발을 처음 접하는 분들을 위한 설명 (3) | 2025.08.06 |