What is Domain Model (3)

지금까지 모델과 모델링이 정확히 무엇인지 풀어보았다. 이 글에서는 도메인 모델에서 핵심적인 단어인 도메인에 대해 이야기를 해보겠다.

도메인이란 어느 하나의 분야에만 사용하는 개념은 아니고 모든 산업분야에서 쓰이는 추상적인 개념이다. 그런 도메인은 오히려 앞에서 장엄하게 풀이했던 모델과 모델링보다 더 함축적인 의미를 담고있다. IT 분야 종사자들은 웹 분야에서 사용하는 ‘도메인 주소’에서 그 뜻을 유추 할 수 있는데 그 역시 도메인의 본질적인 뜻을 담고있으며 어느 개념도 그것을 대체할 수 없을 것이다. 그럼 도메인을 자세히 파헤치기전에 그 뜻의 원천을 알아보면서 도메인의 윤곽을 그려보자.

The Ancestor of Domain

알다시피 영어는 여러 곳에 뿌리를 둔 언어다. 그런 영어에서의 도메인(domain)은 그 조상 중 하나인 라틴어의 도무스(domus)에서 유래되었다. 도무스는 구글 검색 결과로 나온 이미지를 살펴보면 그 뜻이 분명하게 전해지는데 바로 ‘집’을 뜻한다. 현재는 이탈리아어까지 이어져있고 실제로 구어로 쓰이는 단어다. 도무스에서 유래한 또 다른 단어는 도메인과 사촌격인 도메스틱(domestic)이 있다. 우리가 흔히 도메스틱 브랜드(domestic brand)라고 말하는 것은 국내에서 상품을 생산하고 판매하는 브랜드이다. 그럼 이 도무스의 피상적인 뜻인 ‘집’은 무엇을 내포하고 있고 왜 위와 같은 뜻으로 확장이 됐을까?

집은 물리적인 경계로 하여금 남을 구분하는 기능을 갖는다. 이런 집(domus)의 기능으로 자연스럽게 자신만의 영역을 낳으며 이 영역을 도메인(domain)이라 부른다. 단순히 다른 곳과 구분하고 범위를 정의하는 다른 단어들(area, zone, territory)로 도메인 모델의 도메인을 대체(replace) 할 수도 있었다. 하지만 도무스는 그 단어들과 다르게 더 구체적으로 ‘신의 집’이라는 다소 복합적인 뜻을 가지며 다른 단어들과 차이를 보인다. 신의 집은 신에게 결속된 장소이고 결국 신성한 장소로 해석 할 수 있다(기독교에서는 신을 뜻하는 dominus가 있다). 일반화하여 생각하면 결국 도메인은 영역을 뜻하지만 그 영역은 무엇인가 결속되어 있고 그 무엇의 활동, 기능, 효과가 미치는 범위가 바로 여기서 말하고 싶은 ‘도메인’이라 할 수 있다.

The Santa Maria Del Fiore Cathedral dome, Image – jonathan-korner 피렌체의 두오모(duomo) 성당. 주변 건축물보다 더욱 높고 우뚝하게 솟은 건축 양식이 하느님에게 내 뜻을 더 가까이 전하려는 소망을 표현한다. 두오모도 신의 집인 도무스(domus)에서 유래되었다. The Santa Maria Del Fiore Cathedral dome, Image – jonathan-korner

도메인은 현실 세계에서 사물이 될 수도 있고 인간의 활동, 관심사가 될 수 있다. 이런 도메인의 틀로 한정지을 수 있는 대상은 다양할 수 있으며 그 중 하나의 특정 도메인을 잘 아는것을 도메인 지식(domain knowledge)이 풍부하다고 할 수 있다. 도메인이 영역을 뜻하다보니 그 도메인에 관련된 지식의 양과 수준을 평가할 때 ‘넓다’ 혹은 ‘좁다’라고 표현 할 수 있다. 가령, 금융권에서 오랫동안 몸을 담은 사람은 금융권 도메인 지식은 넓을 수 있지만 요식업 도메인 지식은 상대적으로 좁을 것이다.

Model Based Language

‘What is Domain Model(1)’의 글에서 모델의 핵심적인 특성은 대상을 단순화(simplication)한다고 설명했다. 복잡하고 무질서한 도메인 지식을 단순화하고 구조화하는 행위(모델링)를 효과적으로 수행하기 위해서는 도메인 지식이 풍부한 도메인 전문가의 개입이 필요하다. 도메인 전문가와 개발자(도메인 모델을 구현을 담당)는 모델링의 과정에서 서로의 의견, 정보가 공유되고 도메인 모델에 반영된다. 이렇게 만들어진 도메인 모델은 자연스럽게 의사소통의 도구로 자리잡는다.

고대시대 소의 벽화(모델)를 통해 후손들이 그 벽화의 의미를 쉽게 이해했던 것처럼 도메인 모델도 도메인 전문가와 개발자사이에서 언어의 역할을 하게된다. 이 언어가 도메인 주도 설계에서 부르는 유비쿼터스 언어(ubiquitous language)다. 언어의 본질은 그 언어를 사용하는 생명체들간의 약속이고 그 생명체들 사이에서 사실, 정보, 지식을 전달하는 기능이 있어야한다. 유비쿼터스 언어도 마찬가지로 다른 영역의 구성원들의 이어주는 중간 다리로써 중추적인 역할을 한다.

Summary

지금까지 도메인 모델의 설명을 하기까지 많은 개념을 설명하였다. 간단한 질문의 답이 이렇게 장엄하게 이어진 이유는 소프트웨어의 패러다임, 방법론등의 탄생 배경의 이해없는 개발은 소프트웨어의 본질을 해치고 복잡성을 높이기 때문이다. 이 글이 도메인 주도 설계를 시작하는 엔지니어들의 작은 도움이 되었으면 좋겠다.