소개
Settings

Chats

애그리게이트를 나누는 방법

2
애그리게이트DDD설계

개요

이 문서는 애그리게이트의 크기와 경계를 설정하는 방법을 정리한 것이다.

서론

애그리게이트(Aggregate) 는 하나의 단위로 취급되는 도메인 객체들의 집합이다. 애그리게이트를 어떻게 나누느냐에 따라 시스템 성능이 달라지기 때문에, 이를 잘 나누는 것은 매우 중요하다.

이 문서에서는 애그리게이트를 효과적으로 나누는 방법을 설명한다.

애그리게이트를 나누는 방법

애그리게이트를 나눌 때는 가능한 한 최소 단위로 나누는 것이 좋다. 하지만 단순히 최소 크기만을 기준으로 하기보다, 도메인 불변 조건, 시스템 처리 능력, 동기화 요구사항 등을 함께 고려해 결정해야 한다.

트랜잭션 일관성 경계

트랜잭션 일관성 경계의 목적은 변경 작업이 일관된 상태를 유지하도록 보장하는 것이다.

다음 체크리스트를 통해 경계를 판단할 수 있다:

  • 이 객체들의 변경은 반드시 한 번에 커밋되어야 하는가?
  • 한 트랜잭션에서 변경되지 않으면 도메인 규칙이 깨지는가?

예시: 쇼핑 시스템에서 OrderOrderLineItem은 반드시 함께 저장되어야 한다. 이 경우 두 객체는 동일한 애그리게이트에 속한다.

비즈니스 불변 조건

도메인 규칙이 항상 만족되도록 보장해야 한다. 도메인 규칙에 필수적인 객체들은 동일한 애그리게이트에 포함시킨다.

동시성 및 접근 빈도

처리량을 높이고 충돌 가능성을 줄이기 위해 자주 접근하거나 함께 갱신되는 객체들을 같은 애그리게이트에 배치한다.

라이프사이클 응집도

수명 주기가 동일한 객체들은 동일한 애그리게이트에 포함시킨다.

참조와 탐색

애그리게이트 간의 의존성을 최소화하기 위해 참조와 탐색 경로를 제한하여 독립성을 유지한다.

강한 일관성과 최종 일관성

성능과 확장성의 균형을 맞추는 것이 중요하다. 경우에 따라 관련 객체는 즉시 업데이트할 필요가 없으며, 이벤트나 메시지를 통해 나중에 동기화할 수 있다.

마무리

애그리게이트 경계를 정의하는 일은 복잡하고 간단하지 않다. 하지만 경계를 잘 나눌수록 시스템 성능이 향상되므로, 애그리게이트 설계에 시간을 투자하는 것은 결코 낭비가 아니다.