DDD ( Domain Drive Design )

황희윤·2022년 7월 9일
0
post-custom-banner

DDD는 전략적 설계와 전술적 설계로 나눈다.

전략적 설계

  • 무엇에 대해 논의한다.
  • 도메인을 분석하고, 서브 도메인과 그 가치와 중요도를 식별하고, 도메인에 대한 지식을 다양한 모델로 설계한다.

Domain

  • 기업이 제공하는 서비스
    ex) 페덱스 - 배송 서비스, 스타벅스 - 커피
  • DDD에서는 기존의 현업에서 IT로의 일방향 소통구조를 탈피하여 현업과 IT의 쌍방향 커뮤니케이션을 매우 중요하게 생각한다.

Subdomain

  • 한 도메인은 다시 여러 개의 하위 도메인(subdomain)으로 나눌 수 있다.
    ex) 온라인 서점이 최상위 도메인이라면, 하위 도메인으로는 주문, 배송, 결제, 정산, 회원, 리뷰 등이 있을 수 있다.
  • 서브 도메인은 중요도에 따라 핵심 서브도메인, 지원 서브도메인, 일반 서브도메인으로 나눈다.

핵심 서브도메인 (core subdomain)

  • 회사가 경쟁업체와 다르게 수행하고 있는 것
  • 가령 새로운 제품이나 서비스를 발명하거나, 기존 프로세스를 최적화하여 비용을 줄이는 것
    ex) 우버 - 새로운 방식의 승차 공유 서비스

지원 서브 도메인 (supporting subdomain)

  • 회사의 비즈니스를 지원하는 활동
  • 핵심 서브 도메인과 달리 어떠한 경쟁 우위도 제공하지 않는다.
  • 그러나 핵심 도메인을 성공시키기 위해서는 반드시 필요한 영역
  • 핵심 서브도메인 다음으로 중요한 영역

일반 서브 도메인 (generic subdomain)

  • 모든 회사가 같은 방식으로 수행하는 비즈니스 활동
  • 지원 서브 도메인과 마찬가지로 회사에 경쟁력을 제공하지 않는다.
  • 모든 회사에서 사용하고 있어서 더 이상 혁신이나 최적화가 필요 없다.

유비쿼터스 언어

  • 팀원들이 효과적으로 소통하기 위해 변환에 의존하지 말고 같은 언어를 사용하는 것
  • 비즈니스에 사용되는 언어로만 구성해야 한다.
  • 일관성이 있어야 하고 간단 명료하게 표현해야 한다.
  • 서로 다른 뜻을 가지는 동의어는 자제해야 한다.

    출처 : https://yoonbing9.tistory.com/121

모델

사물이나 현상에서 의도한 관점만 강조하고 다른 측면은 무시하여 간략히 표현한 것. 즉, 특정 용도를 목적으로 둔 추상적 결과

  • ex) 길 안내 지도, 지형도, 지하철 노선도

  • 이 지도 중 어느 것도 지구의 세부적인 모든 것을 나타내지는 않지만, 특정 목적을 지원하는 데 충분한 자료를 담고 있다.

  • 유용한 모델은 실세계의 복사본이 아니라 문제를 해결하려는 의도가 있고, 그 목적에 필요한 정보만 제공한다.

  • Bounded context : 도메인 모델이 구현되는 곳으로 복잡한 도메인들을 구분 짓고 경계를 만들며, 각각의 모델들이 특정한 의미를 갖고, 특정한 일을 수행한다. Bounded context는 독립적이지 않고 서로 상호작용해야 한다.

  • Event Storming : 도메인 내에서 일어나는 행동을을 찾아 Bounded Context 를 식별 하는 방법론이다.

전술적 설계

  • 전략적 설계보다 비즈니스 로직에 집중해서 문제를 어떻게 해결하는지에 집중한다.

  • 전략적 설계에서 도출된 바운디드 컨텍스트와 도메인을 이용하여 애그리거트 패턴, 엔티티와 값 객체 등을 구성하고 구현하는 활동이다.

엔티티 (Entity)

  • 엔티티는 주문, 회원, 상품과 같이 도메인의 고유한 개념을 표현한다.
  • 도메인 모델의 데이터를 포함하며 해당 데이터와 관련된 기능을 함께 제공한다.
  • 엔티티의 가장 큰 특징은 식별자를 가진다는 것 이다.
    ex) 주문 도메인에서 각각의 주문번호는 모두 다르므로, 주문번호가 주문의 식별자가 된다. 여기서 주문이 엔티티이고, 주문번호가 속성이다.
    • 주문에서 배송지 주소가 바뀌더라도 주문번호가 바뀌지 않는 것처럼 엔티티의 식별자는 바뀌지 않는다.

값 (Value)

  • 값이 가장 큰 특징은 식별자를 가지지 않는다는 것이다,
    ex) 배송지 주소, 주문 금액

애그리거트, 집합 (Aggregate)

  • 연관된 엔티티와 값 객체를 하나의 집합으로 묶은 개념
    ex) 주문이라는 애그리거트 속에 배송지 정보, 주문자, 주문 목록, 주문 금액 등이 하위 모델로 구성된다.
profile
HeeYun's programming study
post-custom-banner

0개의 댓글