도메인 주도 설계
하나의 소프트웨어 개발 방법론으로, 복잡한 도메인을 이해하고 해결하는데 목적이 있고 이에 집중하는 방법론
- why 도메인이 복잡해지면서 생기는 문제들이 아키텍처를 엉망으로 만드는 경우가 많았고, 결과적으로 유지보수를 어렵게 만드는 경우가 많음
- DDD의 핵심 개념/원칙들은 MSA의 핵심 개념이었던 개별 팀이 Product로서 서비스를 소유한다는 사고방식과 일치함
유비쿼터스 언어
-
복잡한 도메인을 이해하고 해결하기 위한 팀이 공통으로 쓰기 위한 언어들의 약속
-
도메인 전문가와 개발자가 같은 용어를 사용하게 함
-
도메인 모델
- 도메인들의 핵심 개념과 규칙을 표현하는 객체들의 관계로 구성되어 있음
-
Entity : 하나의 객체를 의미하며, 하나의 테이블 모델로서 존재할 수 있는 데이터들의 묶음
-
Aggregate : 데이터 변경의 단위로 다루는 연관된 엔티티들의 묶음 (관련된 객체들의 집합)
-
Aggregate Root : 어그리거트(집합) 에서도 도메인의 중심을 의미하는 엔티티를 의미
Bounded Context
- 정의한 여러 도메인들을 기준으로 각 도메인 모델들의 관계 표현 시 각 모델들은 상호 배타적인 문제를 해결해야만 한다는 DDD의 핵심원칙
- 상호배타적 :
Sub Domain
- 정의한 도메인 모델들을 Bounded Context 원칙에 따라, Business Capability를 높일 수 있는 방식으로 분리해야 한다는 원칙