Yunseok's Dev Blog

배운 것을 적는 블로그입니다.

핵심 도메인(Core Domain)이란 무엇인가?

Core Domain이란 무엇인가?

우리의 소프트웨어를 차별화하고 구축할 가치가 있게끔 만들어주는 도메인을 말한다.

Core Domain이란 왜 필요한가?

규모가 큰 시스템은 복잡하고 시스템에 기여하는 구성요소들이 아주 많다. 이러한 구성요소들도 각각 역할을 하고 있어 모두 중요해 보인다. 하지만 이러한 요소들 때문에 정말 중요한 업무 자산에 해당하는 도메인의 본질적인 측면이 가려지거나 방치될 수 있다. 우리는 이런 혼합된 문제들 속에서 본질을 찾아내어 좀 더 값지고 유용한 형태로 만들어야 한다.

Core Domain을 어떻게 만드는가?

설계 측면에서 우선순위를 매겨야 한다.

도메인 모델을 가치 있는 자산으로 만들려면 모델의 핵심적인 측면을 다루기 수월해야 하고 애플리케이션의 가능성을 만들어내는 데 충분히 활용할 수 있어야 한다.

시스템의 비전을 수행하기에 충분한 심층 모델을 찾고 유연한 설계를 개발할 수 있게 Core Domain에 노력을 쏟아야 한다.

다른 부분에 대한 투자는 Core Domain을 어떻게 보조할 수 있는지 생각해야 한다.

모델을 요약해야 한다.

Core Domain을 찾아서 그것을 지원하는 다수의 모델과 코드로부터 쉽게 구별할 수 있는 수단을 제공해야 한다. 가장 가치 있고 전문화된 개념을 부각시키고 Core는 작게 유지해야 한다.

인력을 배분해야 한다.

Core Domain에 가장 재능 있는 인력을 할당하고 그에 따라 인력을 채용해야 한다. 오랜 기간 팀에 참여하고 도메인 지식에 관심이 있는 능력 있는 개발자와 업무를 깊이 있게 알고 있는 여러 도메인 전문가로 팀을 구성해야 한다. 외부 설계 전문가를 고용하는 것은 도움이 되지 않는다. 일시적으로 고용된 사람들은 구멍 난 양동이에 물을 붓는 것과 같다. 반면에 교육/멘토링 역할을 담당하는 전문가는 팀이 도메인 설계 기술을 쌓는 것을 돕고 팀원들이 미처 숙달하지 못한 정교한 원칙을 손쉽게 활용하게끔 만들어서 가치 있는 역할을 한다.

지속적인 발전

Core Domain을 파악하는 일은 반복 주기를 거쳐 발전한다. 어떻게 해서든 고유한 소프트웨어를 개발하는 일은 결국 전문지식을 축적하고 지식을 면밀히 검토해서 풍성한 모델을 만들어내는 안정화된 팀에서 해야 할 일이다. 지름길은 없다. 은탄환도 없다.

Sources