피드로 돌아가기
An Ash-Inspired DDD Framework for Python: Derive Everything from the Domain Model
Dev.toDev.to
Backend

단일 Domain Model 기반 Persistence 및 Durable Execution 자동 파생 프레임워크 설계

An Ash-Inspired DDD Framework for Python: Derive Everything from the Domain Model

Sahil Pohare2026년 5월 24일15advanced

Context

비즈니스 로직보다 SQLAlchemy 모델, Repository, Tenant 필터링 등 인프라 연결 코드가 비대해지는 Glue Code 문제 발생. 도메인 객체 정의 후 반복적인 인프라 계층 구현으로 인한 개발 효율성 저하 및 휴먼 에러 가능성 증대.

Technical Solution

  • ResourceMeta 메타클래스를 통한 SQLAlchemy 모델, Upsert Repository, Restate VirtualObject의 런타임 자동 생성
  • Meta.tenant_scoped 설정을 통한 Postgres RLS(Row Level Security) 기반의 구조적 Tenant Isolation 강제
  • ActionKind 정의를 통해 DB 작업(Insert/Upsert/Delete)과 Restate Handler의 동시성 제어(Exclusive/Shared) 전략을 일원화
  • 도메인 로직 내 I/O 금지 원칙과 ActionContext를 활용한 Effect 기반의 사이드 이펙트 데이터화 및 비동기 실행 분리
  • Restate의 저널링 기반 Replay 메커니즘을 통해 DB 쓰기 완료 후 Effect 실행의 원자성 및 Idempotency 보장

1. 도메인 모델 내부에 DB 쿼리나 외부 API 호출 등 I/O 로직이 포함되어 있는지 검토

2. Tenant 격리를 애플리케이션 레벨의 필터링이 아닌 DB RLS 수준에서 강제할 수 있는지 분석

3. 분산 트랜잭션 대신 '상태 저장 DB + 실행 저널링(Restate 등)' 조합을 통한 최종 일관성 확보 방안 고려

4. 반복되는 Repository 패턴의 Boilerplate를 메타 프로그래밍이나 코드 제너레이션으로 자동화 가능한지 판단

원문 읽기