피드로 돌아가기
Implementing Soft Deletes in SQLAlchemy: Keeping Audit Trails Without Orphaning Foreign Keys in Multi-Tenant Systems
Dev.toDev.to
Database

Referential Integrity를 보장하는 Multi-tenant Soft Delete 패턴 설계

Implementing Soft Deletes in SQLAlchemy: Keeping Audit Trails Without Orphaning Foreign Keys in Multi-Tenant Systems

Ugur Aslim2026년 6월 3일8intermediate

Context

금융 및 의료 데이터의 규제 준수를 위한 Audit Trail 확보 필요성 대두. 단순 Boolean 플래그 방식의 Soft Delete 도입 시 Foreign Key 제약 조건 위반 및 데이터 무결성 훼손이라는 아키텍처적 한계 발생.

Technical Solution

  • Polymorphic Mixin 구조 설계를 통한 모델별 Soft Delete 기능 선택적 부여 및 스키마 일관성 유지
  • Hybrid Property 기반의 필터링 로직 구현으로 Python 및 SQL 컨텍스트 양측에서 동일한 삭제 상태 판별 가능
  • Primaryjoin 조건 설정을 통한 Relationship 로딩 시 삭제된 레코드 자동 배제로 Application 계층의 데이터 정합성 확보
  • Event Listener 도입을 통한 Application 레벨의 Cascade Soft Delete 처리로 DB 수준의 Cascade Delete로 인한 데이터 유실 방지
  • Point-in-time Recovery 쿼리 구현을 통해 특정 시점의 데이터 상태 복구 및 감사 추적 기능 제공

- Soft Delete 적용 시 DB Cascade 설정을 제거하고 SQLAlchemy Event Listener를 통한 논리적 삭제 전파 검토 - Relationship 정의 시 primaryjoin에 deleted_at IS NULL 조건을 명시하여 Zombie Record 참조 차단 - Multi-tenant 환경에서는 deleted_at 외에 deleted_by_user_id를 포함하여 감사 로그의 추적 가능성 확보 - 하이브리드 속성을 활용해 쿼리 인터페이스와 비즈니스 로직 간의 필터링 기준 단일화

원문 읽기