This is an old revision of the document!


Domain-Driven Design

Tackling Complexity in the Heart of Software

복잡한 도메인(문제 영역)을 이해하고 모델링하고, 공통 언어로 소통하는데 초점을 맞추는 방법론.

  • DDD는 모델을 동작하게 만들어 애플리케이션의 문제를 해결한다.p.62
    • 지식 탐구 → Ubiquitous Language 사용 → (단일) 모델 생성 → 모델과 구현을 밀접하게 연관 시킴
  • DDD의 목표는 기술보다는 도메인에 대한 모델에 집중해 더 나은 소프트웨어를 만들어내는 것이다.p.154

본문 내용 출처 : Eric Evans. 『도메인 주도 설계』. 이대엽(역). 위키북스, 2011.

서문

1부 동작하는 도메인 모델 만들기

Part I: Putting the Domain Model to Work

서론

용어 정의

도메인

대개 컴퓨터와 관련 없다

  • 사용자가 프로그램을 사용하는 대상 영역
    • 사용자의 활동
    • 사용자의 관심사
모델

도메인 지식의 부담을 해소하기 위한 도구

  • 대상을 단순화 한 것
    • 어떤 사실을 해석한 것
    • 당면의 문제를 해결하는 것과 관련된 측면으로 추상화
      • 그 밖의 중요하지 않은 세부사항에는 주의를 기울이지 않는다!
  • 도메인 지식을 선택적으로 단순화하고 의식적으로 구조화한 형태
  • 도메인 지식을 조직화하고 가장 중요한 요소를 구분하는 팀의 합의된 방식 01 동작하는 도메인 만들기, 4p
  • 프로젝트에 참여한 사람들의 머릿속에 축적된 개념을 모아 놓은 것으로서 도메인에 대한 통찰력을 반영하는 용어관계로 표현된다. 02 의사소통과 언어 사용, 23p
    • 관계(relationships) : 모든 언어에 내재된 결합 규칙 02 의사소통과 언어 사용, 26p
도메인 모델
  • 특정한 다이어그램이 아니라
    다이어그램이 전달하고자 하는 아이디어
  • 도메인 지식을 엄격하게 구성하고 선택적으로 추상화한 것
  • 일련의 개념들을 모아놓은 것 77p

도메인 주도 설계에서의 모델의 유용성

DDD에서는 아래의 세 가지 기본적인 쓰임새에 따라 모델을 선택한다

  • 모델과 핵심 설계는 서로 영향을 주며 구체화된다 (3장 참고)
    • 모델을 의미 있게 만들고
      모델의 분석이 최종 산출물인 동작하는 프로그램에 적용되게끔 보장하는 것은
      모델과 구현 간의 긴밀한 연결
    • 모델을 이해한 바에 근거해 코드를 해석할 수 있기 때문
  1. 모델은 모든 팀 구성원이 사용하는 언어의 중추
    • 모델과 구현이 서로 연결 → 개발자와 도메인 전문가간의 번역이 필요하지 않음
  2. 모델은 지식의 정수만을 뽑아낸 것이다
    • 모델은 도메인 지식을 조직화하고 가장 중요한 요소를 구분하는 팀의 합의된 방식 → 공유 언어 사용!!

소프트웨어의 본질

해당 소프트웨어의 사용자를 위해 도메인에 관련된 문제를 해결하는 능력. 그 뿐만 아니라 모델링 기법을 연마해서 도메인 설계에 통달해야 한다.

  대부분의 유능한 개발자는 다뤄야 할 특정 도메인을 학습하는 데 관심이 많지 않으며,
  더군다나 도메인 모델링 기법을 쌓는 데는 더더욱 전념하지 않는다.
  엔지니어들은 자신의 기술력을 훈련할 수 있는 정략적인 문제를 좋아한다.

Chapter

2부 모델 주도 설계의 기본 요소

Part II: The Building Blocks of a Model-Driven Design

구현을 모델과의 밀접한 관계로 유지하기 위한 모델링과 설계의 우수 실천 법을 적용해야 한다.

도메인 주도 설계 과정을 탄력성 있게 만들려면 개발자들은 잘 알려진 근본 원리들어떻게 Model-Driven Design을 뒷받침하는지 이해해야 한다.

3개의 장은 패턴 언어로로 구성돼 있으며, 미묘한 모델의 특징과 설계 의사결정이 어떻게 도메인 주도 설계 과정에 영향을 주는지 보여주겠다

정교한 모델은 가장 근본적인 사항에 관심을 가질 때만 비로소 복잡성을 헤쳐나갈 수 있으며, 이는 팀에서 확신을 갖고 결합할 수 있는 상세 요소라는 결과로 나타난다.

Chapter

3부 더 심층적인 통찰력을 향한 리팩터링

Part III: Refactoring Toward Deeper Insight

리팩터링 수준

Levels of Refactoring

심층 모델

Deep Models

심층 모델/유연한 설계

Deep Model/Supple Design

발견 과정

The Discovery Process

Chapter

4부 전략적 설계

Part IV: Strategic Design

Chapter

domain-driven_design.1697537725.txt.gz · Last modified: 2023/10/17 11:15 by ledyx