Subdomain에는 어떤 유형들이 있나요?

서론
DDD의 전략적 설계 안에는 여러가지 개념들이 있다.
그 개념중 하나로는 Subdomain
이 있는데, 이 개념안에는 몇가지 유형들로 나뉘어진다.
유형으로 나눈 목적과 그로 얻고자 하는 가치가 매우 확고하여, 유형들의 구분은 매우 중요하다고 생각된다.
반버논이 말한 팩터들을 가지고 내용을 정리해본다.
Subdomain이 뭐죠?
Subdomain
은 전체 비지니스 도메인의 하위 부분을 말한다.
대부분의 비지니스 도메인은 전체를 포괄적으로 바라보기에는 너무 크고 복잡하기 마련이다.
그래서 거대하고 복잡한, 프로젝트 내에서 문제 영역을 논리적으로 쪼개는데 사용되는것이 Subdomain
이다.
결국 비지니스의 핵심 영역에 대해 관심사를 나누는것이다. 그리고 Subdomain
을 개발하는데, DDD를 사용했다면 매우 명확한 Bounded Context를 만들어낼 수 있다. (반버논은 DDD를 사용할 때, Bounded Context와 Subdomain은 일대일 관계를 맺도록 권장한다. 다만 목표에 가깝고, 예외는 언제든지 있다)
Subdomain의 유형은 3가지로 나뉜다
핵심 도메인
보편언어를 신중하게 만들기 위한 전략적 투자 영역으로, 주요 자원을 할당하는 명시적인 Bounded Context이다.
여기에는 잘 정의된 도메인 모델이 존재한다. 이 핵심 도메인은 다른 경쟁자들에 대한 차별화를 만들 영역이기 때문에 프로젝트 목록에서 매우 높은 우선순위를 갖는다.
기업은 경쟁사와 모든 것을 차별화 할 수 없기 때문에, 핵심 도메인은 기업이 특히 더 뛰어나야하는 부분에 대한 경계를 구분해준다.
따라서, 핵심 도메인은 소프트웨어에서 가장 큰 투자가 필요한 곳이다.
지원 서브도메인
이미 존재하는 제품으로 해결할 수 없는 맞춤 제작 개발이 필요한 모델링 영역을 말한다.
여기에는 핵심 도메인에서와 같은 투자 방식을 동일하게 따를 필요는 없다. 전략적 차별화를 위해 투자한 것에 실패하지않으면서도 지원 형태의 Bounded Context에 너무 큰 투자를 하지 않기위해 아웃소싱을 고려해볼 수 있다.
하지만, 알겠지만 지원 서브도메인 없이는 핵심 도메인을 성공시킬수는 없다. 지원 서브도메인이 존재해야 핵심 도메인을 성공시킬 수 있다. 즉, 지원 서브도메인도 중요한 소프트웨어 모델이다.
일반 서브도메인
기존 제품 구매를 통해 바로 충족시킬 수 있는 경우에 해당한다. 아웃소싱을 할 수도있고, 핵심 도메인 또는 좀 더 작은 지원 서브도메인에 할당된 엘리트 개발자가 없는 팀에서 직접 개발을 할 수 있는 영역이다.
따라서, 일반 서브도메인을 핵심 도메인으로 오해하지않아야한다. 오해하게된다면, 핵심 도메인의 투자를 일반 도메인에 할 수 있기때문이다.
위 세가지 유형을 현재 내가 기여하고있는 제품에 접목시켜보면, 생각보다 쉽게 유형 구분이 가능하다. 놀라운것은 팀원 모두가 위 유형을 명확하게 표현만 안했지, 서브 도메인들을 설명하고 개선이 필요할 때 암묵적으로 유형들을 나뉘어 설명하곤했다.
요즘 개인적으로, 표현할 때 암묵적으로, 느낌적인 느낌(?)으로, 감각적으로 등의 설명을 정의된 용어를 찾았을 때 작은 희열을 느낀다. 우리는 대개 전략적으로 보편 언어를 사용하게되는 이점은 매우 뚜렷한것을 알지만, 제품 관련이 아니라면 보편언어 선정을 고려하지않는 경우가 많다. 개념에 대한 명확한 확립이 안되면, 목적은 동일하지만 표현 차이로 불필요한 비용이 발생할 수 있는데 이런 부분들을 하나씩 해소해나가고자 이번 글을 작성했다.
Subscribe to my newsletter
Read articles from Jeongkyun An directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
