책에 나오는 keyword
여기 읽어도 무슨말인지 절대 알수가 없는 키워드들이 있다.
1.전략적 설계
2.전술적 설계
3.보편언어
4.컨텍스트
5.컨텍스트 매핑
6.바운디드 컨텍스트
7.도메인 이벤트
8.에그리게잇
9.이벤트스토밍
고통을 줄이기 위해서
이 책의 저자가 영업을 잘한다.
1. 개발자는 이미 프로젝트의 복잡성을 경험하고 있을 것이다.
2. 비즈니스 문제부터 기술적인 내용까지 다양한 프로젝트의 문제성은
곧 나쁜 설계로 이어진다.
3. 효과적인 설계, DDD가 도와준다.
전략적 설계란
비즈니스상 전략적으로 중요한것, 중요도에 따라 일을 분리/통합하는 방법
바운디드 컨텍스트라는 전략적 설계 패턴을 사용해서 도메인을 분리한다.
보편언어를 개발한다.
서브도메인으로 복잡성을 다룰 수 있게 도와준다.
컨텍스트 매핑으로 바운디드 컨텍스트를 통합한다.
전술적 설계란
엔터티와 값 객체를 통합하는 에그리게잇 패턴을 사용한다.
도메인 이벤트의 사용으로 명확하게 모델링한다.
바운디드 컨텍스트를 공유한다.
전략적 설계에서 나온 용어 풀이
바운디드 컨텍스트
그 범주 내에서 소프트웨어 모델의 각 컴포넌트가 특정한 의미를 갖고,
특정한 일을 수행한다는 뜻이다.
바운디드 컨텍스트는 단일 팀에만 할당 되어야 하고,
각 바운디드 컨텍스트마다 독립적인 코드 레파지토리가 있어야 한다.
보편언어
바운디드 컨텍스트 안에서 일하는 팀이
생성하고, 그 안에서 기능하는 소프트웨어 모델을 만드는 모든 팀 구성원이 사용하는 언어를 반영한다.
팀 구성원들이 이야기 할 때 사용된다.
다수의 팀이 하나의 바운디드 컨텍스트를 수행할 수는 없으므로 보편언어는 팀 내에서만 사용되는 것이다.
핵심도메인과 서브도메인
조직이 모든것에 뛰어날 수는 없고 그렇게 만들려고 해서도 안된다.
기업의 올바른 전략적 결정을 위해 무엇이 핵심 도메인이어야 하고,
어떤것을 제외해야 하는지 현명하게 선택해야 한다.
진흙 덩어리
결국 전략적 설계는 새로운 소프트웨어 제품이 큰 진흙덩어리가 되는것을 막아준다.
이 덩어리는 시스템의 명확한 경계 없이 여러개의 뒤엉킨 모델들을 담고 있고 다수의 팀이 이 모델을 활용해 일을 하게 된다면 큰 문제가 될 수 있다.
서로 관련이 없는 다양한 개념이 수많은 모듈로 확장되거나 어울리지 않는 모듈을 상호 연계시킬 수도 있다.
이런 경우에 프로젝트에서 테스트를 수행하는데 오랜 시간이 걸릴 것이다.
진흙덩어리를 피해 바운디드 컨텍스트를 만들고나서 여전히 외부의 큰 진흙덩어리와 통합해야 하는 상황이라면 , 각 레거시 시스템에 대응한 반부패 계층을 만들어서 보호해야한다.
컨텍스트 매핑부터 좀 어려워지는것 같다. 그만 알아보자~
반부패계층
가장 방어적인 컨텍스트 매핑 관계이다.
어떻게 하류 모델과 외부(상류 통합 모델) 사이에서 독립성을 지킬까?
상류 모델로부터 하류 모델을 독립시키고 둘 사이를 번역한다.
컨텍스트 매핑
파트너십, 고객-공급자, 반부패계층 등 다양한 매핑의 종류가 있다.
RPC, 레스트풀 HTTP, 메시징을 사용