IT Paradigm/DDD

도메인이란? 도메인 주도란?

yeTi 2023. 12. 8. 18:35

안녕하세요. yeTi입니다.
오늘은 에릭 에반스도메인 주도 설계를 읽다가 도메인의 의미와 도메인 주도라는 것의 의미를 생각해본 결과를 공유하고자 합니다.

도메인이란

에릭 에반스DDD 함께 읽기를 진행하면서 15장 디스틸레이션에 핵심 도메인을 다시 읽을 기회가 생겼습니다.

그런데 문득 도메인이라는 단어를 굉장히 모호한 개념으로 인식하고 있다고 느껴, 무엇을 의미하는지 찾아보고 싶어졌습니다.

그래서 먼저 영어사전에서 도메인이라는 단어의 뜻을 찾아봤습니다.

an area of interest or an area over which a person has control, 관심 영역 또는 개인이 통제할 수 있는 영역

신기하게도 관심 영역이었습니다. 막연하게 어떤 분야, 업무 정도로 생각했던 개념이 보다 단순하게 관심을 둔 영역이었다는 것이 신기하게 다가왔습니다.

이어서 DDD에 있는 조영호님의 추천사를 찾아봤습니다.

소프트웨어의 복잡성은 기술적인 이슈보다는 소프트웨어가 발을 디디고 있는 문제 도메인에서 기인합니다. <중략> 사람들의 욕망과 욕구가 개발자에게 전달됐을 때 우리는 그것을 도메인이라고 부릅니다.

막연하게 도메인이라고 생각했던 것이 관심을 둔 영역을 정의한 것이었고 보다 구체적으로 우리가 풀어나가고자 하는 영역도메인이라고 정의한다는 것을 알게됐습니다.

핵심 도메인이란

그렇다면 단순하게 관심있는 영역(도메인) 만 가지고 개발을 하면 될까요?

개발이라는 활동은 명확히 정의된 것들만 실현할 수 있는 활동입니다. 계속 책을 읽다보니 결국 문제에서 출발한다는 생각이 들었습니다.

도메인 문제를 다루던 경험 많은 객체 개발자가 오래 지속되는 도메인 객체에 주석을 다는 방법을 고안했다는 것이다. - p.431

이처럼 우리는 현실의 문제를 해결하기 위해 개발이라는 활동을 합니다. 따라서 우리가 개발 활동을 함에 있어서 중요한 것은 문제를 식별하는 것입니다.

그리고 이처럼 도메인 문제(우리가 풀어나가고자 하는 영역이 가진 문제) 가 식별되어야 역량을 집중하고 우선 순위를 정의할 수 있는 중심을 가질 수 있습니다.

핵심 도메인은 이것을 하자는 것입니다. 많은 관심(우리가 풀어나가고자 하는 문제)사들 중에 진정한 업무적 자산(풀고자하는 문제와 만들어내는 가치)을 의미하고 일반 하위 도메인은 핵심 도메인을 풀어나가기 위해 보조하는 역할로 구분하자고 이해가 됐습니다.

규모가 큰 시스템을 설계할 때는 시스템에 기여하는 구성요소가 무수히 많은데, 모두 복잡하고 성공에 절대적이어서 진정한 업무 자산에 해당하는 도메인의 본질적인 측면이 가려지거나 방치될 수 있다. - p.430

왜냐? 결국 개발한 서비스는 가치를 확장하고 지속성을 가지며 성장해나가야 하는데 물리적 한계(인간의 인지능력의 한계, 자원의 한계)내에서 개발 활동을 하려면 가장 중요한 부분부터 역량이 닿는 곳까지 해야한다는 것입니다.

이것이 핵심 도메인의 가치라는 생각이 들었습니다.

도메인 주도란

이어서 도메인 주도라는 말은 우리가 풀어나가고자 하는 영역의 문제를 중심으로 개발 활동들의 행태를 정의해간다는 것을 의미하고, 도메인 주도 설계란 설계활동의 중심에 우리가 풀어나가고자하는 영역의 문제를 두라는 것으로 다가왔습니다.

안영회 대표님께서 표현하시는 현장에서 시작하라는 말씀이 와닿습니다.

그리고 이렇게 의미를 해석하니 굉장히 애자일스럽다는 생각이 들었다.

유비쿼터스 랭귀지와 바운디드 컨텍스트

도메인 주도라는 말을 우리가 풀어나가고자하는 영역의 문제를 중심으로 한다고 정의를 하니, 유비쿼터스 랭귀지바운디드 컨텍스트도 자연스럽게 따라온다는 생각이 듭니다.

우리가 풀어나가고자하는 영역내 문제의 해결책을 찾으려면 현실에서 문제의 해결책이 나와야합니다.

결국 문제를 해결하는 과정에서 사람간에 의사소통이 필요하고 의사소통을 위한 수단으로 언어라는 것을 활용한다는 것입니다.

그런데 신기한 것은 언어라는 것은 사람이 살아온 삶의 맥락 따라 서로 다른 의미를 지니는데.

서로 다른 의미를 가진 개념으로 의사소통을 하면 문제를 해결하기가 힘들다는 것입니다.

이를 인식하자는게 바운디드 컨텍스트이고, 이를 정리하자는게 유비쿼터스 랭귀지인 것이다.

도메인 모델

도메인 모델이란, 우리가 풀어나가고자 하는 영역을 선택적으로 단순화하고 의식적으로 구조화한 형태입니다.

모델은 지식을 선택적으로 단순화하고 의식적으로 구조화한 형태이다. - p.185 객체지향의 사실과 오해

현실의 복잡성을 단순화하는 과정이 모델링입니다. 그리고 모델링의 과정에서 추상화라는 의식을 활용합니다.

결론

역시 생각을 명확하게 하기 위해서는 언어의 명확한 개념을 아는것에서 출발하는 것이 중요하다는 생각이 들었습니다.

어제(12월 7일) 진행한 함께 읽기 모임에서도 도메인을 위와 같이 설명드렸더니 보다 명료하게 인식된다는 피드백이 허무맹랑하게 정리한 개념들은 아니구나 라는 안도감이 들었습니다.

그리고 덧붙여진 생각들로 그 동안 도메인이 업무나 서비스의 경계를 표현하는 의미에서 새로운 시각으로 바라볼 수 있는 경험이 되었고, 실무에서 정리하던 도메인의 개념을 다시 한번 생각해 봐야겠다는 것들이 의미있는 개발 활동으로 이어진다는 느낌을 받았습니다.

AI 시대가 다가오는 만큼 기술의 구현보다 개념을 활용한 문제정의가 중요해진다고 느끼고 있습니다.

구현을 잘하는 사람보다 개념을 명확히 정의하고 문제를 바라보고 해결할 수 있는 사람이 AI와의 경쟁시대에 우위를 가져갈 수 있을 것이라는 생각이 들었습니다.

개인적으로 재미있는 시간이었습니다.

지난 기록