디스틸레이션
도메인 모델의 핵심을 추출하는 방법
도메인 모델의 증류는 복잡한 시스템을 단순화하고, 중요한 비즈니스 로직을 다른 부수적인 기술적 요소로부터 분리하여 명확하게 하는 과정입니다. 이 글에서는 도메인 모델 증류의 중요성과 방법을 자세히 설명합니다.
도메인 모델 증류의 필요성
팀원들이 시스템의 전체 설계를 이해하기 쉽게 함: 도메인 모델의 핵심을 분명히 하면, 모든 팀원들이 시스템의 전반적인 구조와 흐름을 더 쉽게 파악할 수 있습니다. 이는 특히 신규 팀원들이 빠르게 적응하는 데 도움을 줍니다.
관리 가능한 크기의 핵심 모델을 언어로 표현하여 의사소통을 원활하게 함: 증류된 도메인 모델은 복잡성을 줄여주며, 팀 내 공통 언어(Ubiquitous Language)를 통해 더 명확한 의사소통을 가능하게 합니다.
리팩토링을 안내함: 명확한 핵심 도메인은 지속적인 리팩토링을 용이하게 합니다. 이는 시스템의 품질을 유지하고, 변경사항을 효과적으로 관리하는 데 필수적입니다.
가장 가치 있는 모델 영역에 작업을 집중함: 제한된 리소스를 가장 중요한 부분에 집중시켜, 비즈니스 가치를 최대화할 수 있습니다.
외주, 상용 컴포넌트 사용 및 작업 할당에 대한 결정을 안내함: 핵심 도메인과 그렇지 않은 부분을 명확히 구분함으로써, 외주나 상용 컴포넌트를 사용하는 것이 적절한지를 판단할 수 있습니다.
CORE DOMAIN 선택
도메인 모델 증류는 CORE DOMAIN을 찾아내고 이를 지원하는 요소들과 분리함으로써 가능해집니다. 이 과정은 여러 가지 단계를 포함합니다:
CORE DOMAIN의 식별:
도메인 모델에서 가장 중요한 부분을 찾아내는 작업입니다.
핵심 도메인과 지원 요소의 분리:
핵심 도메인을 명확하게 구분하기 위해 모델을 리팩토링합니다.
도메인 전문가와 개발자 간의 협업:
도메인 전문가와 개발자가 함께 작업하여 도메인 모델을 정교화합니다.
이를 통해 도메인 지식을 팀 내에서 축적하고 공유할 수 있습니다.
지속적인 리팩토링:
도메인 모델은 프로젝트 진행 중 지속적으로 리팩토링되어야 합니다.
이를 통해 모델의 정확성과 효율성을 유지할 수 있습니다.
GENERIC SUBDOMAINS의 분리
일반적인 원칙을 추상화하는 모델 요소는 핵심 도메인을 방해할 수 있습니다. 따라서 이러한 요소들을 분리하고, 가능한 상용 솔루션을 사용하는 것이 좋습니다. 예를 들어, 시간대 처리와 같은 기능은 상용 솔루션을 사용하거나 외주를 통해 구현할 수 있습니다. 이를 통해 핵심 도메인에 더 집중할 수 있습니다.
GENERIC SUBDOMAINS 식별:
도메인 모델에서 일반적인 원칙이나 기능을 추상화하는 요소를 찾아냅니다.
GENERIC SUBDOMAINS 분리:
이러한 요소들을 별도의 서브 도메인으로 분리합니다.
상용 솔루션 활용:
가능한 경우, 상용 솔루션을 사용하여 GENERIC SUBDOMAINS를 구현합니다.
COHESIVE MECHANISMS의 캡슐화
복잡한 계산 메커니즘을 분리하여 가벼운 프레임워크로 캡슐화하면, 도메인 모델이 더 이해하기 쉬워집니다. 예를 들어, 그래프 탐색 알고리즘을 사용하는 조직도 모델의 경우, 그래프 탐색 프레임워크를 분리하여 복잡성을 줄일 수 있습니다.
복잡한 메커니즘 식별:
도메인 모델에서 복잡한 계산 메커니즘을 찾아냅니다.
메커니즘 캡슐화:
이러한 메커니즘을 별도의 프레임워크로 캡슐화합니다.
명확한 인터페이스 제공:
캡슐화된 메커니즘에 대해 명확한 인터페이스를 제공하여, 도메인 모델에서 이를 쉽게 사용할 수 있도록 합니다.
SEGREGATED CORE
핵심 도메인을 명확히 구분하기 위해 모델을 리팩토링하는 과정입니다. 핵심 도메인과 지원 요소들을 분리하여 핵심 도메인을 더 명확하고 이해하기 쉽게 만듭니다.
핵심 하위 도메인 식별:
도메인 모델에서 가장 중요한 하위 도메인을 찾아냅니다.
예를 들어, 화물 운송 모델에서는 화물의 이동 경로와 관련된 요소들이 핵심 하위 도메인에 해당할 수 있습니다.
클래스 이동 및 리팩토링:
관련 클래스들을 새로운 패키지로 이동하고, 핵심 도메인과 관련 없는 기능들을 분리합니다.
이를 통해 핵심 도메인의 응집력을 높이고, 이해하기 쉽게 만듭니다.
지속적인 개선:
핵심 도메인의 관계와 상호작용을 지속적으로 개선하여, 더 단순하고 명확하게 만듭니다.
예를 들어, 화물 운송 시스템에서 운송 일정, 화물의 라우팅 및 고객 계약과 같은 요소들이 중요한 핵심 도메인에 해당합니다. 이들을 하나의 패키지로 묶어 다른 지원 요소들과 분리하면, 핵심 도메인이 더 명확해집니다.
ABSTRACT CORE
가장 기본적인 개념 요소들을 추출하여 추상 모델로 디자인합니다. 이 추상 모델은 주요 컴포넌트 간의 상호작용을 표현합니다. 이를 통해 상호작용이 많은 서브 도메인 간의 복잡성을 줄일 수 있습니다.
추상화할 개념 요소 식별:
도메인 모델에서 가장 기본적이고 중요한 개념 요소들을 찾아냅니다.
예를 들어, 화물 운송 모델에서는 화물, 경로, 일정 등의 개념 요소들이 해당할 수 있습니다.
추상 모델 디자인:
이러한 개념 요소들을 추상 클래스나 인터페이스로 디자인하여, 상호작용을 단순화합니다.
이를 통해 도메인 모델의 복잡성을 줄이고, 이해하기 쉽게 만듭니다.
패키지 구조 개선:
추상 모델을 별도의 패키지로 분리하고, 세부 구현 클래스들은 하위 패키지로 이동합니다.
이를 통해 모델의 구조를 명확하게 하고, 유지보수를 용이하게 합니다.
선택적 리팩토링 목표
큰 시스템을 리팩토링할 때, 가장 중요한 것은 CORE DOMAIN의 리팩토링입니다. CORE DOMAIN과 지원 요소 간의 관계를 개선하고, 지원 서브 도메인을 순수하게 만드는 것이 우선입니다.
CORE DOMAIN 리팩토링:
CORE DOMAIN을 먼저 리팩토링하여, 모델의 정확성과 효율성을 높입니다.
이를 통해 시스템의 전체적인 복잡성을 줄이고, 이해하기 쉽게 만듭니다.
지원 서브 도메인 개선:
지원 서브 도메인을 리팩토링하여, CORE DOMAIN과의 관계를 명확하게 합니다.
이를 통해 시스템의 유지보수성과 확장성을 높입니다.
예를 들어, 보험 청구 처리 시스템에서는 청구서 작성 및 제출, 사고 발생 시간 기록 등의 기능이 핵심 도메인에 해당합니다. 이러한 요소
들을 명확히 하고, 관련 없는 지원 기능들과 분리하면, 시스템의 복잡성을 줄일 수 있습니다.
도메인 비전 성명서
프로젝트 초기에 도메인 모델이 존재하지 않더라도, 개발 방향을 설정하는 데 필요합니다. 도메인 비전 성명서는 도메인 모델의 핵심 개념과 그 가치를 간략하게 설명합니다. 이 문서는 개발 과정 동안 팀 전체가 공유하는 방향을 설정하는 데 유용합니다.
도메인 비전 성명서 작성:
프로젝트 초기에 도메인 모델의 핵심 개념과 가치를 설명하는 1페이지 정도의 간략한 문서를 작성합니다.
이 문서는 개발 과정 중에 지속적으로 업데이트되어야 합니다.
도메인 비전 성명서 활용:
이 문서를 통해 팀원들과 비즈니스 이해관계자들에게 도메인 모델의 가치를 전달합니다.
개발 과정 중에 도메인 모델의 방향성을 잃지 않도록 안내합니다.
하이라이트된 핵심
도메인 비전 성명서는 도메인 모델의 핵심을 대략적으로 제시하지만, 구체적인 핵심 요소들을 식별하는 데에는 한계가 있습니다. 따라서 하이라이트된 핵심을 통해 도메인 모델의 구체적인 핵심 요소들을 명확히 합니다.
핵심 요소 식별:
도메인 모델에서 가장 중요한 핵심 요소들을 식별합니다.
이를 통해 팀원들이 도메인 모델의 핵심 부분을 쉽게 이해할 수 있도록 합니다.
하이라이트된 문서 작성:
핵심 요소들을 설명하는 간단한 문서를 작성합니다.
이 문서는 팀원들이 도메인 모델의 핵심 요소들을 쉽게 파악할 수 있도록 돕습니다.
지속적인 업데이트:
도메인 모델이 변경됨에 따라, 하이라이트된 문서도 지속적으로 업데이트되어야 합니다.
이를 통해 팀원들이 항상 최신 도메인 모델을 이해할 수 있도록 합니다.
이와 같은 도메인 모델 증류 과정을 통해 시스템의 본질적인 부분을 명확히 하고, 개발 속도와 유연성을 높일 수 있습니다. 이를 통해 프로젝트가 성공적으로 진행될 수 있도록 돕습니다.
Last updated