본문 바로가기

개발/[스터디] 도메인주도설계

[도메인 주도 설계 요약] 01. 비즈니스 도메인 분석하기-02. 도메인 지식 찾아내기

Intro

도메인 주도 설계 방법론 (Domain-Driven-Design, DDD)이란

  • 전략적 설계 전술적 설계로 나뉜다.
    • 전략적 설계
      • 무엇(어떤 소프트웨어)을 만드는지, 왜 그 소프트웨어를 만드는지에 대한 해답을 찾기
    • 전술적 설계
      • 어떻게 그 소프트웨어를 만드는지에 대한 해답을 찾기

01. 비즈니스 도메인 분석하기

핵심 키워드

  • 핵심 하위도메인
  • 지원 하위 도메인
  • 일반 하위 도메인

도메인을 이해해야 하는 이유

효과적인 솔루션을 설계하고 구축하기 위해서는 그것의 바탕이 되는 문제를 이해해야한다.

 

비즈니스 도메인이란

  • 회사가 고객에게 제공하는 서비스. 기업의 주요 활동 영역
    • 예. 스타벅스 - 커피
  • 기업은 여러가지 비즈니스 도메인을 운영할 수 있다. 
    • 예. 아마존 - 물건 판매, 클라우드 서비스
  • 회사는 비즈니스 도메인을 자주 변경할 수 있다. 
    • 예. 노키아: 목재가공에서 통신으로 도메인 변경함.

 

하위도메인(Sub Domain)이란?

  • 비즈니스 활동의 세분화된 영역.
  • 하위도메인은 하나의 구성 요소일 뿐이며, 각각의 하위도메인은 목표를 달성하기 위해 서로 상호 작용한다.
    • 예) 스타벅스는 커피를 만드는것뿐만 아니라, 각 지점의 부동산을 관리해야한다.
  • 하위도메인은 (1)핵심 하위도메인, (2)일반 하위도메인, (3)지원 하위 도메인 3가지로 나뉜다.

 

핵심 하위 도메인(Core Subdomian, = 핵심 도메인)이란?

  • 회사가 경쟁 업체와 다르게 수행하고 있는 일.
  • 수익에 영향을 미친다.
    • e.g. 우버는 '우버풀'을 통해 같은 방향으로 탕하는 손님을 합승시켜 비용을 절감한다.
    • e.g. 구글은 검색 알고리즘의 차별화를 통해, 많은 광고를 선점하였다.
  • 타 회사가 모방하기 어렵도록 복잡하다.
  • 주의. 핵심하위도메인에 반드시 기술이 들어가는 것은 아니다.
  • 지속적으로 최적화하므로, 자주 변경된다. 
  • 사내에서 직접 구현 되어야한다. 하청하는 것은 바람직하지 않다.
  • 조직에서 가장 숙련된 인재는 핵심 하위 도메인에서 일하도록 업무가 할당 되어야한다.

 

일반 하위 도메인(Generic subdomain)이란

  • 모든 회사가 같은 방식으로 수행하는 비즈니스 활동
  • 복잡하고 구현하기 어려우나, 회사에 경쟁력을 제공하지는 않는다. 
  • 모든 회사에서 사용하고 있어서, 더 이상 혁신이 필요 없다. 
    • e.g. 보석 판매 쇼핑몰의 경우, 보석 디자인이 핵심 하위도메인이고, 쇼핑몰은 일반 하위도메인이다.
  • 새로운 솔루션으로 변경될 수도 있다. (버그 수정, 보안패치로 인해)

 

지원 하위 도메인(Supporting subdomain)이란?

  • 회사의 비즈니스를 지원하는 활동.
  • 어떤 경쟁력도 제공 하지않는다. 비즈니슬 로직은 간단하다. (CRUD)
  • 외부 솔루션을 연동하는 것보다 자체 솔루션 구현이 더 간단하고 저렴하다.
  • 자주 변경 되지 않는다. 
  • 고도의 숙련된 기술을 요하지 않기 때문에, 새로운 인재를 양성하기에 적합하다. 

 

 

도메인 전문가 (Domain expert)

  • 모델링하고 코드로 구현할 비즈니스의 모든 복잡성을 알고 있는 주제 전문가이다.
    • 즉 요구사항을 제시하거나 소프트웨어를 최종으로 사용하는 사람이 도메인 전문가다.
  • 시스템 분석가와 엔지니어는 도메인 전문가의 멘탈 모델을 소프트웨어으이 요구사항과 소스코드로 변환한다.

02. 도메인 지식 찾아내기

핵심 키워드

유비쿼터스 언어

 

도메인 지식 찾아내기

  • 도메인 전문가가 될 필요는 없지만, 그들이 쓰는 동일한 비즈니스 용어를 이해하는 것이 중요하다.
  • 용어를 이해한다는 것은, 도메인 전문가와 대화하며 그들의 멘탈모델(=생각하는 방식)을 모방하는 것이다.

 

유비쿼터스 언어, 왜 필요할까?

도메인 지식이 도메인 전문가, 소프트웨어 분석가, 소프트웨어 요구사항, 개발자를 거쳐 코드에 작성될때, 정보의 손실이 발생한다.

이를 막기 위해 도메인 주도 설계는 '유비쿼터스 언어'를 제안한다.

 

유비쿼터스 언어란?

  • 비즈니스 도메인을 설명하기 위해, 단일화 된 언어 체계를 쓰는 것이다. 
  • 비즈니스 언어이므로, 기술 용어는 빼고 비즈니스 도메인에 관한 용어로만 구성해야한다.
  • 도메인에 대한 멘탈 모델을 잘 나타내면 된다.

 

유비쿼터스 언어 정의시 주의사항

  • 모호한 의미는 안된다.
    • e.g. 다의어 정책(Policy) 대신, 보험 계약(InsuranceContract)와 같은 명확한 모델을 만들어야한다.
  • 동의어 대신 하나의 뜻만 나타낼 말을 골라라.
    • e.g. '사용자'를 구체적인 단어로 변경하여야한다.
      데이터 분석이 목적이라면 '방문자'를, 기능 사용자를 의미한다면 '계정'이 바람직하다.

 

비즈니스 도메인 모델

유비쿼터스 언어를 정의하기 위해서는, 도메인 내 어떤 모델이 있는지 정의해야 한다. 

모델은 실세계의 복제가 아니다. 목적을 달성하는데 필요한 세부사항만 포함한다.

예를 들어, 세계지도는 한국의 지하철 노선정보까지 포함할 필요 없다. 대신 각나라의 이름만 나타내면 된다.

 

유비쿼터스 언어를 어떻게 잘 유지할까?

  • 용어집(glossary)을 이해 관계자들이 함께 작성하라. 
  • 유스케이스와 거킨테스트를 용어집과 함께 작성하라.
    • e.g. 거킨테스트의 예시
      시나리오: 상품을 주문한다.
      Given: 사용자가 상품을 확인한다.
      When: 주문하기 버튼을 누른다.
      Then: 주문완료 알림이 사용자에게 전송되고, 판매자는 새로운 주문에 대한 알림을 받는다.

 

유비쿼터스 언어를 어떻게 발전시킬까.

  • 도메인 전문가에게 끊임 없이 질문해야한다.
  • 도메인 전문가와 대화하며, 도메인의 특성에 대해 파악하고, 도메인 지식끼리의 모순을 발견해야한다.
  • 이는 도메인 전문가가 도메인에 대해 더 자세히 이해할 수 있는 계기가 되기도 한다.