[DDD] : 도메인 주도 설계의 애그리거트(Aggregate)

애그리거트(Aggregate)란?

애그리거트는

관련된 객체들의 집합을 하나의 단위로 취급하는 패턴입니다.

즉, 도메인 모델에서 밀접하게 관련된 객체들의 집합을 의미합니다. 이는 복잡한 도메인을 더 작고 관리하기 쉬운 단위로 나누는 데 도움을 줍니다.

애그리거트의 주요 목적

  1. 도메인 모델의 복잡성 감소
  2. 데이터 일관성 유지
  3. 트랜잭션 경계 정의

애그리거트의 구조

애그리거트는 다음과 같은 구조로 이루어져 있습니다

  • 애그리거트 루트: 애그리거트의 대표 엔티티로, 외부에서 애그리거트에 접근할 수 있는 유일한 진입점입니다.
  • 엔티티: 고유한 식별자를 가진 객체들입니다.
  • 값 객체: 식별자가 없고 불변성을 가진 객체들입니다.

애그리거트 설계 원칙

  • 불변식 보호: 애그리거트 내부의 모든 불변식(invariants)은 항상 일관된 상태를 유지해야 합니다.
  • 작은 크기 유지: 애그리거트는 가능한 작게 설계하여 성능과 확장성을 개선합니다.
  • ID를 통한 참조: 다른 애그리거트를 참조할 때는 ID를 사용합니다.
  • 트랜잭션 경계: 하나의 트랜잭션에서는 하나의 애그리거트만 수정해야 합니다.

애그리거트 구현 전략

애그리거트를 효과적으로 구현하기 위해 다음 전략들을 사용할 수 있습니다

  1. 캡슐화: 애그리거트 내부 상태는 루트를 통해서만 변경 가능하도록 합니다.
  2. 도메인 이벤트 사용: 애그리거트 간 통신에는 도메인 이벤트를 활용합니다.
  3. 리포지토리 패턴: 애그리거트의 저장과 조회에는 리포지토리 패턴을 사용합니다.