DDD에서의 도메인이란?
개요
이 문서는 DDD에서의 도메인 정의를 정리한 것이다.
서론
DDD는 Domain-Driven Design의 약자다. 따라서 DDD를 적용할 때 도메인이 무엇인지 이해하는 것이 필수적이다. DDD는 구조적인 설계 방법론으로, 많은 소프트웨어 시스템이 소프트웨어 개발 방법으로 채택하고 있다. DDD를 잘 이해하기 위해서는 먼저 도메인의 개념을 이해해야 한다.
이 문서에서는 DDD 관점에서의 도메인 개념과, 일반적으로 구분되는 도메인의 유형을 설명한다.
도메인이란?
DDD에서 도메인은 소프트웨어 개발에서 해결해야 할 특정 문제 영역 또는 주제를 의미한다.
예를 들어, 고객이 직접 자신의 정보를 수기로 작성하는 불편함을 해소하기 위해 자동 정보 등록 소프트웨어를 개발해야 한다면, 그 회사의 도메인은 “정보 등록”이 된다.
도메인은 소프트웨어의 핵심 키워드라고 할 수 있다. 즉, 도메인 주도 설계는 도메인을 중심으로 소프트웨어를 개발하는 것을 의미한다.
DDD의 도메인 유형
DDD에서는 다음과 같은 여러 유형의 도메인이 존재한다.
-
코어 도메인(Core Domain)
비즈니스에 경쟁력과 차별성, 우위를 제공하는 핵심 영역이다.
예시: 구글 검색 엔진, 넷플릭스 추천 알고리즘, 틱톡의 숏폼 콘텐츠 시스템. -
제너릭 서브도메인(Generic Subdomain)
많은 서비스에서 공통적으로 사용하는 일반 기능을 담당하며, 자체적으로 경쟁력을 제공하지 않는다.
예시: 사용자 인증, 이메일 검증, 알림 시스템. -
서포팅 서브도메인(Supporting Subdomain)
코어 도메인의 운영을 지원하는 영역이다. 자체적으로는 경쟁 우위를 제공하지 않지만, 코어 도메인이 제대로 동작하도록 하는 데 필수적이다.
예시: 틱톡의 동영상 업로드 시스템 — 그 자체로는 경쟁 우위가 아니지만, 추천 알고리즘(코어 도메인)을 지원하는 데 필수.
마무리
소프트웨어는 결국 현실 세계의 문제를 해결하기 위해 개발된다. 따라서 문제 자체를 정의하는 도메인은 소프트웨어 개발에서 매우 중요하다. 그동안 도메인의 중요성에 대해 들어왔지만, 이번 기회를 통해 도메인이 무엇인지, 왜 중요한지를 명확히 알게 되었다.
앞으로는 도메인을 충분히 고려하여 소프트웨어를 설계할 것이다.
잘 설계된 도메인은 개발 생산성을 높일 뿐 아니라 비즈니스 경쟁력도 강화한다.