발전하는 질서(Emerging Order)대규모 시스템이 시간이 지남에 따라 자연스럽게 구조화되고, 일관성을 갖추게 되는 과정을 의미시스템이 진화하면서 일관성과 체계를 유지할 수 있도록 돕는 설계 접근 방식특징:점진적 설계: 시스템이 진화하고 변화하면서 점진적으로 설계를 개선하고 정제한다적응성: 시스템이 환경 변화나 새로운 요구사항에 적응할 수 있도록 유연하게 설계한다일관성 유지: 변화 과정에서 시스템의 일관성을 유지하기 위해 노력한다예제:애자일 개발 방법론: 초기에는 전체 시스템을 상세히 설계하지 않고, 스프린트 단위로 점진적으로 설계하고 구현한다시스템 은유(System Metaphor)시스템의 구조와 동작을 이해하기 쉽게 하기 위해 사용하는 비유적 표현복잡한 시스템을 설명하고 이해하는 데 도움이 된다..
에릭 에반스
디스틸레이션(Distillation) 정의디스틸레이션은 복잡한 도메인 모델에서 핵심적인 개념과 요소를 식별하고, 이를 정제하여 시스템의 중심으로 삼는 과정이다.이는 중요한 도메인 개념을 명확히 하고, 불필요한 복잡성을 제거하는 데 중점을 둔다핵심 도메인(Core Domain)핵심 도메인(Core Domain) 선택핵심 도메인 선택의 중요성:비즈니스 가치: 핵심 도메인은 비즈니스 가치를 극대화하는 데 중요한 역할을 한다. 올바른 선택은 비즈니스 성공에 큰 영향을 미친다.경쟁 우위: 핵심 도메인은 경쟁 우위를 제공하는 기능을 포함한다. 이를 통해 시장에서의 위치를 강화할 수 있다.핵심 도메인 선택 기준:비즈니스 전략적 중요성: 해당 도메인이 비즈니스 전략에서 얼마나 중요한지를 평가한다. 전략적 중요성이 높은..
Bounded Context (제한된 컨텍스트)제한된 컨텍스트(Bounded Context)제한된 컨텍스트는 도메인 모델의 경계를 정의하는 개념각 컨텍스트는 고유한 모델을 가지며, 그 모델은 해당 컨텍스트 내에서만 일관성을 유지한다.이는 복잡한 도메인 모델을 관리하기 쉽게 만드는 데 중요한 역할을 한다.제한된 컨텍스트의 장점일관성 유지: 각 컨텍스트 내에서 모델의 일관성을 유지할 수 있다. 이는 도메인 모델이 정확하고 신뢰할 수 있도록 만든다독립적인 개발: 각 컨텍스트는 독립적으로 개발되고 유지보수될 수 있다. 이는 개발팀 간의 협업을 촉진하고, 시스템의 유연성을 높인다.복잡성 관리: 도메인 모델을 작은 부분으로 분할하여, 각 부분의 복잡성을 관리할 수 있다. 이는 시스템의 이해도와 유지보수성을 높인다...
전략 패턴전략 패턴이란?전략 패턴은 알고리즘 군을 정의하고, 각 알고리즘을 캡슐화하며, 이들을 상호 교환 가능하게 만드는 패턴이를 통해 클라이언트는 알고리즘을 독립적으로 변경할 수 있다.알고리즘을 사용하는 클라이언트 코드와 알고리즘 자체를 분리하여, 클라이언트 코드의 변경 없이 알고리즘을 쉽게 변경할 수 있도록 한다.구조Context: 전략을 사용하는 클래스. 클라이언트는 Context를 통해 알고리즘을 실행Strategy: 알고리즘을 정의하는 인터페이스ConcreteStrategy: 구체적인 알고리즘을 구현하는 클래스전략 패턴의 중요성유연성: 알고리즘을 동적으로 선택하고 변경할 수 있어, 유연한 설계가 가능하다. 이는 다양한 요구사항을 쉽게 수용할 수 있게 한다.확장성: 새로운 알고리즘을 추가할 때 기..
분석 패턴이란?분석 패턴은 특정 도메인 문제를 해결하기 위해 반복적으로 사용할 수 있는 설계 솔루션이러한 패턴은 도메인 전문가와 개발자가 복잡한 문제를 이해하고 해결하는 데 도움을 준다도메인 모델의 일관성을 유지하고, 복잡한 문제를 단순화하며, 재사용 가능한 설계를 제공하는 것이 목적이다분석 패턴의 중요성재사용성: 분석 패턴은 검증된 설계 솔루션을 제공하여, 유사한 문제를 해결할 때 재사용할 수 있다. 이는 개발 시간을 단축하고, 코드의 일관성을 높일 수 있다.문서화: 분석 패턴은 도메인 모델의 구조와 동작을 명확하게 문서화한다. 이는 도메인 전문가와 개발자가 모델을 이해하고, 협력하는 데 도움을 준다.설계 품질 향상: 검증된 설계 솔루션을 사용함으로써, 도메인 모델의 설계 품질을 향상시킬 수 있다. 이..
의도를 드러내는 인터페이스(Intention-Revealing Interfaces)정의의도를 드러내는 인터페이스는 메서드, 클래스, 인터페이스 등의 이름이 그 기능과 목적을 명확히 드러내도록 설계하는 것을 의미이는 코드의 가독성을 높이고, 유지보수성을 향상시키며, 개발자 간의 의사소통을 원활하게 한다중요성코드의 의도를 명확히 드러내면, 다른 개발자가 코드를 이해하고 사용하기 쉬워진다이는 특히 도메인 주도 설계에서 도메인 전문가와 개발자 간의 의사소통을 강화하는 데 매우 중요하다메서드 이름은 그 목적을 명확히 표현해야 한다불명확한 메서드 이름:public class Order { public void update(OrderDetails details) { // Order 업데이트 로직 } }의도를 드러내는..
집합체(Aggregate) 집합체(Aggregate)란?집합체는 일관성을 유지하면서 하나의 단위로 처리되는 도메인 객체들의 군집입니다. 집합체는 다음과 같은 특징을 가진다경계(Boundary)집합체는 명확한 경계를 가지며, 이 경계 내에서 객체들이 상호작용합니다. 경계는 집합체의 일관성을 유지하는 데 중요한 역할을 한다루트 엔티티(Aggregate Root)집합체 내의 객체들 중 하나는 루트 엔티티로 지정되며, 외부에서 집합체에 접근할 때는 루트 엔티티를 통해서만 접근한다루트 엔티티는 집합체의 일관성을 책임진다일관성집합체 내의 객체들은 항상 일관된 상태를 유지해야 한다집합체의 상태 변경은 트랜잭션 단위로 처리되며, 이는 집합체의 일관성을 보장한다집합체의 설계 원칙집합체를 설계할 때 고려해야 할 몇 가지 ..
Entity, Value Object(값 객체)Service, Module(패키지) 모델링 패러다임엄격한 모델 (Rigorous Modeling)정의엄격한 모델링은 도메인 모델을 매우 정확하게 정의하고, 가능한 한 많은 도메인 지식을 모델에 반영하는 것을 목표로 한다특징모델은 상세하고 명확해야 한다도메인 전문가와 개발자가 협력하여 도메인 지식을 모델에 반영 한다모델을 통해 비즈니스 로직과 도메인 규칙을 표현한다장점도메인 지식이 코드에 잘 반영되어 일관성과 정확성을 높일 수 있다도메인 전문가와 개발자 간의 의사소통이 명확해진다단점모델이 복잡해질 수 있으며, 변경 관리가 어려울 수 있다단순한 모델 (Simple Modeling)정의단순한 모델링은 도메인 모델을 가능한 한 단순하게 유지하여 이해와 유지보수를 ..