Enum과 TypedDict를 활용해 문서 가독성 높이기
API 문서의 가독성을 높이기 위해 Python의 Enum과 TypedDict를 활용하여 매직 스트링을 제거하고 복잡한 딕셔너리 구조를 명확하게 정의하는 방법
Enum으로 매직 스트링 제거
매직 스트링 문제점
오타 발생 가능성
의미 파악의 어려움
유지보수의 어려움
Django 모델에 Enum 적용
from django.db import models
class Order(models.Model):
class OrderStatus(models.TextChoices):
PENDING = "PENDING", "주문 대기"
PAID = "PAID", "결제 완료"
SHIPPING = "SHIPPING", "배송 중"
COMPLETED = "COMPLETED", "배송 완료"
CANCELED = "CANCELED", "주문 취소"
status = models.CharField(
max_length=10,
choices=OrderStatus.choices,
default=OrderStatus.PENDING
)TypedDict로 복잡한 Dict 구조 명확화
문제 상황: SerializerMethodField가 반환하는 dict 구조를 알 수 없음
해결 방법: TypedDict와 @extend_schema_field 활용
from typing import TypedDict
from drf_spectacular.utils import extend_schema_field
class ActivitySummaryDict(TypedDict):
last_login_at: str
post_count: int
comment_count: int
class UserStatsSerializer(serializers.ModelSerializer):
activity_summary = serializers.SerializerMethodField()
@extend_schema_field(ActivitySummaryDict)
def get_activity_summary(self, obj) -> ActivitySummaryDict:
return {
"last_login_at": obj.last_login,
"post_count": obj.posts.count(),
"comment_count": obj.comments.count(),
}사용 기준
Enum: 미리 정의된 선택지 그룹 (상태, 타입, 카테고리)
TypedDict: 정해진 구조의 딕셔너리 데이터
주의사항: TypedDict는 런타임 강제가 아닌 정적 타입 검사와 문서화를 위한 도구
Last updated
