DDD(도메인 중심 설계)는 복잡한 비즈니스 요구 사항을 충족하는 소프트웨어를 만들기 위해 기술 팀과 비즈니스 팀 간의 협업을 강조하는 소프트웨어 개발에 대한 전략적이고 실용적인 접근 방식입니다. 특정 기술이나 방법론과 달리 DDD는 소프트웨어 시스템, 특히 복잡한 도메인과 관련된 시스템 설계를 안내하는 일련의 원칙과 관행입니다. DDD의 목표는 소프트웨어 시스템의 구조와 기능이 핵심 비즈니스 영역과 밀접하게 일치하도록 하는 것입니다.
DDD의 주요 개념 #
도메인 이해 #
도메인은 비즈니스가 운영되는 지식 및 활동 영역입니다. 여기에는 애플리케이션에 중요한 비즈니스 논리, 규칙 및 데이터가 포함됩니다. 도메인 모델은 도메인과 엔터티, 값 개체, 집계 및 서비스와 같은 해당 요소를 나타내는 개념적 모델입니다. 이는 시스템 설계 및 구현을 위한 청사진 역할을 합니다.
공유 언어 구축 #
DDD는 개발자, 비즈니스 분석가, 도메인 전문가를 포함한 모든 이해관계자가 사용하는 공통 언어(유비쿼터스 언어)를 옹호합니다. 도메인에서 파생된 이 공유 언어는 명확하고 일관된 의사소통을 보장하여 오해를 줄이고 협업을 향상시킵니다.
경계 정의 #
크고 복잡한 시스템에서는 애플리케이션의 여러 부분에서 서로 다른 모델과 용어를 사용할 수 있습니다. 제한된 컨텍스트는 이러한 경계를 정의하는 데 도움이 되며 각 컨텍스트에 고유한 모델과 유비쿼터스 언어가 있도록 보장합니다. 컨텍스트 간의 상호 작용은 잘 정의된 인터페이스를 통해 관리됩니다.
도메인 구조화 #
- 엔터티 및 값 개체: 엔터티는 시간이 지나도 지속되는 고유한 ID를 가진 개체입니다. 반면에 값 개체는 도메인의 설명적인 측면을 나타내며 변경할 수 없습니다.
- 집합: 집계는 데이터 변경에 대한 단일 단위로 처리되는 엔터티 및 값 개체의 컬렉션입니다. 각 집계에는 집계의 구성 요소에 대한 액세스를 제어하여 일관성과 무결성을 보장하는 루트 엔터티(집계 루트)가 있습니다.
- 저장소: 데이터 소스에 액세스하고 관리하기 위한 추상화 계층을 제공합니다. 리포지토리는 데이터베이스와 상호 작용하는 데 필요한 논리를 캡슐화하여 데이터 액세스를 더 간단하게 만들고 도메인 모델과 더 일관되게 만듭니다.
- 서비스: 도메인 서비스에는 엔터티나 값 개체에 자연스럽게 맞지 않는 도메인 논리가 포함되어 있습니다. 여러 엔터티 또는 복잡한 비즈니스 규칙과 관련된 작업을 처리합니다.
- 공장: 팩토리는 복잡한 개체, 특히 집계의 생성 논리를 캡슐화합니다. 도메인 개체를 인스턴스화하는 표준화된 방법을 제공하여 일관성과 정확성을 보장합니다.
전략적 및 전술적 디자인 #
전략적 설계는 도메인의 상위 구조와 다른 도메인 및 시스템과의 관계에 중점을 둡니다. 주요 요소는 다음과 같습니다.
- 컨텍스트 매핑: 이 기술은 서로 다른 제한된 컨텍스트 간의 관계와 종속성을 시각화하고 관리하는 데 도움이 됩니다. 컨텍스트 맵은 시스템의 다양한 부분이 어떻게 상호 작용하고 서로 영향을 미치는지에 대한 명확한 이해를 제공합니다.
- 공유 커널: 공유 커널은 중복성을 줄이고 일관성을 향상시키기 위해 다중 경계 컨텍스트에서 사용되는 도메인 모델의 공통 부분입니다.
- 고객-공급자 및 순응주의 패턴: 이러한 패턴은 다양한 팀과 제한된 컨텍스트가 상호 작용하는 방식을 설명합니다. 고객-공급자 패턴에는 상호 요구 사항을 충족하기 위한 협상이 포함되는 반면, 순응 패턴은 한 컨텍스트에서 다른 모델을 채택해야 합니다.
전술적 설계는 각 경계 컨텍스트 내에서 도메인 모델을 구현하는 구체적인 사항을 다룹니다. 여기에는 엔티티, 값 객체, 애그리게이트, 서비스, 리포지토리 및 팩토리를 상세하게 설계하여 전체 도메인 모델과 일치하도록 하는 과정이 포함됩니다.
도메인 기반 설계의 이점 #
도메인 주도 설계(DDD)는 기술팀과 비즈니스팀 간의 협업을 촉진하여 소프트웨어 솔루션이 비즈니스 요구사항 에 긴밀하게 부합하도록 합니다 . 공통된 언어를 사용함으로써 모든 이해관계자 간의 의사소통이 향상되어 모두가 같은 방향을 향해 나아갈 수 있습니다. 또한, 관심사의 명확한 분리와 잘 정의된 경계는 시스템의 유지보수성 과 확장성을 높여 줍니다. DDD는 도메인 모델에 중점을 두어 소프트웨어가 비즈니스 요구사항 변화에 더욱 쉽게 적응할 수 있도록 하며, 역동적인 비즈니스 환경에서 유연성 과 복원력을 제공합니다 .
도메인 중심 설계의 과제 #
도메인 주도 설계(DDD)를 구현하는 것은 복잡 하고 많은 자원을 필요 로 하며 , 상당한 투자가 요구됩니다. 특히 DDD 접근 방식에 익숙하지 않은 팀에게는 DDD 원칙을 이해하고 적용하는 것이 어려울 수 있습니다 . 또한, 엄격한 모델링 및 커뮤니케이션 방식은 추가적인 부담을 초래하여, 비교적 간단한 프로젝트에는 DDD가 적합하지 않을 수 있습니다.
맺음말 #
도메인 중심 설계는 비즈니스 요구 사항에 밀접하게 부합하고 변화에 적응할 수 있는 소프트웨어 시스템을 개발하기 위한 강력한 프레임워크입니다. 협업, 이해 공유, 전략적 설계에 중점을 두어 DDD는 강력하고 유지 관리 및 확장 가능한 소프트웨어를 만드는 데 도움을 줍니다. 이러한 어려움에도 불구하고 향상된 커뮤니케이션, 비즈니스 조정 및 유연성의 이점으로 인해 DDD는 복잡한 소프트웨어 프로젝트에 대한 귀중한 접근 방식이 되었습니다.