도메인이란 무엇입니까?


104

소프트웨어 아키텍처 ( "도메인 모델", "도메인 기반 디자인"등)와 관련하여이 용어를 많이 봅니다. 나는 그것을 봤지만 많은 다른 정의를 얻습니다. 그래서 진짜 무엇입니까?


12
불행히도 나는 그것이 명확한 정의를 가지고 있지 않고 모호한 상황에서 많이 사용되는 단어 중 하나라고 생각합니다. 그래도 충분히 이해하면 이해하게됩니다. 내 요점은 여기에 표시되는 모든 답변을 읽은 후에도 사용법을 이해할 필요가 없다는 것입니다. 시간이 걸려요.
aaaaaa

15
@aaaaaa 정확하게 ... Humpty Dumpty는 경멸 적으로 미소를지었습니다. 허 피티 덤프 티는 "내가 한 단어를 쓸 때, 다소 경악 한 말로"이것은 내가 선택한 단어를 의미한다 "고 말했다.
emory

3
나는 명확한 정의가 없다는 것이 사실이라고 생각하지 않습니다. 일반적인 웹스터 정의를 살펴보면 "주권이 행사되는 지역", "물리적 특징으로 구별되는 지역"이라는 것을 알 수 있습니다. 수학에서 비슷한 정의-함수의 "도메인". 해당 지역을 담당하는 사람 또는 일부 기준에 따라 큰 것을 도메인이나 지역으로 분할 할 수 있습니다 . 모듈과 같은 종류. 그래서 (내 이해)은 '도메인 모델은'당신이 작업 할 수있는 모델입니다 귀하의 응용 프로그램의 비즈니스 로직. DDD는 또한 종류의 "지역"과 관련이 있습니다.
Sava B.

답변:


9

Eric Evans의 Domain Driven Design 책에서“도메인”이라는 단어는 특정한 의미를 갖습니다. 소프트웨어가 중요합니다.

에반스는 더 나아 간다. 그의 견해로는 동일한 소프트웨어로도 하위 도메인이 있습니다. 그리고 이것은 "전략적 디자인"을 다루는이 책의 일부입니다.

핵심 도메인, 지원 도메인 및 일반 도메인의 세 가지 "도메인"이 있습니다. 때때로 그는 이것을 하위 도메인이라고 부릅니다.

Evans는 또한 소프트웨어의 실제 비즈니스에 대해 깊은 관심을 가지고 있으며이 책은 개발자뿐만 아니라 소프트웨어와 비즈니스가 어떻게 협력 할 수 있는지를 알아야하는 건축가 및 관리자를 대상으로합니다. 전략적 디자인을 논의 할 때 그가 관심을 갖는 부분입니다. 그리고 이러한 하위 도메인.

따라서 핵심 영역은 소프트웨어의 경쟁 우위와“지평”을 모두 나타내는 소프트웨어의 일부입니다. 고객이 소프트웨어를 다른 소프트웨어와 비교하여 구매하는 이유는 소프트웨어의 일부입니다. 일반적으로 Evans는이 코드를 가장 적은 비율의 코드가 포함 된 도메인으로 간주합니다. 가장 중요한 20 %라고 생각할 수 있습니다. 그것은 실제로 선반에서 구입할 수없는 부분이며 전체 소프트웨어의 단일 모듈 또는 구성 요소 일 수 있습니다.

지원 도메인은 여전히 ​​중요하며 조직마다 고유 할 수 있지만 핵심 도메인만큼 중요하지는 않습니다. 그것이 없으면 소프트웨어는 가치가 없으며 핵심은 소프트웨어에 의존합니다. 소프트웨어에서 직접 작성한 여러 가지 모듈 일 수 있으며 중요하지만 지원적인 기능을 코어에 수행합니다.

일반 도메인은 사용자 정의가 가장 적고 어떤 의미에서는 소프트웨어의 가장 중요한 부분입니다. 집에서 직접 작성했을 수도 있지만 선반에서 구입하거나 잘 알려진 오픈 소스 소프트웨어를 사용하는 것이 더 효율적일 수 있습니다. 시스템의이 부분은 아마도 전체 도메인에 국한되지 않을 것입니다. 예를 들어 소포를 운송하는 운송 시스템 또는 환자를 관리하는 건강 기록 시스템이 있는지 여부에 관계없이 일반 도메인은 이러한 시스템의 일부이며 일반적입니다. 단순히 기능하기 위해서는 거기에 있어야합니다. 이것은 아마도 전체 시스템의 대부분을 구성하지만 반드시 그런 것은 아닙니다.

비즈니스 관점에서 핵심 도메인이 무엇인지 결정하고 개발 리소스에 집중하는 것이 중요합니다. Evans는 특히 InfoQ 사이트에서 이러한 개념에 대해 자세히 설명하는 많은 비디오를 보유하고 있습니다.

따라서 DDD의 경우 소프트웨어에서“도메인”에 대해 이야기하는 경우가 종종 있지만 그렇게 간단하지는 않습니다.

DDD의 개념이 더 넓은 소프트웨어 커뮤니티에 반드시 존재하는 것은 아닙니다. 다른 개발자, 저자 및 제품 사용자는 다른 아이디어와 정의를 가질 수 있습니다. DDD에 관해 저술 한 다른 저자들조차도 Evans의 저서에서 이러한 개념에 대해 글을 쓸 수도 있지만, 소프트웨어 프로젝트를 작성하고 계획 할 때이 개념이 여전히 유용하다고 생각합니다.


1
Re : 마지막 단락 : 소프트웨어 개발의 핵심 영역에 대해 어느 정도 동의해야합니까? 그러나 OOP가 무엇인지, 기능적 또는 다른 용어에 동의하는 것처럼 Humpty Dumpty는 오래 전에 승리했다고 생각합니다.

@nocomprende 아니오, 이러한 개념은 특정 시간에 특정 조직의 특정 개별 소프트웨어에만 해당됩니다. 따라서 MSFT Windows의 핵심 도메인은 시장 상황, 고객 기대치 등에 따라 달라집니다.
RibaldEddie

1
나는 "두 종류의 사람들이 있습니다 : 사람들을 두 종류로 나누는 사람들과 그렇지 않은 사람들이 있습니다." 그러나 ... 두 번째 종류의 사람들에게는 오직 한 종류의 사람들 만이있을 것입니다. – 무한 간접 오류 – 시스템 정지

@nocomprende 죄송합니다. 소프트웨어 개발의 핵심 영역에 대한“동의”부분은 농담이었습니다.
RibaldEddie

109

도메인은 당신이 소프트웨어를 사용하여 문제를 해결하기 위해 시도하고있는 실제 상황입니다. 각 도메인에는 해당 도메인의 일부인 전문 지식, 어휘 및 도구가 제공됩니다.

도메인의 특정 예는 "고속 회전 커터를 사용하여 복잡한 부품을 자동으로 가공"과 같은 것일 수 있습니다. 이를 달성하는 소프트웨어 및 하드웨어 시스템을 CNC 이라고합니다 .

도메인의 또 다른 예는 회사의 회계 부서입니다.

Martin Fowler의 추가 읽기
경계 컨텍스트


4
예. "도메인"을 읽으면 "(특정) 영역의 전문 지식이나 관심 영역으로 대체 할 수 있습니다."
KlaymenDK

1
명심해야 할 점은 소프트웨어의 영역이 실제로 인간이 달성하려는 것과 또는 이해하는 것과는 아무런 관련이 없다는 것입니다. 나는 내 차에있는 간단한 컴퓨터가 내가 알지 못하는 솔 연의 연소를 최적화하기 위해 일을하고 있고 솔직히 신경 쓰지 않을 것이라고 확신한다. 따라서 소프트웨어가 인간의 관점에 관한 것이며 원하는 것은 매우 위험한 오해입니다. 소프트웨어 시스템이 넓은 영역을 포괄하고 목표 선택의 인식과 기능이 향상됨에 따라 이는 유용 할 수 있습니다. 잠깐, 아시모프는 그렇게 오래 전에 그런 생각을하지 않았습니까?

1
@ user251748-글쎄, 그것은 사람들에 관한 것이라고 생각 합니다 . 사람들이 즉각적으로 이해하는 것은 아닙니다.
Sipo

38

예를 들어 전자 상거래 웹 사이트를 구축하는 경우 도메인은 "전자 상거래"가되며 고객 / 회사의 영업 관행과 관련된 프로세스를 포함하게됩니다. 따라서 도메인 모델은 제품, 송장 또는 운송 기록을 나타내는 것입니다.


7
음, 웹 사이트가 domain names도메인이라고도한다면 여기서 도메인이라는 단어를 어떻게 사용하고 있는지 명확히해야한다고 생각합니다.
YetAnotherRandomUser

@YetAnotherRandomUser-나를 위해, 그가 무엇을 의미했는지는 분명합니다. ;)
Sipo

19

도메인 지식의 영역입니다. 소프트웨어에 의해 해결 된 문제가 존재하는 활동 일 수 있습니다. ( 위키 , DDD 커뮤니티 )

Eric Evans는 책에서화물 운송을 사용하여 DDD가 무엇인지 설명합니다. 그의 예에서 도메인배송 에 관한 모든 것 입니다. 화물의 이동, 관리, 선적 및 추적 방법. 고유 한 특정 규칙, 언어 및 프로세스가 제공됩니다. 도메인 모델, 객체, 서비스 등이 생성됩니다.

응용 프로그램을 만들면 실제 운송 세계와 마찬가지로 일종의 인증이 제공되므로 모든 사람이 창고에 액세스 할 수있는 것은 아닙니다. 정보가화물 운송과 관련이 없을 수 있기 때문에 사용자 권한 부여 방법과 권한 부여 방법은 도메인 외부에있을 수 있습니다 .

간단히 말해서 도메인비즈니스 를 수행하는 곳 입니다. 귀하의 비즈니스가화물을 운송하는 경우 – 운송화물이 귀하의 도메인이됩니다. 귀하의 비즈니스가 직원을 인증하고 권한을 부여하는 경우 이것이 귀하의 도메인이됩니다.


7

에서 도메인 기반 디자인 : 소프트웨어의 심장에 복잡성을 태클 , 에릭 에반스 :

모든 소프트웨어 프로그램은 사용자의 활동이나 관심사와 관련이 있습니다. 사용자가 프로그램을 적용하는 주제 영역 은 소프트웨어 의 도메인 입니다.

항공 예약 프로그램의 영역에는 실제 사람들이 실제 항공기를 타는 것이 포함됩니다.

회계 프로그램의 영역은 돈과 재무입니다.

소스 코드 제어 시스템의 도메인은 소프트웨어 개발 자체입니다.

도메인 모델은 도메인 전문가의 머리에있는 지식을 "엄격하게 구성되고 선택적으로 추상화"합니다.

팔레르모는 양파 아키텍처를 설명하면서이 요약을 제공했습니다.

가장 중심에 우리는 도메인 모델을 볼 수 있습니다. 도메인 모델은 조직의 진실을 모델링하는 상태와 행동 조합을 나타냅니다.

파울러는 차례로

동작과 데이터를 모두 포함하는 도메인의 객체 모델.

최신 정의를보고있는 경우 도메인 모델과 데이터 모델이 다른 참조가 발생할 가능성이 높습니다 . 나는 강조의 변화만큼 의미의 변화가 있다고 생각하지 않습니다-행동을 모델링하는 것 (모델 외부의 정보에 따라 데이터가 변경되는 방식)은 물건을 쓰는 다른 방법보다 더 복잡하고 다양합니다. .


실제 활동에서 컴퓨터 시스템이 수행하는 작업에 이르기까지 귀하의 정의를 약간 조정하겠습니다. 예를 들어 "소스 코드 제어 시스템의 도메인은" 소스 코드 파일의 저장 및 검색입니다 . 도메인은 실제 사물을 처리하는 것이 아니라 프로그래밍 시스템을보다 쉽게 ​​구성하고 유지 관리 할 수 ​​있도록 모델링되었습니다. 따라서 인간이 할 수있는 것이 아니라 컴퓨터가이를 촉진하기 위해 할 수있는 일에 중점을 둡니다. 디지털 X-Ray는 X-Ray 프로세스의 감도 및 이미지 처리를 개선하고, 인간을 위해 아무 것도하지 않으며, 무인 수하물 스캔에도 유용합니다.

2

도메인이 무엇인지 이미 알고있을 것이므로 다음 단계는 하위 도메인, 도메인 모델 및보다 중요한 경계 컨텍스트를 정의하는 것입니다.

나는 도메인에 대한 나의 관점을 두는 것으로 시작한다.

도메인

도메인은 우리가 살고있는 현실입니다. 그 실체, 그들의 행동, 그들이 준수하는 법. 그것은 우리 앞에 존재했고 우리 뒤에 존재합니다. 그것의 존재는 우리의 인식에 의존하지 않습니다. 마케팅 담당자는 새로운 기능을 제공하고 시장 분석을 수행하며, 주요 계정 관리자는 고객과 의사 소통하고 소프트웨어 개발자는 비즈니스 프로세스를 자동화합니다. 그래서 도메인을 문제 공간이라고합니다.

하위 도메인

DDD는 도메인을 하위 도메인으로 분해하여 모델링 및 이해를 용이하게합니다. 비즈니스를 운영한다는 사실은 적어도 하나의 지배적 인 비즈니스 가치가 있다고 추론합니다. 당신이 돈을 버는 것. 우리가 사업을 시작한 사람 따라서 "핵심 도메인"과 같은 단어를 모르더라도 여전히 존재합니다. 하위 도메인에도 동일하게 적용됩니다. 아마도 부기, 인적 자원, 기술 지원이 필요할 것입니다.

도메인 모델

추출 된 하위 도메인을 전체적으로 모델링 할 필요는 없습니다. 우리가 관심을 갖고있는 각 하위 도메인에는 특정 규칙 세트가 있습니다. 특정 비즈니스 결과를 달성하는 데 필요한 일부 하위 도메인의 규칙 세트를 모델이라고합니다.

바운드 컨텍스트

가장 중요한 것은 경계 컨텍스트가 논리적 경계라는 것입니다.

하위 도메인과 핵심 도메인이 모두 정의되면 코드를 구현해야합니다. 경계 컨텍스트는 일부 하위 도메인의 적용 가능성에 대한 실질적인 경계를 정의합니다. 특정 하위 도메인이 의미가있는 영역이지만 다른 하위 도메인은 그렇지 않습니다. 대화, 프리젠 테이션, 아티팩트에 의해 정의 된 물리적 경계가있는 코드 프로젝트 일 수 있습니다.

무엇 향후 계획?

경계 컨텍스트 개념이 하위 도메인 개념과 어떻게 관련되는지, 하위 도메인 및 경계 컨텍스트를 정의하는 방법, 서로의 의사 소통을 나타내는 방법 및 이러한 개념을 가진 팀을 구성하는 방법에 관심이 있다면 아마도 이것에 관심이있을 것입니다 더 읽기 .


소프트웨어 의 도메인이 소프트웨어의 역할 이라고 말하고 싶습니다 . 그것은 분명히 우리 앞에 존재하지 않았으며, 우리가 위임하고 싶은 것들을 상호 작용없이 일어나도록하기 위해 전적으로 만들어졌습니다. 다시 말해, 우리가 꿈꿔 왔던 꿈에 관한 것입니다. 또한 소프트웨어가 배포되는 즉시 소프트웨어 작동 방식을 잊어 버립니다. 소프트웨어는 컴퓨터가 해결하기에 더 적합한 게임입니다. 아직 컴퓨터를 만들지 않았기 때문에 더 이상 방해하지 않으려는 문제를 해결하기 위해 지금까지만 해냈습니다. 그러나, 곧 ...

나는이 부분에서 나 자신을 "우리 앞에"분명히 밝히지 않았다. 나는 도메인이 인류 이전에 존재했다는 것을 완전히 의미하지는 않았다. "우리"라는 말은 전자 상거래의 비즈니스 프로세스 자동화와 같은 문제를 해결하는 소프트웨어 개발자와 더 비슷했습니다. 상거래의 개념은 분명히 그들 앞에 존재했습니다. 따라서 개발자의 책임은 말한 것처럼 컴퓨터에 물건을 위임 할 수있게하는 것입니다.

권리. 제 요점은 사람들은 컴퓨터 시스템이 실제 세계를 다루는 방법이라고 생각한다는 것입니다. 그러나 컴퓨터는 단순히 도메인의 일부가 아니었던 많은 아이디어, 요구 사항 및 우려 사항을 가져옵니다. 그것은 수술이 정서적 문제를 다루는 방법이라고 말하는 것과 같습니다. lobotomy는 효과가 있지만 감정적 인 문제는 뇌와 관련이 없습니다. 그리고 내 감정은 호르몬과 신경 전달 물질의 영향을 많이 받으므로 SSRI는 생물학, 심리학, 관계의 일부입니까, 아니면 그들 자신의 범주입니까? 컴퓨터는 실제가 아니라 컴퓨터에 관한 것입니다.

1
컴퓨터는 실물을 모델링하는 것입니다. 실제 업무를 수행 할 수있는 또 다른 영역, 실제 비즈니스 프로세스를 구현하고 실제 비즈니스 제약 조건을 적용 할 수 있습니다 .50 년 전 저는 매장의 직원에게 1 달러를 지불했습니다 그럼에도 불구하고 내 실제 돈은 내 실제 은행 계좌에서 인출되었습니다. 따라서 어떤 프로세스, 컴퓨터 또는 인간 또는 다른 프로세스와 관련된 것은 중요하지 않습니다. 아마 당신에게 관심이있을 것입니다 : medium.com/@wrong.about/…

돈은 진짜가 아닙니다. 비즈니스 프로세스는 실제가 아닙니다. 우리가 이야기 할 수있는 모든 것은 실제가 아니라 개념입니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.