본문 바로가기
Programming/Django

Serializer, 대체 뭘까? 🧐

by Mandy's 2025. 8. 7.

안녕하세요! 오늘은 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를 만드는 데 없어서는 안 될 필수적인 도구랍니다! 👍