45 lines
3.2 KiB
Markdown
45 lines
3.2 KiB
Markdown
---
|
|
id: P-REINFORCE-WIKI-ARCH-DDD-AGGREGATES
|
|
title: "애그리거트 패턴과 데이터 일관성 (DDD Aggregates)"
|
|
category: "10_Wiki/🏗️ Topics_Arch"
|
|
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
|
|
- **검토 이유**: 데이터 무결성과 트랜잭션 일관성을 보장하는 전술적 설계의 핵심 패턴 정립.
|