DDD는 우리말로 도메인 주도 설계라고 합니다.
용어의 정의는 다음과 같습니다.
성능 , 생산성 , 안전성을 높이기 위한 방법의 설계는 여러가지가 있으나
그 중 하나가 DDD 입니다.
여기서 Spring DATA JDBC는 이러한 DDD와 밀접한 관계가 있습니다.
Aggregate는 도메인 모델의 기본 단위입니다.
일반적으로 배달 주문 앱을 예로 들면
주문, 배달, 결제, 상품, 회원 등이 있습니다.
조금 더 각각의 도메인을 세분화하면
여기서 회원 , 상품 , 주문 , 음식 , 결제 etc 는 상위수준 도메인이고 이러한 도메인 하위에 있는 정보를 하위 도메인이라고 합니다.
여기서 애그리거트는 회원 , 상품 , 주문 , 음식 , 결제 등의 상위 도메인을 말합니다. 비슷한 하위 도메인의 집합을 애그리거트라고 합니다.
Aggregate Root는 애그리거트의 루트 엔티티입니다.
애그리거트의 루트 같은 경우는 각 애그리거트 하위 도메인 집합의 대표를 말합니다.
애그리거트만 있으면 되지 않냐고 말 할수 있을 것 같은데 왜 루트가 필요할까요?
애그리거트는 하위 도메인의 집합이기 때문에 하위 도메인의 정보를 가지고 있습니다.
그렇다면 하위 도메인의 정보를 가지고 있으면 하위 도메인의 정보를 변경하면 애그리거트의 정보도 변경되어야 합니다.
데이터 베이스와 테이블 관계로 보면 루트는 부모 테이블이고 하위 도메인은 자식 테이블이라고 생각하면 됩니다.
DDD는 애그리거트를 기반으로 도메인 모델을 구성합니다.
이는 애그리거트를 기준으로 설계를 진행하기 떄문에 각각의 애그리거트는 독립적으로 설계를 진행할 수 있습니다.
따라서 요즘 인기있는 MSA (Micro Service Architecture) 를 구현하기에도 좋습니다.
MSA는 각각의 서비스를 독립적으로 구현하기 위해서 사용을 합니다.
그런데 이러한 애그리거트 단위는 MSA를 구성하는데 있어서 서비스의 분리를 용이하게 해줍니다.