정확히 알지 못하며 사용하고 있는 도메인이라는 표현에 대해
나름대로의 정의를 이해하고, 정리해보고 싶었습니다!
domain의 어원과 사전적 정의
정확히 domain 이라는 단어는 16세기 말 최초에 기록되었으나
비슷한 의미의 다른 형태로 아주 오래전부터 사용되었습니다
군주의 소유물, 영토의 의미로 비슷한 형태의 단어가 아주 오래전부터 사용되어 왔습니다.
16세기 말 최초로 domain이라는 단어의 기록이 발견되었구요.
메리엄 웹스터 사전의 주요 해석을 보자면,
현대의 domain은 지방 정부의 관할, 학문 영역, 활동 영역, 인터넷 주소 하위 구분 등의 의미로 사용되고 있습니다.
군주의 소유물, 영토를 의미하던 단어가,
현대에 들어서는 보다 넓은 문맥에서 영역을 구분하는 의미로 사용됨을 알 수 있었네요!
DDD의 Domain 해석 시도
DDD는 Domain driven design을 의 약자입니다.
아마 소프트웨어 개발 영역에선 여기서 사용된 domain의 문맥상 의미를 사용할 것 같네요!
사전적 의미를 이해했다면, 이제 DDD의 Domain이 의미하는 바를 이해하면 되겠다 싶었습니다.
검색 중에 MS의 좋은 포스팅을 발견해서 큰 도움을 받았습니다.
해당 포스팅에서 소개하는 DDD의 핵심들은 다음과 같습니다.
DDD는 설계, 디자인패턴만을 의미하지 않는다.
DDD는 App을 만드는 방법이자, 프로젝트에서 팀이 일하는 방법이다.
단어 선택으로 인한 오해가 없도록 도메인 전문가는 명확, 간결, 구체적으로 요구사항을 전달한다.
개발자는 기술적 용어가 아닌 누구나 이해할 수 있는 언어를 사용해서 소통한다.
도메인 전문가와 개발자는 가까이에서 함께 일하며 직접 소통한다.
가령, 블랙잭을 프로그램을 DDD로 만든다면,
블랙잭 딜러분, 블랙잭 플레이어, 개발자가 한 팀으로, 가까이에서, 직접 소통하며 협업해야 할 것입니다.
또한 개발자는 경력 많은 딜러, 플레이어로부터 요구사항을 전달받는 과정에서
블랙잭 게임의 진행 흐름과 규칙 등을 학습하게 될 겁니다.
그리고 이 지식들을 가지고 어떻게 프로그램으로 풀어낼지 설계해서
누구나 이해할 수 있는 언어로 딜러, 플레이어에게 전달해서 자문을 구합니다.
즉, DDD는 개발자 혼자 하는 것이 아니라,
개발자와 해당 분야의 전문가와 함께 하는 설계의 과정이 아닌가 생각됩니다.
그리고 여기서 해당 분야 전문가를 도메인 전문가로 보통 표현하는데,
이를 미루어 보면 여기서 도메인은, 문제 해결 대상 분야, 해당 비즈니스 영역을 의미한다고 할 수 있겠습니다.
최초 의문에 해석 시도
사용되는 맥락에 따라 도메인을 어떻게 해석해야할지
나름대로의 해석을 시도해봤습니다!
도메인의 정의
- 사전적 의미 : 다른 곳과 구분 가능한 영역, 분야
- 개발 맥락에서의 의미 : 해결하고자 하는 문제 영역, 핵심 비즈니스 요구사항
문맥에 따른 도메인의 다양한 해석
도메인에 집중하라
- 해당 비즈니스 영역에 대한 규칙을 더 파악하라
- 핵심 비즈니스 로직을 보완하라
(개발자간 소통에선 단순히 "도메인" 이라고만 하면 소통에 어려움이 생길 수 있다고 생각합니다.)
TDD를 통해 도메인 지식을 쌓다
- 비즈니스 문제 해결을 위한 책임, 역할, 협력을 발견하는 과정
- 개발자 관점에서의 도메인 설계
- 단, TDD 맥락에서가 아니라 단순히 도메인 지식 이라고만 하면 해당 비즈니스 영역의 규칙을 의미할 수 있음
개발 맥락에서 도메인, 도메인 클래스, 도메인 패키지가 지켜야할 규칙
- 핵심 비즈니스 로직 이외의 것들은 제외되어야 함 (가령 View나 Dto는 패키지 구분 상 domain이 아닙니다)
- domain 외 요소를 위한 로직이 포함되지 않아야 함. (가령 View 출력을 위한 로직은 domain에 없어야 합니다)
휴~ 이젠 커뮤니케이션 과정에서 도메인이라는 표현이 나와도,
나름의 해석과 그 근거를 제시할 수 있을 것 같아서 속이 편안~ 합니다 :)
도메인에 대한 학습 결과를 공유하기 위해 만들었던 자료를 첨부했습니다.
참고
'우아한테크코스 4기' 카테고리의 다른 글
Level 1을 정리하는 레벨 인터뷰 후기 (2) | 2022.04.22 |
---|---|
다중 행 Insert 최적화 (Level 1 체스 미션 초기 체스판 구성) (2) | 2022.04.09 |
객체의 행동으로 표현되는 책임과 역할 (객체지향의 사실과 오해) (2) | 2022.03.25 |
💻 코딩을 지탱하는 기술을 읽었습니당 ! (4) | 2022.03.08 |
🏎️자동차 경주와 💸로또에서 배운 것들 (2) | 2022.03.08 |