Theory
중급 1-1.5시간 이론

DDD 이론 3: 도메인과 서브도메인

Core, Supporting, Generic 서브도메인 분류와 전략적 투자 결정을 학습합니다.

Core DomainSupporting SubdomainGeneric SubdomainDistillationStrategic Investment
학습 목표
  • • 도메인과 서브도메인의 개념을 이해한다
  • • Core, Supporting, Generic 서브도메인을 구분할 수 있다
  • • Distillation을 통해 핵심 도메인을 식별하는 방법을 익힌다
  • • 서브도메인 유형에 따른 전략적 투자 결정을 할 수 있다
  • • 실제 비즈니스에서 서브도메인을 식별하고 분류할 수 있다
  • • 서브도메인의 진화와 변화에 대응하는 방법을 이해한다
  • • 실제 기업 사례를 통해 서브도메인 분류의 실전 감각을 익힌다

1. 도메인과 서브도메인

"모든 소프트웨어 프로그램은 사용자의 어떤 활동이나 관심사와 관련이 있다. 사용자가 프로그램을 적용하는 대상 영역이 소프트웨어의 도메인이다."

— Eric Evans, Domain-Driven Design, Chapter 1

도메인(Domain)이란?

도메인은 소프트웨어가 해결하고자 하는 비즈니스 문제 영역입니다. 이커머스 회사라면 "온라인 상거래"가 도메인이고, 은행이라면 "금융 서비스"가 도메인입니다.

서브도메인(Subdomain)이란?

대부분의 도메인은 너무 크고 복잡해서 하나의 모델로 다룰 수 없습니다. 서브도메인은 전체 도메인을 논리적으로 분리한 하위 영역입니다.

이커머스 도메인의 서브도메인 예시
🛒

주문

장바구니, 주문, 결제

📦

재고

재고 관리, 입출고

🚚

배송

배송 추적, 물류

👤

회원

가입, 인증, 프로필

🏷️

상품

카탈로그, 가격, 카테고리

💳

결제

PG 연동, 환불

2. 서브도메인의 세 가지 유형

"모든 서브도메인이 동등하게 중요한 것은 아니다. 어떤 것은 비즈니스의 핵심이고, 어떤 것은 지원 역할을 하며, 어떤 것은 범용적이다."

— Vaughn Vernon, Implementing Domain-Driven Design

Core Domain (핵심 도메인)

비즈니스의 핵심 경쟁력이 되는 영역. 회사가 존재하는 이유이자 차별화 요소.

특징

  • • 비즈니스 성공에 직접적 영향
  • • 경쟁사와 차별화되는 영역
  • • 복잡하고 자주 변경됨
  • • 외부에서 구매할 수 없음

투자 전략

  • • 최고의 개발자 배치
  • • DDD 전술적 패턴 적극 활용
  • • 지속적인 모델 정제
  • • 절대 외주나 패키지로 대체 금지

예시: 넷플릭스의 추천 알고리즘, 아마존의 물류 최적화, 쿠팡의 로켓배송 시스템

Supporting Subdomain (지원 서브도메인)

Core Domain을 지원하는 역할. 비즈니스에 특화되어 있지만 핵심 경쟁력은 아님.

특징

  • • 비즈니스에 필요하지만 차별화 요소 아님
  • • 회사 특화 로직 포함
  • • 중간 정도의 복잡성
  • • 기성 솔루션으로 대체 어려움

투자 전략

  • • 적절한 수준의 설계
  • • 필요시 외주 개발 가능
  • • 과도한 투자 지양
  • • 단순한 DDD 패턴 적용

예시: 이커머스의 리뷰 시스템, 포인트 적립 시스템, 알림 발송 시스템

📦

Generic Subdomain (범용 서브도메인)

모든 비즈니스에 공통적으로 필요한 영역. 특별한 차별화 없이 표준적인 솔루션 사용 가능.

특징

  • • 산업 전반에 공통적
  • • 표준화된 솔루션 존재
  • • 비즈니스 차별화와 무관
  • • 잘 알려진 문제 영역

투자 전략

  • • 기성 솔루션/SaaS 활용
  • • 오픈소스 라이브러리 사용
  • • 직접 개발 최소화
  • • 단순 CRUD로 충분

예시: 인증/인가(Auth0, Cognito), 결제(PG사), 이메일 발송(SendGrid), 파일 저장(S3)

3. Distillation: 핵심 도메인 증류하기

"Distillation은 혼합물에서 가치 있는 물질을 분리하는 과정이다. 모델도 마찬가지로 핵심을 추출하고 부수적인 것을 분리해야 한다."

— Eric Evans, Domain-Driven Design, Chapter 15

Core Domain을 식별하는 질문들

"이 기능이 없으면 우리 비즈니스가 존재할 수 있는가?"

없으면 비즈니스가 불가능하다면 Core Domain 후보

"경쟁사도 똑같이 할 수 있는가?"

경쟁사가 쉽게 따라할 수 있다면 Core가 아닐 가능성

"이것을 외부 솔루션으로 대체할 수 있는가?"

대체 가능하다면 Generic, 불가능하다면 Core 또는 Supporting

"이 영역에서 혁신이 비즈니스 가치를 창출하는가?"

혁신이 직접적 가치를 만든다면 Core Domain

Domain Vision Statement

Core Domain을 명확히 하기 위해 Domain Vision Statement를 작성합니다. 이것은 핵심 도메인이 무엇이고 왜 중요한지를 한 페이지로 설명하는 문서입니다.

Domain Vision Statement 예시
가상의 음식 배달 플랫폼

🎯 Core Domain: 실시간 배달 최적화

우리의 핵심 경쟁력은 실시간으로 최적의 배달 경로와 라이더를 매칭하는 것입니다. 이 시스템은 주문 위치, 음식점 위치, 라이더 현재 위치, 교통 상황, 음식 조리 시간을 종합적으로 고려하여 가장 빠르고 효율적인 배달을 가능하게 합니다.

이 영역에서의 혁신은 배달 시간 단축, 라이더 효율성 증가, 고객 만족도 향상으로 직접 연결됩니다. 경쟁사 대비 10분 빠른 배달은 우리의 핵심 차별화 요소입니다.

투자 방향: 최고의 알고리즘 엔지니어 배치, 지속적인 모델 개선, ML 기반 예측 시스템 고도화

Highlighted Core

코드베이스에서 Core Domain을 명확히 표시하여 개발자들이 어디에 집중해야 하는지 알 수 있게 합니다.

// 패키지 구조로 Core Domain 강조
com.company.delivery/
├── core/                    // ⭐ CORE DOMAIN
│   ├── routing/            // 배달 경로 최적화
│   │   ├── RouteOptimizer.java
│   │   ├── DeliveryMatcher.java
│   │   └── TrafficPredictor.java
│   └── pricing/            // 동적 가격 책정
│       ├── DynamicPricing.java
│       └── SurgeCalculator.java
├── supporting/              // Supporting Subdomain
│   ├── review/             // 리뷰 시스템
│   ├── notification/       // 알림
│   └── promotion/          // 프로모션
└── generic/                 // Generic Subdomain
    ├── auth/               // 인증 (외부 연동)
    ├── payment/            // 결제 (PG 연동)
    └── storage/            // 파일 저장

4. 전략적 투자 결정

서브도메인 유형별 투자 매트릭스
항목CoreSupportingGeneric
개발 방식내부 개발 필수내부 또는 외주구매/SaaS/오픈소스
인력 배치최고 인재적절한 수준최소 인력
설계 수준DDD 전술적 패턴단순 DDD 또는 트랜잭션 스크립트CRUD / 외부 API
테스트철저한 단위/통합 테스트적절한 테스트통합 테스트 위주
리팩토링지속적 개선필요시거의 안함

"Core Domain에 집중하라. 그것이 당신의 비즈니스를 차별화하는 것이다. 나머지는 가능한 한 단순하게 유지하거나 외부 솔루션을 활용하라."

— Vaughn Vernon, Domain-Driven Design Distilled

흔한 실수: 모든 곳에 DDD 적용

❌ 안티패턴

인증, 결제, 파일 업로드 같은 Generic Subdomain에 복잡한 DDD 패턴을 적용하여 불필요한 복잡성을 만들고 개발 시간을 낭비함

✓ 올바른 접근

Generic Subdomain은 검증된 외부 솔루션(Auth0, Stripe 등)을 사용하고, 절약한 시간과 인력을 Core Domain에 투자

5. 실습: 서브도메인 식별하기

🎯 워크숍: 온라인 교육 플랫폼
가상의 온라인 교육 플랫폼에서 서브도메인을 식별하고 분류해봅니다

당신은 "EduPlatform"이라는 온라인 교육 스타트업의 아키텍트입니다. 다음 기능들을 서브도메인으로 분류해보세요.

기능 목록과 분류

⭐ Core Domain

적응형 학습 엔진

학습자 수준에 맞춰 콘텐츠 난이도와 순서를 자동 조절

→ 핵심 차별화 요소, 경쟁사 대비 우위

학습 성과 분석

학습 패턴 분석, 취약점 진단, 맞춤 추천

→ 데이터 기반 개인화, 핵심 가치

📘 Supporting Subdomain

강의 관리

강의 생성, 커리큘럼 구성

수강 관리

수강 신청, 진도 관리

Q&A / 토론

질문답변, 토론 게시판

📦 Generic Subdomain

회원 인증

→ Auth0, Cognito

결제

→ Stripe, 토스페이먼츠

영상 스트리밍

→ Vimeo, AWS MediaConvert

알림

→ SendGrid, FCM

분류 근거 분석

왜 "적응형 학습 엔진"이 Core인가?

  • • 이 기능이 없으면 일반 동영상 강의 사이트와 차별화 불가
  • • 경쟁사가 쉽게 따라할 수 없는 알고리즘과 데이터 필요
  • • 외부 솔루션으로 대체 불가능 (우리만의 교육 철학 반영)
  • • 이 영역의 혁신이 직접적인 비즈니스 가치 창출

왜 "강의 관리"가 Supporting인가?

  • • 비즈니스에 필수적이지만 차별화 요소는 아님
  • • 우리 플랫폼 특화 로직 포함 (커리큘럼 구조 등)
  • • 기성 LMS로 완전 대체는 어려움
  • • 적절한 수준의 설계로 충분

왜 "결제"가 Generic인가?

  • • 모든 이커머스에 공통적으로 필요
  • • 검증된 외부 솔루션 다수 존재
  • • 직접 개발 시 보안, 규정 준수 부담
  • • 차별화와 무관

6. 서브도메인의 진화

"서브도메인의 분류는 고정된 것이 아니다. 비즈니스 전략이 변하면 어제의 Generic이 오늘의 Core가 될 수 있다."

— Vaughn Vernon, Implementing Domain-Driven Design

서브도메인 유형 변화 사례

📦 Generic → ⭐ Core: 아마존의 물류

초기 (Generic)

외부 물류 업체에 배송 위탁. 물류는 비용 센터로 인식.

현재 (Core)

자체 물류 네트워크 구축. 당일/익일 배송이 핵심 경쟁력.

⭐ Core → 📘 Supporting: 넷플릭스의 DVD 배송

초기 (Core)

DVD 우편 배송이 핵심 비즈니스. 물류 최적화가 경쟁력.

현재 (Supporting → 폐지)

스트리밍이 Core가 되면서 DVD 사업은 축소/분리.

📘 Supporting → ⭐ Core: 스타벅스의 모바일 주문

초기 (Supporting)

편의 기능으로 시작. 매장 경험이 Core였음.

현재 (Core)

전체 주문의 25%+. 리워드 프로그램과 결합된 핵심 경쟁력.

진화에 대응하는 방법

🔍 정기적 재평가

  • • 분기별 서브도메인 분류 리뷰
  • • 비즈니스 전략 변화 모니터링
  • • 경쟁 환경 변화 분석

🏗️ 유연한 아키텍처

  • • Bounded Context로 명확한 경계
  • • 느슨한 결합으로 교체 용이성
  • • Generic에서 Core로 전환 가능한 구조

7. 실제 기업 사례 분석

🛒 쿠팡의 서브도메인 분석

Core Domain

로켓배송 물류 시스템

자체 물류 네트워크, 배송 최적화, 재고 배치 알고리즘

쿠팡맨 관리 시스템

배송 기사 매칭, 경로 최적화, 실시간 추적

Supporting Subdomain

상품 카탈로그, 리뷰 시스템, 고객 서비스, 판매자 관리, 프로모션

Generic Subdomain

결제 (PG 연동), 인증, 알림, 검색 (Elasticsearch)

🎵 스포티파이의 서브도메인 분석

Core Domain

음악 추천 엔진

Discover Weekly, 개인화 플레이리스트, 취향 분석

오디오 스트리밍 기술

적응형 비트레이트, 오프라인 재생, 크로스페이드

Supporting Subdomain

플레이리스트 관리, 아티스트 프로필, 소셜 기능, 팟캐스트

Generic Subdomain

결제/구독, 인증 (소셜 로그인), 알림, 광고 플랫폼

핵심 요약

이번 세션에서 배운 것

  • 서브도메인은 Core, Supporting, Generic으로 분류된다
  • Core Domain은 비즈니스의 핵심 경쟁력이다
  • Distillation으로 핵심을 식별하고 분리한다
  • 서브도메인 유형에 따라 투자 전략이 달라진다
  • 서브도메인 분류는 비즈니스 전략에 따라 진화한다
  • 실제 기업들의 서브도메인 분류 사례를 분석했다

다음 세션 예고

다음 세션에서는 Bounded Context에 대해 학습합니다.

  • • Bounded Context의 개념과 경계
  • • 서브도메인과 Bounded Context의 관계
  • • 경계 식별 방법
  • • Context 분리 전략