This is an old revision of the document!


02 의사소통과 언어 사용
  • 모델은 프로젝트에 참여한 사람들의 머릿속에 축적된 개념을 모아 놓은 것으로서
    도메인에 대한 통찰력을 반영하는 용어관계로 표현된다.
    • 이러한 용어상호관계는 기술적인 개발을 할 수 있을 만큼 충분히 정확한 동시에 도메인에 맞게 조정된 언어의 의미체계를 제공한다.
    • 모델 기반 의사소통은 UML상의 다이어그램으로 한정되어서는 안된다. 모든 의사소통에 스며들 필요가 있다.
Ubiquitous Language (보편 언어)
번역은 의사소통을 무디게 하고 지식 탐구를 빈약하게 만든다
  • Ubiquitous Language를 구성하는 어휘
    • 클래스와 주요한 연산의 이름
    • 모델 내에서 명시적으로 드러나는 규칙을 토론하기 위한 용어
    • 모델에 부과된 높은 수준의 구성 원칙(14장과 16장엣 논의할 Context Map과 대규모 구조 같은)에서 비롯된 용어
    • 팀에서 일반적으로 사용하는 도메인 모델에 적용하는 패턴의 이름
  • 모델 기반 언어는시스템의 산출물뿐 아니라 업무와 기능을 기술할 때도 사용해야 한다.
    • 다이어그램과 문서에서, 그리고 특히 말할 때 동일한 언어를 사용하라.
  Ubiquitous Language의 변화가 곧 모델의 변호라는 것을 인식하라.
  
  도메인 전문가는 도메인을 이해하는 데 부자연스럽고 부정확한 용어나 구조에 대해 반대 의사를 표명해야 한다.
  개발자는 설계를 어렵게 만드는 모호함과 불일치를 찾아내는데 촉각을 곤두세워야 한다.
  • 예제 : 화물의 운송 항로 고안하기 → 사용자와 개발자가 동일한 언어로 이야기 하는가?
    • 소프트웨어가 업무에 어떤 의미를 주는가? → 사용자 == 도메인
    • 소프트웨어가 기술적으로 어떻게 동작하는가? → 개발자
크게 소리내어 모델링하기

요구사항이나 설계를 위한 논의에 참석하게 되어 경청했을 때, 공통 언어를 쓰고 있는가?

  모델을 정제하는 가장 좋은 방법은
  가능한 모델 변경을 구성하는 다양한 요소를
  큰소리로 말하면서
  말하기를 통해 살펴보는 것이다
  Ubiquitous Language를 논의(특히 개발자와 도메인 전문가가 시나리오와 요구사항에 대해 충분한 이야기를 나눠 해결하고자 하는)할 때 사용하면
  ...
  자연스럽게 다이어그램만으로는 일어날 수 없는 방식으로
  말로써 언어를 공유하게 되는 것이다
시스템에 관해 이야기를 주고받을 때 모델을 사용하라. 모델의 요소와 상호작용을 이용하고 모델이 허용하는 범위에 개념을 조합하면서 시나리오를 큰 소리로 말해보라. 표현해야 할 것을 더 쉽게 말하는 방법을 찾아낸 다음 그러한 아이디어를 다이어그램과 코드에 적용하라.
한 팀, 한 언어

개발자와 도메인 전문가(혹은 사용자) 사이에 공유된 동일한 도메인 모델에 공통 언어를 사용해라

종종 기술 담당자는 업무 전문가에게 도메인 모델을 보여 줄 필요가 없다고 생각한다. (추상적, 기술적인 이유로) …

모델의 핵심은 도메인 전문가의 관심을 끌어야 한다. …

도메인 전문가는 해당 분야에 대해 다소 심층적으로 사고할 수 있는 능력을 갖추고 있다고 봐야 한다. 수준 높은 도메인 전문가도 해당 모델을 이해하지 못한다면 모델이 잘못된 것이다.

Ubiquitous Language의 확장 영역1)의 언어에는 별개의 모델을 반영하면서 같은 도메인에서 씌는 대체 어휘가 포함되어 있어서는 안 된다.
문서와 다이어그램

다이어그램은 모델을 설명하는 수단으로 사용하고, 세부사항은 코드에 반영하라.

UML은 해당 객체의 개념적 정의를 전해주지 못한다. …

문제는 사람들이 UML을 통해서만 객체 모델이나 설계를 전달해야 한다는 강박감을 느낄 때 생긴다.
많은 객체 모델 다이어그램은 지나치게 완전한 동시에 많은 부분이 생략돼 있다. 객체 모델이 지나치게 완전해지는 까닭은 사람들이 앞으로 코딩할 것들을 모조리 모델링 툴에 집어넣어야 한다고 생각하기 때문이다. 이러한 세부 사항이 너무 많으면 어느 누구도 나무만 보고 숲은 보지 못한다.

하지만 그러한 모든 세부사항에도 불구하고 속성과 관계는 객체 모델의 절반에 불과하다. 이러한 객체의 행위(behavior)와 제약 조건(constraint)은 그렇게 쉽게 설명되지 않는다. 객체 상호작용 다이어그램은 설계에서 까다로운 부분들(tricky hostpots)을 설명할 수 있지만, 대부분의 상호작용은 그런 방식으로 표현할 수 없다. 다이어그램을 만들고 또 그것들을 해석하자면 해야 할 일이 너무 많다. 그리고 다이어그램은 여전히 모델의 목적을 암시하는 데 그친다. 제약 조건과 단언(assertion)까지 포함하려면 텍스트를 작은 괄호에 감싸서 다이어그램에 집어넣는 수밖에 없다.

UML 다이어그램은 모델의 가장 중요한 두 가지 측면을 전달할 수 없는데, 그것은 바로 모델이 나타내는 개념의 의미와 모델 내 객체의 행위다.
다이어그램은 의사소통과 설명의 수단이며 브레인스토밍을 촉진힌다. 이러한 목적은 다이어그램이 최소화되었을 때 가장 잘 달성한다. 전체 객체 모델을 전부 포괄하는 다이어그램은 의사소통이나 설명이라는 목적을 달성하지 못한다.
이러한 다이어그래은 읽는 이를 세부사항으로 압도하고 다이어그램의 의미가 누락돼 있다.
설계의 생생한 세부사항은 코드에 담긴다.

모델은 다이어그램이 아니라는 점을 항상 명심해야 한다.
(다이어그램은 모델을 전달/설명하기 위한 수단일뿐이다.) …

잘 작성된 코드는 UML만큼 표현력이 있다.

글로 쓴 설계 문서

실행 가능한 기반

설명하기 위한 모델

1) 개발자와 사용자(혹은 도메인 전문가)가 사용하는 전문용어의 영역
domain_driven_design/02_communication_and_the_use_of_language.1691220438.txt.gz · Last modified: by ledyx