본문 바로가기
Python

Django modelserializer vs serializers.Serializer 차이

by Shark_상어 2024. 3. 2.
728x90


오늘은 Django API 작성 중 한번은 정리 하는 글을 쓰고자 했던 ModelSerializer 와 serializers.Serializer 차이를 정리하는
글을 쓰고자 한다.
본 글은 필자가 실무를 통해서 얻어낸 경험을 위주로 쓰는 글이기에 미흡한 점이 상당히 많다().
거두절미하고 바로 진행 하겠습니다.

ModelSerializerserializers.Serializer는 Django REST framework에서 사용되는 두 가지 주요 Serializer 클래스입니다. 이들 간의 주요 차이점을 살펴보겠습니다.


1. serializers.Serializer

serializers.Serializer는 DRF(장고 REST 프레임워크)에서 데이터 직렬화 및 역직렬화를 담당하는 기본 클래스입니다.

이 클래스는 일반적으로 데이터의 변환, 유효성 검사 및 다양한 데이터 속성 설정을 위해 사용됩니다.

다음과 같은 경우에 주로 사용됩니다

  1. 복잡하지 않은 데이터 구조: 간단한 데이터 구조에 사용됩니다. 예를 들어, 모델과 직접적인 관련이 없는 데이터를 다룰 때 사용할 수 있습니다.
  2. 커스텀 로직: 복잡한 유효성 검사나 데이터 변환 로직을 추가해야 할 때, 직렬화 및 역직렬화 로직을 직접 작성해야 할 때 사용됩니다.

 

 

커스텀 로직  때문에 이 모델을 serializers.Serializer 활용 하였다.
1. filecheck를 통해 이미지 파일이 선택 되었는지 이미지 url이 데이터로써 들어온건지 파악 하기 위함으로 serializers.Serializer 활용  이런 형태로 커스텀 로직을 위함으로서 활용 하고 있다.

이를 통해 SMS, LMS, MMS 를 구별하여 문자 메시지를 보내고 있다.

ModelSerializer

ModelSerializer는 serializers.Serializer의 서브 클래스로, 모델과 연결된 데이터에 대한 직렬화 및 역직렬화를 단순화하는 데 사용됩니다. 이 클래스는 다음과 같은 장점을 제공합니다:

  1. 모델과의 통합: 모델과의 관계를 자동으로 처리하므로, 모델 필드와 Serializer 필드 사이의 중복을 줄입니다.
  2. 간결성: 코드의 양을 줄여주고 반복적인 작업을 최소화합니다.

예를 들어, 다음은 ModelSerializer를 사용하여 모델과 관련된 직렬화를 하고, 불 필요한 로직의 중복을 줄이고자 하는 예제 이다.

필자는 백 오피스 웹 사이트를 만들고 있기 떄문에 사용자가 스스로 설정 해서 활용 할 수 있도록 하는 구성이 많다.

그래서 중복 되는 로직이 불 필요하게 많아 이를 줄인점을 감안해서 보면 되겠다.

1. Base VIEW

 

 

2. View (Base View 활용)

 

3. Base ModelSerializer


4. ModelSerializer(Base 활용)

 

Model 시리얼 라이저는 위의 사진을 보면, 로직 상당히 간결성을 보장한다.


결론

1. 직렬화(Serialization)와 역직렬화(Deserialization)의 역할

  • ModelSerializer: 모델과 밀접한 관련이 있는 데이터를 직렬화하고 역직렬화할 때 주로 사용됩니다. 모델과 Serializer 사이의 필드 매핑을 자동으로 처리하여 코드의 반복성을 줄여줍니다. 이는 데이터를 모델로 변환하거나 모델을 데이터로 변환할 때 필요한 변환 규칙을 제공합니다.
  • serializers.Serializer: 일반적인 데이터 구조나 특정한 로직을 가진 데이터를 직렬화하고 역직렬화할 때 사용됩니다. 모델과 직접적인 관련이 없는 경우, 또는 데이터를 특정 형식으로 변환하거나 복잡한 유효성 검사 로직이 필요한 경우에 적합합니다.

2. 코드의 간결성과 재사용성

  • ModelSerializer: Django ORM(객체 관계 매핑)과 밀접하게 통합되어 있어, 모델과 Serializer 사이의 데이터 흐름을 간소화합니다. 이는 코드의 양을 줄이고 유지보수를 쉽게 만들어줍니다. 또한, 같은 모델에 대해 여러 Serializer를 정의해야 할 때 재사용성을 높여줍니다.
  • serializers.Serializer: 더 많은 유연성을 제공하며, 커스텀 로직이나 특수한 데이터 변환 작업에 유용합니다. Serializer 클래스를 사용하여 필요한 필드와 로직을 직접 정의할 수 있기 때문에 프로젝트의 요구 사항에 더 적합한 형태로 사용할 수 있습니다.

3. 유효성 검사 및 데이터 변환

  • ModelSerializer: 모델의 필드에 정의된 유효성 검사 규칙을 자동으로 사용하므로, 데이터의 일관성과 정확성을 보장합니다. 또한, 모델에 정의된 데이터 변환 규칙도 자동으로 적용됩니다.
  • serializers.Serializer: 각 필드에 대한 유효성 검사 및 데이터 변환 로직을 직접 구현해야 합니다. 이는 특정한 로직이나 규칙이 필요한 경우에 유용하지만, 반복 작업이 필요하고 실수 가능성이 있습니다.

마무리

위와 같은 차이점들을 고려하여 프로젝트의 요구 사항에 맞게 적절한 Serializer를 선택하는 것이 중요합니다. 대부분의 경우, ModelSerializer는 모델과의 연관성이 높은 경우나 간단한 CRUD(Create, Retrieve, Update, Delete) 작업에 적합하며, serializers.Serializer는 복잡한 데이터 구조나 특수한 로직이 필요한 경우에 유용합니다.

 

마지막으로, 실무 경험을 바탕으로 작성된 이 글은 항상 업데이트되고 발전될 수 있습니다.
또한, 많이 부족한 글이기에 좋게 봐주셨으면 합니다.

감사합니다.

728x90