Django4 Django 다중 서버 환경 동시성 제어하기(select_for_update/redis lock) 다중 서버 인스턴스 환경에서 하나의 데이터베이스 row에 여러 서버가 동시에 접근할 경우 Race condition이 발생할 수 있습니다. 예를 들어, 한정된 수량의 시리얼번호를 요청 순서대로 발급하는 시스템을 구축한다고 가정해 보겠습니다.이때, 동시에 여러 사용자가 동시에 요청하면 중복 발급이 발생할 가능성이 있습니다.from django.db import modelsclass SerialNumber(models.Model): id = models.CharField(max_length=32, unique=True) is_used = models.BooleanField(default=False) created_date = DateTimeField(auto_now_add=True)다음은 간.. 2025. 2. 23. Django에서 JSON 파일로 동적 상수 클래스를 생성하기 서버 개발을 진행하면서 특정한 상태 코드, 카테고리, 코드 값 등을 상수(Enum) 형태로 정의하는 경우가 많습니다. 예를 들어, 동물의 번호를 관리하는 Enum을 아래와 같이 정의할 수 있습니다.from enum import IntEnumclass AnimalNumberEnum(IntEnum): ALLIGATOR = 1 BEAR = 2 CAT = 3 DOG = 4 ELEPHANT = 5 ... 하지만 새로운 상수를 추가하거나 기존 값을 변경할 때마다 하드코딩을 수정해야 하고, 변경된 내용을 배포해야 하는 불편함이 있습니다. 이러한 방식은 유지보수 비용을 증가시키고, 관리의 어려움을 줄 수 있습니다. 이러한 문제를 해결하기 위해 JSON 파일을 활용하여 별도로 상수에 활용.. 2025. 2. 1. Django TextChoices로 상수 관리하기 EnumPython에서 열거형 상수를 관리할 때 Enum 클래스를 자주 사용합니다. from enum import Enumclass StatusEnum(Enum): PENDING = "Pending" APPROVED = "Approved" REJECTED = "Rejected" Enum을 사용했을 때의 장점 • 코드 가독성 향상: 상수를 그룹화하여 일관된 코드를 작성 • 구조적 관리 가능: 열거형을 통해 상수로 관리하므로 코드의 유지보수성을 높임 하지만 Enum 클래스에는 몇 가지 단점이 있습니다. 1. value 속성을 통해 값에 접근해야 함Python Enum에서 열거형 멤버는 객체로 동작하며 내부적으로 이름(name)과 값(value)을 속성으로 가지고 있습니다.따라서 실제 값에 .. 2025. 1. 5. FieldTracker와 Signals를 활용한 Django 모델 변경 로그 관리 django에서 모델 데이터 변경이력을 관리할 때는 주로 simple history를 사용합니다.simple history: https://django-simple-history.readthedocs.io/en/latest/simple history를 사용하면 쉽게 데이터 이력을 관리할 수 있지만, 변경이 잦을 경우 데이터가 지나치게 많이 쌓여 DB 리소스 낭비와 조회 속도 저하 등의 문제점이 있습니다.FieldTracker와 Signal을 사용하여 더 효율적으로 변경 이력을 관리할 수 있습니다.FieldTrackerFieldTracker는 모델의 특정 필드의 변경 사항을 추적하는 유틸성 필드입니다.FieldTracker는 django-model-utils 패키지에서 제공됩니다.from django.d.. 2024. 12. 29. 이전 1 다음