logo
Django

Django 효율적인 모델 관리하기: Manager 활용법

2024.11.29개발팀장ㅣDerek

 

Django는 Python으로 작성된 웹 프레임워크로, 개발자들이 더 빠르고 효율적으로 웹 애플리케이션을 구축할 수 있도록 돕습니다. 특히 Django의 ORM(Object Relational Mapping)은 데이터베이스와 상호작용을 간단하고 직관적으로 처리할 수 있는 강력한 도구입니다. 하지만 프로젝트 규모가 커지고 복잡도가 높아질수록, 모델 관리를 효율적으로 구성하는 것이 더욱 중요해집니다.

 

이번 글에서는 Django 프로젝트에서 Base Model 활용, Soft Delete 구현, Manager 커스터마이징이라는 세 가지 핵심 방법을 통해 모델을 효율적으로 관리하는 팁을 알려드릴게요. 이를 통해 프로젝트를 더 깔끔하고 유지보수하기 쉽게 만들 수 있습니다. 🚀


 

🔨 Base Model로 반복 코드를 줄이기

 

 

💡 Base Model이란?

 

 

Base Model은 여러 모델에서 공통으로 사용되는 필드와 로직을 하나의 **추상 모델(Abstract Model)**로 정의하는 방식입니다. 이를 활용하면 반복 코드를 줄이고 프로젝트의 일관성을 유지할 수 있습니다.

 

예를 들어, 많은 프로젝트에서 created_at(생성 시간)과 updated_at(수정 시간)을 포함하는 경우가 많습니다. 이를 Base Model로 정의해볼까요?

 

✅ 구현 방법: Created At, Updated At 필드 추가

 

 

from django.db import models

class BaseModel(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        abstract = True

 

 

이제 다른 모델에서 BaseModel을 상속받아 사용할 수 있습니다.

 

 

class Product(BaseModel):
    name = models.CharField(max_length=255)
    price = models.DecimalField(max_digits=10, decimal_places=2)

 

 

Base Model 활용의 장점

  • 중복 코드 제거: 모든 모델에서 created_atupdated_at 필드를 반복해서 정의할 필요가 없습니다.
  • 일관성 유지: 공통 로직을 한 곳에서 관리할 수 있어 유지보수가 용이합니다.

 

 


 

 

🛠 Soft Delete로 데이터 무결성 유지

 

💡 Soft Delete란?

 

 

Soft Delete는 데이터를 삭제할 때 실제로 데이터베이스에서 제거하지 않고, 삭제 상태를 나타내는 필드(예: is_deleted)를 업데이트하는 방식입니다. 이렇게 하면 삭제된 데이터를 복구하거나 감사(Audit) 목적으로 보관할 수 있습니다.

 

 

✅ 구현 방법: Soft Delete 적용

 

1. is_deleted 필드 추가

Soft Delete를 지원하는 추상 모델을 만들어봅시다.

 

 

class SoftDeleteModel(BaseModel):
    is_deleted = models.BooleanField(default=False)

    class Meta:
        abstract = True

 

 

2. delete() 메서드 커스터마이징

 

데이터를 실제로 삭제하지 않고 is_deleted 값을 True로 변경합니다.

 

 

class Product(SoftDeleteModel):
    name = models.CharField(max_length=255)

    def delete(self, using=None, keep_parents=False):
        self.is_deleted = True
        self.save()

 

]3. Manager를 활용해 삭제되지 않은 데이터만 조회

 

Soft Delete를 구현할 때 Manager를 커스터마이징하면 더욱 효율적으로 데이터를 관리할 수 있습니다.

 

 

class SoftDeleteQuerySet(models.QuerySet):
    def delete(self):
        self.update(is_deleted=True)

class SoftDeleteManager(models.Manager):
    def get_queryset(self):
        return super().get_queryset().filter(is_deleted=False)

class Product(SoftDeleteModel):
    name = models.CharField(max_length=255)

    objects = SoftDeleteManager.from_queryset(SoftDeleteQuerySet)()

 

 

Soft Delete 활용의 장점

 

  • 데이터 복구 가능: 삭제된 데이터를 쉽게 복원할 수 있습니다.
  • 감사(Audit) 용도: 삭제 기록을 남겨 데이터베이스의 무결성을 유지합니다.
  • 안전성 향상: 실수로 데이터를 완전히 삭제하는 것을 방지합니다.

 


 

 

🎛 Manager 활용으로 데이터 접근 최적화

 

💡 Manager란?

 

Django의 Manager는 데이터베이스 쿼리를 처리하는 인터페이스 역할을 합니다. 이를 커스터마이징하면 모델별로 데이터 접근 방식을 최적화할 수 있습니다.

 

✅ 예제: Active 데이터만 조회하기

 

is_active 필드와 available_at 필드를 기반으로, 활성화된 데이터만 조회하는 Manager를 만들어보겠습니다.

 

 

from django.utils import timezone

class ActiveManager(models.Manager):
    def active(self):
        return self.get_queryset().filter(is_active=True, available_at__lte=timezone.now())

class Product(BaseModel):
    name = models.CharField(max_length=255)
    is_active = models.BooleanField(default=True)
    available_at = models.DateTimeField()

    objects = ActiveManager()

# 사용법
active_products = Product.objects.active()

 

 

Manager 활용의 장점

 

  • 코드 재사용성: 특정 조건의 쿼리를 반복 작성할 필요가 없습니다.
  • 가독성 향상: 데이터를 명확하고 직관적으로 조회할 수 있습니다.
  • 유지보수 용이: 필터링 조건이 변경되더라도 Manager에서 한 번만 수정하면 됩니다.

 


📝 요약하자면,

 

 

Django에서 효율적인 모델 관리는 프로젝트의 성공과 유지보수성에 직결됩니다. 이번 글에서 소개한 Base Model 활용, Soft Delete 구현, Manager 커스터마이징 세 가지 방법은 프로젝트를 더 구조적이고 효율적으로 만드는 데 큰 도움이 됩니다.

 

 

  • Base Model은 반복적인 코드를 줄여 일관성과 재사용성을 높여줍니다.
  • Soft Delete는 데이터를 안전하게 관리하고 삭제 기록을 남길 수 있는 방법입니다.
  • Manager 커스터마이징은 데이터 접근 방식을 최적화하여 코드 가독성과 유지보수성을 향상시킵니다.

 

이제 여러분의 Django 프로젝트에 위의 팁들을 적용해보세요! 코드는 더 깔끔해지고, 작업 속도도 한층 빨라질 것입니다. 🖥✨

 

 


 

 

❓ Q&A

 

Q1. Soft Delete를 사용하면 데이터베이스 성능에 영향을 주지 않나요?

 

Soft Delete는 데이터가 물리적으로 삭제되지 않기 때문에 테이블 크기가 커질 수 있습니다. 따라서 정기적으로 데이터 아카이빙(Archiving)이나 최적화 작업을 수행하는 것이 좋습니다.

 

Q2. Manager 커스터마이징은 필수인가요?

 

필수는 아니지만, 데이터 접근 로직이 반복되거나 특정 조건이 항상 필요하다면 Manager를 커스터마이징하는 것이 효율적입니다.

 

Q3. Base Model의 추상 클래스와 일반 모델의 차이는 무엇인가요?

 

Base Model은 abstract = True로 설정된 추상 클래스이기 때문에 데이터베이스 테이블로 생성되지 않습니다. 반면 일반 모델은 테이블로 생성됩니다.

 

추천컬럼

추천컬럼 이미지

상위1%의 결과물을 얻으려면 이런 관점으로 봐야합니다.

2024.09.20
추천컬럼 이미지

200건 이상 프로젝트 성공으로 실력이 검증된 개발 회사?

2024.09.20

상담만 받아보셔도 좋습니다 긱다이브의 상담으로 업체 비교를 시작해보세요

CONTACT US