최범균 님의 DDD Start를 읽고 정리한 내용입니다. DDD 애그리거트(Aggregate) 테이블이 100개 이상 있는 ERD를 보고 있다고 생각해보자. 하나 하나 따라가보면 개별 테이블의 연관 관계는 알 수는 있지만, 한 눈에 전체의 구조를 파악하기는 굉장히 어렵다. 도메인 모델도 마찬가지이다. 그렇게 되면 수정사항이 생겼을 때 코드를 변경하고 확장하는 일이 매우 힘들어질 것이다. 애그리거트를 활용하면 이러한 어려움을 해결할 수 있다. 🔗애그리거트 애그리거트는 관련 도메인을 하나의 군집으로 묶은 것 애그리거트를 사용하면 연관 도메인을 묶어서 이해하기 때문에 모델 관계를 파악하기가 더 쉽다. 또한 더 잘 이해할 수 있고 애그리거트 단위로 일관성을 관리하면 코드도 일목조연하게 작성할 수 있다. 코드의 ..
Java/Domain Driven Design
최범균 님의 DDD Start를 읽고 정리한 내용입니다. DDD 아키텍처 네 가지 영역 아키텍처를 설계할 때 등장하는 4가지의 전형적인 영역이 있다. 표현 사용자의 요청을 응용 영역에 전달 응용 영역의 처리 결과를 (시각화하여) 사용자에게 전달 응용 사용자에게 제공해야 할 기능 구현 도메인 도메인 모델을 로직으로 구현 인프라 스트럭처 DBMS, Message Queue 등 인프라 영역과의 연계 Spring에 빗대면 아래 그림과 같은 구조를 이룬다. 표현 계층은 응용 계층에 의존적이고, 응용은 도메인에, 도메인은 인프라 스트럭처에 의존한다. 상황에 따라 상위 계층이 하위 계층에 의존하지 않을 수 있지만, 하위 계층은 상위 계층을 의존하지는 않는다. 아래 예시 코드는 금액 계산 로직이 복잡하여 '인프라 스트..
최범균 님의 DDD Start를 읽고 정리한 내용입니다. 도메인 도메인 모델 이커머스에서 모니터를 구매한다고 가정해보자. 원하는 스펙의 모니터를 검색하고 다양한 물건을 비교한다. 눈에 띄는 물건이 여러 개라면 장바구니에 넣어둘 수도 있다. 구매를 결정했다면 어떤 결제수단을 사용할지, 배송지는 어딘지를 선택한다. 배송을 시작했다면 배송 추적 기능을 활용하여 내 물건이 어디쯤 왔는지를 확인한다. 개발자에겐 쇼핑몰은 구현 대상이다. 그리고 쇼핑몰에서는 구매를 위한 다양한 기능을 제공한다. 여기서 쇼핑몰은 소프트웨어로 해결하기 위한 도메인에 해당한다. 정의 도메인 모델은 특정 도메인을 개념적으로 표현한 것이다. 비즈니스 로직에 맞는 규칙을 구현한 레이어는 도메인이 되어야 한다. 예시 상품 주문을 예시로 코드를 ..