피드로 돌아가기
Persisting One Aggregate Across Multiple Tables, ORM-Agnostic
Dev.toDev.to
Backend

Aggregate 단위 Transactional Save를 통한 데이터 일관성 확보

Persisting One Aggregate Across Multiple Tables, ORM-Agnostic

Gabriel Anhaia2026년 6월 13일10intermediate

Context

하나의 Aggregate가 여러 테이블에 분산 저장되는 구조에서 개별 Row 단위의 저장 로직으로 인한 Partial Commit 문제 발생. 이로 인해 데이터 정합성이 깨진 불완전한 상태의 데이터가 DB에 잔존하는 아키텍처적 한계 노출.

Technical Solution

  • Aggregate를 단일 일관성 경계(Consistency Boundary)로 정의하여 도메인 모델 내에서 불변성(Invariants)을 강제하는 구조 설계
  • OrderRepository 인터페이스를 통한 저장소 추상화로 도메인 레이어에서 DB 테이블 구조 및 ORM 의존성 제거
  • 단일 Transaction 내에서 'Delete-then-Insert' 전략을 사용하여 자식 엔티티의 상태를 원자적으로 갱신하는 Write Path 구현
  • Eager Loading 방식을 채택하여 Proxy 객체 없이 Aggregate 전체를 메모리에 로드함으로써 Read Path의 예측 가능성 확보
  • TransactionRunner 포트를 도입하여 여러 Aggregate를 동시에 저장해야 하는 Unit of Work 상황에 대응하는 트랜잭션 범위 확장 전략 적용

1. 하나의 Aggregate당 하나의 Repository를 매핑했는가

2. Repository의 save 메서드가 내부적으로 단일 Transaction을 보장하는가

3. 도메인 엔티티가 테이블 이름이나 ORM 특성에 의존하고 있지 않은가

4. Lazy Loading으로 인한 N+1 문제나 예기치 못한 쿼리 발생 가능성을 제거했는가

원문 읽기