DDD - Aggregate (애그리거트)
23 May 2022 | Architecture DDDAggregate (어그리거트)
애그리거트는 복잡한 도메인 객체 모델을 전반적인 구조나 큰 수준에서 관계를 파악하기 쉬운 단위로 묶어준다. 아래 온라인 쇼핑몰 시스템 개발을 위한 도메인 객체 모델에서 묶여져 있는 주문, 분류, 상품, 회원, 리뷰, 결제 가 애그리거트를 의미한다.
애그리거트는 여러 객체로 구성되기 때문에 어그리거트 루트를 통해서 객체들간의 도메인 규칙과 일관성을 유지한다. 예를 들어서 ‘출고를 하면 배송지 정보를 변경할 수 없다.’ 는 도메인 규칙이 있다면 Order 객체의 메서드를 통해서 배송 상태를 확인 후 출고중이 아닐 때만 배송정보를 변경할 수 있어야 한다.
애그리거트는 트랜잭션 의 범위가 되며, 한 트랜잭션에서는 하나의 애그리거트만 수정해야 하며 다른 애그리거트의 상태까지 관리해서는 안된다. 만약 부득이하게 한 트랙잭션으로 두 개 이상의 애그리거트를 수정해야 한다면 서비스 레이어에서 수정하도록 구현한다.
애그리거트는 개념상 완전한 하 개의 도메인 모델을 표현하기 때문에 리포지터리는 에그리거트 단위로 존재한다. 예를 들어서 Order 와 OrderLine 을 다른 테이블에 저장한다고 해서 별도의 리포지토리를 만들지 않고 Order 리포지토리를 통해서 저장한다. 여기서 OrderLine 은 Order 애그리거트에 속하는 구성 요소가 된다.
애그리거트 끼리는 서로 객체를 통한 참조가 아니라 ID 를 이용해서 참조하며, 다른 애그리거트가 필요한 경우 ID 로 레포지터리를 호출해서 다른 애그리거트를 얻는다.
Comments