
애그리거트 (Aggregate)
- 도메인 주도 개발 DDD에 소개된 도메인 모델 구성 요소/패턴의 하나이다
- 데이터 변경의 목적을 위해 하나의 단위로 취급되는 연관된 객체들의 클러스터이다
- 루트 root와 경계 boundary를 가진다
- 경계 내부에는 엔티티와 값 객체가 하나 또는 여러 개가 존재할 수 있다
- 애그리거트 루트는 내부에 포함된 단일 엔티티이다
애그리거트의 특징
- 데이터 변경 시 하나의 단위로 취급: 데이터 변경의 일관성을 유지한다
- 루트를 통한 접근 제어: 외부 객체는 루트 엔티티에만 참조를 가질 수 있다
- 데이터 일관성 유지:
- 경계 내의 어떤 변경 사항이 있을 때 전체 애그리그트의 모든 불변식이 충족되어야 한다
- 애그리거트를 넘어서는 불변식은 이벤트나 배치 등을 통해 특정 시간 내에 해결할 수 있다
- 검색 및 접근 방식: 리포지토리를 통해서 애그리거트 루트만 직접 얻을 수 있다
- 내부 엔티티는 루트로부터 연관관계를 통해서 접근한다
- 생명주기 관리 캡슐화: Factory와 Repository를 이용해서 객체들을 생명주기에 걸쳐 체계적이 고 의미있는 단위로 조작
애그리거트의 목
- 일관성 유지: 객체 그룹에 적용되는 불변식을 유지하는 수단
- 이해 용이성: 객체의 시작과 끝을 명확히 해서 모델을 더 쉽게 이해하게 한다
- 트랜잭션 및 동시성 관리: 트랜잭션 범위와 데이터 일관성 유지 방법 제공
- 모델 단순화: 연관 관계 탐색을 제한하고 루트를 통해서만 접근하도록 해준다