3. 애그리거트

1. 정의

  • 단일 단위로 취급되는 도메인 객체의 클러스터
  • 애그리거트 루트와 기타 연결된 객체로 구성된다.
  • 애그리거트 루트는 애그리거트의 무결성을 유지하고 연결된 객체의 동작 및 상태를 캡슐화 한다.

2. 목적

  • 응집성 있는 도메인 개념을 중심으로 경계와 트랜잭션을 설정하는 것이다.
  • 관련 객체를 애그리거트로 그룹화하고 애그리거트 루트를 지정하면 애그리거트의 대한 변경이 원자 단위로 수행되고 애그리거트 상태가 일관되게 유지할 수 있다.

3. 특성

  • 경계 :
    • 관련 도메인 객체 애그리거트에 대한 명확한 경계를 정의한다.
    • 내부 상태와 동작을 캡슐화하여 상호 작용하는 객체의 복잡성을 외부 세계로 숨긴다.
  • 일관성
    • 애그리거트 경계 내에서 불변성, 비즈니스 규칙 및 데이터 유효성을 유지하며 일관성을 보장
    • 애그리거트에 대한 작업은 함께 성공하거나 실패해야 하며 이를 통해서 무결성을 보장한다.
  • 트랜잭션성
    • 애그리거트는 일반적으로 트랜잭션 경계 내에서 단일 작업 단위로 취급된다.
    • 애그리거트 및 관련 객체에 대해 수행되는 모든 수정은 원자적이어야 한다.
  • 애그리거트 루트
    • 모든 애그리거트에는 진입점으로 애그리거트 루트가 있다.
    • 루트는 동작을 조장하고 애그리거트의 수명 주기를 관리하는 엔티티 역할을 한다.
  • 직접 액세스
    • 경계 외부의 객체는 애그리거트 루트만 참조할 수 있으므로 내부 객체에 대한 액세스를 제어할 수 있다.

4. 설계

  • 일관성
    • 애그리거트 내의 객체는 강력한 관계와 공유 수명 주기를 가져야 한다.
    • 일관성이 있으며 단일 비즈니스 개념을 나타내야 한다.
  • 일관성 경계
    • 애그리거트 내에서 변경된 내용이 애그리거트 불변성 또는 무결성 제약조건을 위반해서는 안된다.
  • 애그리거트 루트
    • 애그리거트에 액세스하기 위한 기본 진입점 역할을 하는 애그리거트 루트를 식별
  • 애그리거트 무결성
    • 애그리거트 상태에 대한 모든 변경이 항상 애그리거트 루트를 통해서 이뤄지게 한다.
    • 비즈니스 규칙 및 일관성 검사가 적용되도록 보장할 수 있다.
  • 세분성
    • 애그리거트는 일관성을 유지할 수 있을 만큼 충분히 크되, 병렬 개발 및 확장성이 가능하도록 충분히 작아야 한다.