[architecture Series Ddd] 03.03.aggregate
February 18, 2025
3. 애그리거트
1. 정의
- 단일 단위로 취급되는 도메인 객체의 클러스터
- 애그리거트 루트와 기타 연결된 객체로 구성된다.
- 애그리거트 루트는 애그리거트의 무결성을 유지하고 연결된 객체의 동작 및 상태를 캡슐화 한다.
2. 목적
- 응집성 있는 도메인 개념을 중심으로 경계와 트랜잭션을 설정하는 것이다.
- 관련 객체를 애그리거트로 그룹화하고 애그리거트 루트를 지정하면 애그리거트의 대한 변경이 원자 단위로 수행되고 애그리거트 상태가 일관되게 유지할 수 있다.
3. 특성
- 경계 :
- 관련 도메인 객체 애그리거트에 대한 명확한 경계를 정의한다.
- 내부 상태와 동작을 캡슐화하여 상호 작용하는 객체의 복잡성을 외부 세계로 숨긴다.
- 일관성
- 애그리거트 경계 내에서 불변성, 비즈니스 규칙 및 데이터 유효성을 유지하며 일관성을 보장
- 애그리거트에 대한 작업은 함께 성공하거나 실패해야 하며 이를 통해서 무결성을 보장한다.
- 트랜잭션성
- 애그리거트는 일반적으로 트랜잭션 경계 내에서 단일 작업 단위로 취급된다.
- 애그리거트 및 관련 객체에 대해 수행되는 모든 수정은 원자적이어야 한다.
- 애그리거트 루트
- 모든 애그리거트에는 진입점으로 애그리거트 루트가 있다.
- 루트는 동작을 조장하고 애그리거트의 수명 주기를 관리하는 엔티티 역할을 한다.
- 직접 액세스
- 경계 외부의 객체는 애그리거트 루트만 참조할 수 있으므로 내부 객체에 대한 액세스를 제어할 수 있다.
4. 설계
- 일관성
- 애그리거트 내의 객체는 강력한 관계와 공유 수명 주기를 가져야 한다.
- 일관성이 있으며 단일 비즈니스 개념을 나타내야 한다.
- 일관성 경계
- 애그리거트 내에서 변경된 내용이 애그리거트 불변성 또는 무결성 제약조건을 위반해서는 안된다.
- 애그리거트 루트
- 애그리거트에 액세스하기 위한 기본 진입점 역할을 하는 애그리거트 루트를 식별
- 애그리거트 무결성
- 애그리거트 상태에 대한 모든 변경이 항상 애그리거트 루트를 통해서 이뤄지게 한다.
- 비즈니스 규칙 및 일관성 검사가 적용되도록 보장할 수 있다.
- 세분성
- 애그리거트는 일관성을 유지할 수 있을 만큼 충분히 크되, 병렬 개발 및 확장성이 가능하도록 충분히 작아야 한다.