본문 바로가기
프레임워크/FastAPI

FastAPI - Auditing Base Model 로 중복 코드 제거하기

by 데브조이 2025. 8. 16.
반응형

개요

회사에서 진행하는 프로젝트에서 모든 테이블에 Audit 목적의 생성일, 수정일 컬럼을 추가하고있다. 이에 따라 SQLAlchemy Model 에도 멤버 변수를 추가해주고 있는데, 매번 작성하려니 번거롭고 중복 코드가 발생하여 개선한 기록을 작성해보고자 한다.

회사 코드를 그대로 유출할 수 없기 때문에, 작성한 코드는 다른 예제로 변환하여 작성하였다. 


개발 환경

  • python 3.10
  • fastapi 0.104.1
  • sqlalchemy 2.0.39

Auditing Base Model 

프로젝트의 공통적인 감사 정보(Audit fields)를 담는 기본 엔티티 모델을 의미한다.
created_at, updated_at, deleted_at 등의 정보를 생각해볼 수 있다.

다른 모델들이 Auditing Base Model을 상속하여 공통 감사 정보를 포함하도록 할 수 있다.


필요성

  • 공통 필드 재사용(중복 제거): 모든 엔티티 클래스에 동일한 필드를 반복 작성할 필요 없다.
  • 유지보수 용이: Audit 규칙 바뀌면 Base 클래스만 수정하면 전체 적용 가능하다.
  • 엔티티 변경 이력 관리: 엔티티 수정 이력 확인에 용이하다(추적성과 책임성).

구현 예시

from datetime import datetime

from sqlalchemy import DateTime, func
from sqlalchemy.orm import DeclarativeBase
from sqlalchemy.orm import mapped_column, Mapped


# -------------------------------------------------------------
# Auditing Base Model
# -------------------------------------------------------------
class Base(DeclarativeBase):
    _created_at: Mapped[datetime] = mapped_column(name="created_at", type_=DateTime, nullable=False, default=func.current_timestamp(), comment='생성일')
    _updated_at: Mapped[datetime] = mapped_column(name="updated_at", type_=DateTime, nullable=False, default=func.current_timestamp(), onupdate=func.current_timestamp(), comment='수정일')

    @property
    def created_at(self) -> datetime:
        return self._created_at

    @property
    def updated_at(self) -> datetime:
        return self._updated_at

 

 

 

 

 

반응형