애그리거트(Aggregate)란?
애그리거트는
관련된 객체들의 집합을 하나의 단위로 취급하는 패턴입니다.
즉, 도메인 모델에서 밀접하게 관련된 객체들의 집합을 의미합니다. 이는 복잡한 도메인을 더 작고 관리하기 쉬운 단위로 나누는 데 도움을 줍니다.
애그리거트의 주요 목적
- 도메인 모델의 복잡성 감소
- 데이터 일관성 유지
- 트랜잭션 경계 정의
애그리거트의 구조
애그리거트는 다음과 같은 구조로 이루어져 있습니다
- 애그리거트 루트: 애그리거트의 대표 엔티티로, 외부에서 애그리거트에 접근할 수 있는 유일한 진입점입니다.
- 엔티티: 고유한 식별자를 가진 객체들입니다.
- 값 객체: 식별자가 없고 불변성을 가진 객체들입니다.
애그리거트 설계 원칙
- 불변식 보호: 애그리거트 내부의 모든 불변식(invariants)은 항상 일관된 상태를 유지해야 합니다.
- 작은 크기 유지: 애그리거트는 가능한 작게 설계하여 성능과 확장성을 개선합니다.
- ID를 통한 참조: 다른 애그리거트를 참조할 때는 ID를 사용합니다.
- 트랜잭션 경계: 하나의 트랜잭션에서는 하나의 애그리거트만 수정해야 합니다.
애그리거트 구현 전략
애그리거트를 효과적으로 구현하기 위해 다음 전략들을 사용할 수 있습니다
- 캡슐화: 애그리거트 내부 상태는 루트를 통해서만 변경 가능하도록 합니다.
- 도메인 이벤트 사용: 애그리거트 간 통신에는 도메인 이벤트를 활용합니다.
- 리포지토리 패턴: 애그리거트의 저장과 조회에는 리포지토리 패턴을 사용합니다.