2. 도메인 지식 찾아내기
- 효과적인 소프트웨어 솔루션을 설계하려면 적어도 기본적인 비즈니스 도메인 지식이 필요하다.
- 이런 지식은 도메인 전문가의 몫이다.
- 우리는 도메인 전문가가 될 필요도 없고 될수도 없다.
- 결국 도메인 전문가를 이해하고 그들이 쓰는 돌일한 비즈니스 용어를 쓰는 것이 중요하다.
- 도메인 전문가가 문제를 생각하는 방식, 즉 멘탈 모델을 모방해야 한다.
- 소프트웨어 프로젝트의 성공은 도메인 전문가와 소프트웨어 엔지니어 간의 효과적인 지식공유에 달렸다.
커뮤니케이션
- 소프트웨어 프로젝트가 실패하는 이유에 대한 연구에서 효과적인 커뮤니케이션이 지식 공유와 프로젝트 성공에 필수라는 것을 밝혀냈다.
- 전형적인 소프트웨어 개발 생애주기에서 도메인 지식은 분석모델로 알려진 엔지니어 친화적인 형태로 변환된다.
- 분석 모델은 도메인 지식 이면에 존재하는 비즈니스 도메인에 기반하기보다는 시스템 요구사항을 설명한 것에 지나지 않는다.
- 의도는 좋지만, 이런식의 중재는 지식을 공유하는 데 해를 끼친다.
- 모든 변환은 정보를 잃게 만든다.
- 이 같은 문제를 해결하기 위해 도메인 주도 설계는 도메인 전문가가 소프트웨어 엔지니어에게 지식을 전달하기 위한 더 나은 방법을 제안하는데, 유비쿼터스 언어가 바로 그것이다.
유비쿼터스 언어란?
- 참가자들이 효과적으로 소통하기 위해 변환에 의존하지 말고 같은 언어를 사용하는 것
- 도메인 주도 설계는 도메인 지식을 계속해서 변환하는 대신(도메인 → 분석 모델 → 요구사항 → 설계 → 소스코드), 비즈니스 도메인을 설명하기 위한 단일화된 언어 체계를 세우고자 하는데, 이것이 유비쿼터스 언어이다.
- 유비 쿼터스 언어는 비즈니스 언어이다.
- 유비 쿼터스 언어는 반드시 정확하고 일관성이 있어야 한다.
비즈니스 도메인 모델
- 모델이란 사물이나 현상에서 의도한 관점만 강조하고 다른 측면은 무시하여 간단히 표현한 것이다. 즉, 특정 용도를 마음에 둔 추상화의 결과다.
- 모든 모델에는 목적이 있고 효과적인 모델은 그 목적을 달성하는 데 필요한 세부사항만 포함한다.
- 유용한 모델은 실세계의 복사본이 아니라 문제를 해결하려는 의도가 있으며, 그 목적에 필요한 정보만 제공해야 한다.
- 모델은 본질적으로 추상화의 결과다.
- 추상화 개념은 불필요한 상세 정보를 생략하여 복잡한 문제를 다룰 수 있게 하고 당면한 문제를 푸는 데 필요한 정보만 남게 한다.
비즈니스 도메인 모델링
- 유비쿼터스 언어를 발전시키는 것은 사실상 비즈니스 도메인 모델을 구축하는 셈이다.
- 모델은 비즈니스가 기능을 어떻게 구현하느냐에 대한 도메인 전문가의 사고 프로세스인 멘탈 모델을 포착해야 한다.
- 효과적인 커뮤니케이션과 지식 공유는 성공적인 소프트웨어 프로젝트에 필수다.
- 소프트웨어 엔지니어가 소프트웨어 솔루션을 설계하고 개발하기 위해서는 반드시 비즈니스 도메인을 이해해야 한다.
- 도메인 주도 설계의 유비쿼터스 언어는 도메인 전문가와 소프트웨어 엔지니어의 지식 간극을 메워주는 효과적인 도구다.
- 대화, 문서화, 테스트, 소스코드 등 프로젝트 전반에 걸쳐 모든 이해관계자가 공유된 언어를 사용함으로써 커뮤니케이션과 지식공유를 강화한다.
- 효과적인 커뮤니케이션을 위해서는 유비쿼터스 언어에서 반드시 모호성과 암묵적 가정을 제거해야 한다.
- 유비쿼터스 언어를 육성하는 것은 지속적인 과정이다.
- 프로젝트가 발전함에 따라 더 많은 도메인 지식이 발견된다.
- 이런 통찰이 유비쿼터스 언어에 반영되는 것이 중요하다.