Files
2nd/10_Wiki/Topics_Dev/DDD_Aggregates.md
T

45 lines
3.1 KiB
Markdown

---
id: P-REINFORCE-WIKI-ARCH-DDD-AGGREGATES
title: "애그리거트 패턴과 데이터 일관성 (DDD Aggregates)"
category: Dev
status: verified
canonical_id: ""
aliases: ["애그리거트", "Aggregate", "애그리거트 루트", "일관성 경계"]
duplicate_of: ""
source_trust_level: A
confidence_score: 1.0
tags: ["DDD", "Architecture", "Consistency", "Transaction", "Tactical_Design"]
raw_sources: ["Datacollector_Export_2026-05-02"]
last_reinforced: 2026-05-02
github_commit: ""
---
# [[애그리거트 패턴과 데이터 일관성 (DDD Aggregates)]]
## 1. 개요
애그리거트(Aggregate)는 도메인 주도 설계(DDD)의 전술적 설계(Tactical Design) 패턴 중 하나로, 데이터 변경의 단위로 취급될 수 있는 연관된 도메인 객체(엔티티와 값 객체)의 클러스터를 의미한다. 애그리거트는 내부 객체들 간의 비즈니스 규칙(Invariants)을 유지하고 트랜잭션의 일관성 경계를 정의하는 역할을 한다.
## 2. 핵심 구성 및 원칙
- **애그리거트 루트 (Aggregate Root)**: 외부에서 애그리거트 내부로 접근할 수 있는 유일한 관문. 모든 상태 변경은 루트를 통해서만 이루어지며, 루트는 전체 클러스터의 일관성을 책임진다.
- **일관성 경계**: 하나의 트랜잭션 내에서는 하나의 애그리거트만 수정되는 것을 권장한다. 다른 애그리거트의 상태 변경은 도메인 이벤트를 통한 결과적 일관성(Eventual Consistency)으로 처리한다.
- **객체 캡슐화**: 루트가 아닌 내부 엔티티는 외부에서 직접 참조하거나 수정할 수 없으며, 루트를 통한 간접 호출만 허용된다.
## 3. 실전 적용 가치
- **트랜잭션 단순화**: 복잡한 비즈니스 로직에서도 일관성이 유지되어야 하는 데이터 범위를 명확히 획정함으로써 데이터 오염 방지.
- **도메인 모델의 응집도 향상**: 논리적으로 밀접하게 연관된 객체들을 하나로 묶어 비즈니스 개념을 명확하게 표현.
- **성능 및 확장성**: 애그리거트 단위를 작게 유지함으로써 트랜잭션 충돌을 최소화하고 분산 시스템(마이크로서비스)으로의 전환 용이성 확보.
## 4. 트레이드오프 및 주의사항
- **설계 난이도**: 비즈니스 규칙을 완벽히 이해해야 적절한 애그리거트 경계를 설정할 수 있음. 너무 크면 성능 저하와 락(Lock) 경합이 발생하고, 너무 작으면 일관성 유지가 어려움.
- **식별성 관리**: 애그리거트 간의 참조는 식별자(ID)를 통해서만 이루어져야 하며, 메모리상의 직접 참조는 지양해야 함.
## 5. 지식 연결 (Related)
- [[Domain_Driven_Design]]: 애그리거트가 속한 상위 설계 방법론.
- [[Event_Storming]]: 애그리거트를 도출하기 위한 실천적 워크샵.
- [[Bounded_Context]]: 애그리거트가 존재하고 유효성을 가지는 논리적 공간.
## 🧪 검증 상태 (Validation)
- **정보 상태**: 검증 완료 (Verified)
- **출처 신뢰도**: A
- **검토 이유**: 데이터 무결성과 트랜잭션 일관성을 보장하는 전술적 설계의 핵심 패턴 정립.