Framework/Django

DRF Serializer는 무엇이며, 어떤 기능을 수행합니까?

JM Lee 2023. 10. 11. 19:52
728x90

Serialize를 직역하면 '직렬화하다'라는 뜻이 나온다.

그렇다면 직렬화는 왜 수행하고, 어떻게 수행하는지 궁금해져서 정리를 해보았다.

 


먼저 직렬화를 이해하기 위해서는 Rest API에 대해 이해하고 넘어가야 한다.

Rest API

Rest API는 Rest를 기반으로 만들어진 API를 의미한다.

Rest는 Representational State Transfer의 약자로, 자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는 모든 것을 말한다.

다시 말해,

  1. HTTP URI를 통해 자원(resource)을 명시하고,
  2. HTTP Method(POST, GET, PUT, DELETE)를 통해
  3. 해당 자원(URI)에 대한 CRUD Operation을 적용하는 것

데이터가 요청될 때 JSON이나 XML을 통해 상태(정보)를 주고 받는다.

추가 내용은 아마존 공식 사이트를 이용하자

https://aws.amazon.com/ko/what-is/restful-api/

 


Serializer

 

DRF는 Django 안에서 이러한 Rest API를 쉽게 만들 수 있도록 도와주는 라이브러리다.

웹 브라우저 API는 범용성이 커서 개발을 쉽게 만들어주고, 시리얼라이즈 기능도 제공해주기 때문에 DRF를 사용한다.

 

DRF에서 Serializer는 우리가 Django에서 사용하는 파이썬 객체나 쿼리셋 같이 복잡한 객체들을 Rest API에서 사용할 간단한 JSON, XML 또는 다른 콘텐츠 형태로 변환(Rendering)해주는 어댑터같은 것이다.

 

# views.py

from datetime import datetime

class Comment:
    def __init__(self, email, content, created=None):
        self.email = email
        self.content = content
        self.created = created or datetime.now()

comment = Comment(email='leila@example.com', content='foo bar')
# serializers.py

from rest_framework import serializers

class CommentSerializer(serializers.Serializer):
    email = serializers.EmailField()
    content = serializers.CharField(max_length=200)
    created = serializers.DateTimeField()

 

이와 같이 직렬화해준 다음 우리는 그 직렬화해준 객체를 정의만 해주면 과정이 끝이 나게 된다.

 


Validation

 

Django REST framework (DRF)에서 Serializer의 유효성 검사 조건은 Serializer 클래스 내부에 정의된 필드들과 관련이 있다. Serializer는 데이터 유효성을 검사하고, 유효한 데이터를 Python 객체로 변환하거나 유효성 검사에 실패한 경우 오류 메시지를 반환한다. Serializer의 유효성 검사 조건은 다음과 같은 방법으로 정의된다.

  1. 필드 유효성 검사: Serializer 클래스는 필드를 정의하고 이 필드에 대한 유효성 검사 규칙을 설정할 수 있다. 각 필드는 해당 필드의 데이터가 유효한지 확인하기 위한 조건을 가질 수 있다. 이러한 조건은 validators 매개변수를 통해 설정된다. 예를 들어, 필드의 최소값 또는 최대값을 지정하거나, 특정 패턴과 일치하는지 검사할 수 있다.
  2. Serializer 메서드: Serializer 클래스 내에 유효성 검사를 수행하기 위한 메서드를 정의할 수 있다. 이 메서드는 필드 수준의 유효성 검사 이상의 복잡한 유효성 검사를 수행하는 데 유용하다. 예를 들어, validate 메서드를 사용하여 여러 필드 간의 관계를 검사하거나 사용자 지정 유효성 검사를 수행할 수 있다.
  3. 필수 필드: Serializer 클래스에서 필수 필드를 설정하여 해당 필드가 항상 제출되어야 하는지 여부를 지정할 수 있다. 이를 통해 필수 데이터의 누락을 방지할 수 있다. Serializer 클래스를 사용할 때, is_valid 메서드를 호출하여 데이터의 유효성을 검사하고, 필요한 경우 유효성 검사 오류를 처리할 수 있다. Serializer의 errors 속성을 통해 유효성 검사 오류에 대한 정보를 얻을 수 있다.

이러한 방식으로 DRF에서 Serializer의 유효성 검사 조건을 설정하고 데이터를 검증할 수 있다.

 


Method

Django REST framework (DRF)의 Serializer 클래스는 데이터 직렬화와 역직렬화를 수행하는 데 사용되며, 다양한 메서드를 제공하여 데이터 처리 및 유효성 검사를 지원합니다. Serializer 클래스에서 자주 사용되는 메서드 중 일부는 다음과 같습니다.

 

  1. to_representation(self, instance): 이 메서드는 Python 객체를 직렬화된 데이터로 변환하는 데 사용된다. 주어진 instance 객체를 직렬화된 형식으로 변환하여 응답 데이터를 생성한다.

  2. to_internal_value(self, data): 이 메서드는 클라이언트로부터 수신한 데이터를 파이썬 객체로 역직렬화하는 데 사용된다. 주어진 data를 역직렬화하여 파이썬 객체로 변환한다.

  3. create(self, validated_data): Serializer를 사용하여 새로운 객체를 생성할 때 호출된다. 주어진 validated_data를 기반으로 새로운 모델 인스턴스를 생성하고 반환한다.

  4. update(self, instance, validated_data): Serializer를 사용하여 기존 객체를 업데이트할 때 호출된다. 주어진 instance를 업데이트하고 validated_data를 기반으로 필드를 갱신한다.

  5. validate_<field_name>(self, value): 필드별 유효성 검사를 수행하기 위한 메서드이다. <field_name>은 Serializer 클래스에서 정의한 필드의 이름에 해당한다. 이 메서드를 사용하여 특정 필드에 대한 사용자 정의 유효성 검사를 수행할 수 있다.

  6. validate(self, data): 전체 Serializer의 유효성을 검사하는 메서드이다. 이 메서드를 사용하여 여러 필드 간의 상호작용 또는 전역 유효성 검사를 수행할 수 있다.

  7. is_valid(self): Serializer의 유효성을 검사하는 메서드이다. 이 메서드는 모든 필드의 유효성 검사를 수행하고, 만약 유효하지 않은 데이터가 있으면 False를 반환한다.

  8. errors: 유효성 검사 오류에 대한 정보를 포함하는 속성이다. 이 속성을 통해 유효성 검사에서 발생한 오류를 확인할 수 있다.

이러한 메서드를 사용하여 Serializer 클래스를 사용자 지정하고 데이터 직렬화 및 역직렬화 프로세스를 제어할 수 있습니다. Serializer의 메서드를 재정의하여 특정 동작을 추가하거나 사용자 지정 유효성 검사를 수행할 수 있다.

 


Modelserializer

ModelSerializer는 Django REST framework (DRF)에서 제공하는 Serializer의 하위 클래스로, 데이터 직렬화 및 역직렬화 작업을 모델과 밀접하게 연결하는데 사용된다. 주로 데이터베이스 모델과 연동하여 RESTful API를 빠르게 구축하는 데 유용하다. ModelSerializer를 사용하면 모델과 Serializer 사이의 중복 코드를 줄이고 간단한 설정으로 CRUD(Create, Read, Update, Delete) 작업을 처리할 수 있다.

ModelSerializer의 특징과 사용법은 다음과 같다.

  1. 모델과 연결: ModelSerializer는 Serializer를 정의할 때 해당 Serializer가 사용할 모델 클래스를 지정하므로 Serializer의 필드들은 모델의 필드와 자동으로 매핑된다.

  2. 자동 필드 생성: Serializer를 정의할 때, 모델 클래스의 필드와 일치하는 필드를 자동으로 생성합니다. 이러한 자동 생성 필드에는 필드 유효성 검사 규칙이 이미 설정되어 있다.

  3. create() 및 update() 메서드 자동 생성: ModelSerializer는 모델을 생성하거나 업데이트할 때 사용되는 create() 및 update() 메서드를 자동으로 생성한다. 이를 통해 새로운 모델 인스턴스를 생성하고 업데이트하는 프로세스를 단순화할 수 있다.

  4. Meta 클래스 설정: ModelSerializer에서 Meta 클래스를 사용하여 모델 클래스와 관련된 설정을 정의할 수 있다. 이 설정으로 모델에서 특정 필드를 선택하거나 필드 순서를 지정하는 등의 조작이 가능하다.

 


참고 사이트

 

https://www.django-rest-framework.org/api-guide/serializers/

 

Serializers - Django REST framework

 

www.django-rest-framework.org

https://velog.io/@kjyeon1101/DRF-Serializer%EA%B0%80-%EB%AD%98%EA%B9%8C

 

[DRF] Serializer가 뭘까

아직도 대체 Serializer가 뭘 하는 놈인지 잘 모르겠다. 누가 물어보면 "어..... 직렬화?"라고 밖에 못할 수준.. 장고의 form이랑 비슷하다는데 실컷 직렬화 어쩌고 저쩌고 하다가 갑자기 폼이 왜 나오

velog.io

https://blog.payhere.in/django-rest-framework-serializers/

 

Django REST framework Serializers 내부 동작 파악하기 😎

strongly restrict the ordering of operations/properties

blog.payhere.in

 

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

reverse, reverse_lazy  (0) 2023.12.16
DRF manage.py 해석  (0) 2023.10.31
RESTful API  (0) 2023.09.23
Django 테스트코드에서 setup 함수와 setupclass의 차이는 무엇입니까?  (0) 2023.09.23
장고 50문 50답 채우기(4)  (0) 2023.07.25