본문 바로가기
도메인 주도 설계

도메인 모델링이란?

by simplify-len 2020. 10. 25.

에릭에반스의 도메인 주도 설계에서는

 소프트웨어 시스템의 일부를 설계할 때는 도메인 모델을 있는 그대로 반영해서 설계와 모델의 대응을 분명하게 하라. 또한 모델을 재검토해서 더욱 자연스럽게 소프트웨어로 구현될 수 있게 수정하라. 도메인에 관한 심층적인 통찰력을 반영하려 할 때도 마찬가지다. 이렇듯 견고한 UBIQUITOUS LANGUAGE를 지원하는 것과 더불어 분석과 설계의 두 가지 측면을 충분히 만족하는 단 하나의 모델을 만들어내야 한다.
 모델로부터 설계와 기본적인 책임 할당에 사용한 용어를 도출하라. 코드를 작성할 때 그러한 용어를 사용하면 코드가 모델을 표현한 것이 되고, 코드의 변경이 곧 모델의 변경으로 이어질 수 있다. 그 효과는 프로젝트의 나머지 활동에도 퍼져나가야 한다.

 구현을 모델과 그대로 묶으러면 보통 객체지향 프로그래밍과 같은 모델링 패러다임을 지원하는 소프트웨어 개발 도구와 언어가 필요하다.

 

코드를 작성하는 사람이 모델에 책임을 느끼지 못하거나 애플리케이션을 대상으로 모델이 동작하게 만드는 법을 모른다면 그 모델은 소프트웨어와 무관해진다. 코드의 변경이 곧 모델의 변경이라는 점을 개발자가 인식하지 못하면 리팩토링은 모델을 강화하기보다는 약화시킬 것이다.

 한편으로 모델러가 구현 프로세스와 분리돼 있을 경우, 구현상의 제약조건을 감안하는 능력을 결코 갖추지 못하거나 금방 잃어버릴 것이다. 모델이 효과적인 구현을 뒷받침하고 핵심 도메인 지식을 추상화한다는 MODEL_DRIVEN DESIGN의 기본적인 제약조건은 절반쯤 사라지고, 결과로 나타내는 모델은 실용적이지 못할 것이다. 결국 MODEL-DRIVEN DESIGN을 코드로 만드는 과정의 미묘한 사항들은 협업을 통해 알 수 있는데, 설계자가 구현을 하지 못해 개발자와 업무의 단절이 생기면 숙련된 설계자의 지식과 솜씨는 결코 다른 개발자에게 전해지지 못할 것이다.

반버논의 도메인 주도 설계 구현에서는

도메인 모델은 무엇인가?
 당신이 일하고 있는 아주 구체적인 비지니스 도메인에 관한 소프트웨어 모델이다. 객체 모델로 종종 구현되는데, 이런 객체는 비즈니스적 의미를 정확히 부합하는 이름을 가진 데이터와 행동을 담고 있다.
 특별하고 공들인 도메인 모델을 만드면서, 전략적인 애플리케이션이나 서브시스템은 DDD를 실행하고 매우 중요한 요소가 된다. DDD를 사용하면 당신의 모데인 모델은 크기가 작고 아주 집중된 형태일 가능성이 크다. DDD를 사용하면 전체 비즈니스 엔터프라이즈를 하나의 큰 도메인모델로 만들려고 하지 않아도 될 것이다. 

모델링이란 말의 정의는 무엇일까?

= 모델은 현실에 일어나는 사건 혹은 개념을 추상화한 개념

그럼 추상이란?

= 여러 사물 혹은 개념에서 공통적인 것을 뽑아 파악하는 것으로, 현실의 모든 것을 반영하는 것이 아닙니다. 상황에 따라서 취사선택이 필요합니다.

예를 들어, 고객(Customer)이라는 예시를 생각해봅시다.

고객이라는 개념은 어떤 성질을 가지고 있을까요?

- 직원입장에서는 서비스를 제공받는 사람.

- 가게 주인 입장에서는 재화의 가치를 지불해야 하는 사람.

즉, 어떤 관점에 따라서 같은 대상이라도 이야기 하고자 하는 중점이 달라질 수 있다는 것입니다. 당연히 개념을 추상화시킬 때 앞서 말한 성질에 따라서 달라질 것입니다.

 어떤 도메인의 개념을 빠짐없이 표현하는 것은 매우 어렵습니다. 고객이라는 개념에 대해서 모든 개념을 설명하는 것이 분명 어려울 것입니다. 그러므로, 코드로 나타낼 대상에 필요한 정보만 제공하는 것으로 한정짓는다면, 그것이 도메인이라는 객체가 책임과 역할을 부여하는 것이 됩니다.

조금 더 커진 도메인 예시로 살펴봅시다. 고객(Customer)과 주문(Order) 을 생각해봅시다. 

 고객은 재화를 통해 제공받고 싶은 것을 주문이라는 도메인에게 제공합니다.

여기서 고객은 주문을 할 수 있는 사람이라고 한정짓습니다. 주문은 고객에 의해 만들어지는 또다른 도메인이 됩니다. 고객과 주문으로 한정지었기 때문에 우리는 수월하게 도메인 모델링을 할 수 있었습니다.

즉, 어떤 사건 혹은 개념을 추상화하는 작업을 모델링이라 합니다. 그리고 그 모델링의 결과를 모델이라고 합니다.

그러므로, 도메인 모델링이란,

도메인 주도 설계에서는 도메인 개념을 모델링한 모델을 도메인 모델이라고 합니다.

반버논이나 에릭에반스의 책에서는 개념을 추상화시키기 위해서 각 도메인의 성질과 공통적인 부분을 뽑아내기 위해서 도메인 전문가와 끊임없는 대화를 통해서 이끌어내야 한다고 표현하고 있습니다.

 끊임없는 대화를 통해서 도메인 모델링이라는 결과까지 이끌어 가는 것. 그것이 도메인 주도 설계가 아닐까 싶습니다.

댓글