25 Apr 2019

도메인 주도 설계 03 - 모델과 구현의 연계

프로젝트에 도메인 모델은 있지만 소프트웨어를 개발하는 데 아무런 도움을 주지 못한다면, 의미가 없다.


Model Driven Design

코드와 기반이 되는 모델이 서로 긴밀하게 연결되면 코드에 의미가 부여되고, 모델과 코드가 서로 대응하게 된다.

도메인 모델이 전혀 없고 기능만 구현하기 위해 코드를 작성하는 프로젝트에서는 지식 탐구와 의사소통의 이점을 거의 살리지 못한다. 설계의 기반이 되는 개념이 부족한 소프트웨어는 소프트웨어의 행위를 설명하지 못한 채 그저 유익한 일을 수행하는 매커니즘 정도밖에 되지 못한다.

설계 혹은 설계의 주요 내용이 도메인 모델과 대응하지 않는다면, 모델은 가치가 없어지며 소프트웨어의 정확성도 의심스러워진다. 모델과 설계 사이의 복잡한 대응은 이해하기가 힘들고 설계가 변경되면 유지보수도 불가능해진다. 분석과 설계가 동떨어지고, 그에 따라 각자의 활동에서 얻은 통찰력이 서로에게 전해지지 않는다.

분석은 도메인의 개념을 알기 쉽고 표현력있는 방식으로 포착해야 한다. 설계에서는 소프트웨어가 동작할 배포 환경에서 효율적으로 수행되고, 다루어야 할 문제를 올바르게 해결할 수 있는 구성요소를 기술해야 한다.

분석과 설계 관점에서 모두 효과적인 모델이 필요하다. 모델이 나타내는 바가 구현할 때 비현실적으로 보인다면 새로운 모델을 찾아야 한다. 모델이 핵심개념을 충실히 표현하지 않을 경우에도 마찬가지다.

소프트웨어를 설계할 때는 도메인 모델을 있는 그대로 반영하여 모델과 설계의 대응을 분명하게 해야한다. 모델을 검토하여 자연스럽게 구현될 수 있도록 수정해나가야 하며, UBIQUITOUS LANGUAGE를 지원하는 것과 더불어 분석과 설계의 두 가지 측면을 충분히 만족하는 단 하나의 모델을 만들어야 한다.

모델로부터 설계와 기본적인 책임 할당에 사용한 용어를 도출하고, 코드를 작성할 때 그러한 용어를 사용하면 코드가 모델을 표현한 것이 되고 코드의 변경이 모델의 변경으로 이어질 수 있다.

도메인 주도 설계는 모델을 동작하게 만들어 애플리케이션의 문제를 해결한다. 지식 탐구를 바탕으로 팀은 도메인 개념을 반영하는 실제적인 모델을 만든다. Model Driven Design에서는 모델과 구현을 매우 밀접하게 연결하는 것이 중요하다. UBIQUITOUS LANGUAGE는 개발자와 도메인 전문가, 소프트웨어 사이에 흐르는 모든 정보의 통로에 해당한다.


Tags:
Stats:
0 comments