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

47 lines
3.9 KiB
Markdown

---
id: P-REINFORCE-WIKI-DEV-AGGREGATES
title: "애그리거트와 도메인 무결성 보장 (Aggregates)"
category: "10_Wiki/💻 Topics_Dev"
status: verified
canonical_id: ""
aliases: ["Aggregate", "애그리거트", "애그리거트 루트", "클러스터", "데이터 일관성"]
duplicate_of: ""
source_trust_level: A
confidence_score: 1.0
tags: ["DDD", "Data_Integrity", "Modeling", "Transaction_Management", "System_Design"]
raw_sources: ["Datacollector_Export_2026-05-02"]
last_reinforced: 2026-05-02
github_commit: ""
---
# [[애그리거트와 도메인 무결성 보장 (Aggregates)]]
## 1. 개요
애그리거트(Aggregates)는 도메인 주도 설계(DDD)에서 데이터의 변경 단위이자 비즈니스 규칙의 강제 범위를 의미한다. 상호 연관된 엔티티(Entities)와 값 객체(Value Objects)들의 논리적인 묶음으로, 하나의 '루트(Root)' 객체를 통해서만 전체 클러스터의 상태에 접근하고 변경할 수 있게 함으로써 도메인의 복잡성을 관리하고 트랜잭션의 무결성을 보장한다.
## 2. 핵심 규칙 및 구성
- **애그리거트 루트 (Aggregate Root)**: 애그리거트 외부에서 유일하게 직접 참조할 수 있는 객체. 외부 객체는 루트를 거치지 않고 애그리거트 내부 객체를 수정할 수 없다.
- **경계 내 일관성 (In-Boundary Consistency)**: 하나의 애그리거트 내에서는 비즈니스 규칙(Invariant)이 항상 즉각적으로 만족되어야 한다. 데이터베이스 트랜잭션은 대개 하나의 애그리거트 단위로 처리된다.
- **경계 간 결과적 일관성 (Eventual Consistency)**: 서로 다른 애그리거트 간의 일관성은 도메인 이벤트를 통해 비동기적으로(최종적으로) 맞춰진다.
- **ID를 통한 참조**: 애그리거트가 다른 애그리거트를 참조할 때는 객체 직접 참조가 아닌 식별자(ID)를 통한 참조를 권장하여 결합도를 낮춘다.
## 3. 엔지니어링 가치
- **도메인 복잡성 캡슐화**: 시스템의 수많은 객체 사이의 얽힌 관계를 애그리거트라는 뚜렷한 경계로 묶어, 개발자가 한 번에 고려해야 할 상태 변화의 범위를 축소.
- **동시성 제어 및 확장성**: 트랜잭션의 범위를 작고 명확한 애그리거트 단위로 한정하여, 대규모 분산 환경에서 락(Lock) 경합을 줄이고 시스템의 확장성을 높임.
- **비즈니스 규칙 강제**: 루트 객체가 모든 상태 변경 요청을 검증하고 처리하므로, 비즈니스 규칙이 위반된 상태로 데이터가 저장되는 것을 원천적으로 방지.
## 4. 트레이드오프 및 주의사항
- **크기 결정의 어려움**: 애그리거트가 너무 크면 트랜잭션 충돌이 잦아지고 성능이 저하되며, 너무 작으면 비즈니스 규칙을 유지하기 위해 여러 애그리거트를 복잡하게 조율해야 함.
- **객체 지향적 설계와의 충돌**: 객체 간 직접 참조를 지양하고 ID 참조를 사용함에 따라, 도메인 모델 내에서 탐색(Navigation)이 불편해질 수 있음(Repository 호출 필요).
- **학습 및 적용 비용**: 올바른 애그리거트 경계를 식별하기 위해 도메인 전문가와의 심도 있는 분석 과정과 설계 숙련도가 요구됨.
## 5. 지식 연결 (Related)
- [[Domain_Driven_Design]]: 애그리거트 패턴이 제안된 배경인 설계 방법론.
- [[Bounded_Context]]: 애그리거트가 정의되고 활동하는 상위의 논리적 경계.
- [[Event_Driven_Architecture]]: 애그리거트 간의 협력을 위해 주로 사용되는 비동기 아키텍처 스타일.
## 🧪 검증 상태 (Validation)
- **정보 상태**: 검증 완료 (Verified)
- **출처 신뢰도**: A
- **검토 이유**: 데이터의 무결성과 비즈니스 규칙을 보장하면서 시스템의 복잡성을 효과적으로 관리하기 위한 DDD 핵심 전술적 패턴 정립.