Assembled by GimunLee (2020-01-13)
์ด๋ฒ ์ฅ์์๋ ๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ(Domain Driven Design)์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค. ์ด๊ฒ์ด ์ ์ค์ํ์ง๋ Domain Driven Design์ ์ ์ Eric Evans์ ๋ง๋ก ์ถฉ๋ถํ ๊ฒ ๊ฐ์ต๋๋ค.
Eric Evans, Domain-Driven Design
๊ฐ๋ฐ์๋ค์ด ๋๋ฉ์ธ์ ๋ํ ํต์ฐฐ์ ์ป๊ธฐ ์ํด ์ ์ฉํ ์ ์๋ ์ฒด๊ณ์ ์ธ ์ฌ๊ณ ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋ค. ๋ฌด์ง์ํ๊ฒ ๋ป์ด ๋๊ฐ๋ ์ํํธ์จ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ง์๋ฅผ ๋ถ์ฌํ ์ ์๋ ์ค๊ณ ๊ธฐ๋ฒ ์ญ์ ์กด์ฌํ๋ค. ์ด๋ฐ ๊ธฐ์ ์ ์ฐ๋งํ๋ค๋ฉด ์ต์ํ์ง ์์ ๋๋ฉ์ธ์ ์ ํ๊ฒ ๋ ๊ฒฝ์ฐ์๋ ๋ ๊ฐ์น ์๋ ๊ฐ๋ฐ์๋ก ๋ฐ์ ํ ์ ์๊ฒ ๋ ๊ฒ์ด๋ค.
๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ์ ๋ํด ์๊ธฐ ์ํด์๋ ๋จผ์ ๋๋ฉ์ธ์ ๋ํด์ ์์์ผํฉ๋๋ค. ๋๋ฉ์ธ์ ์ฌ์ ์ ์๋ฏธ๋ "์ ๋ณด์ ํ๋์ ์์ญ"์ ๋งํ๋ฉฐ, ํํ ํ๋ก๊ทธ๋๋จธ๋ค์๊ฒ๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ด์ ๋ก์ง๋ค์ด ๊ด์ฌํ๋ ์ ๋ณด์ ํ๋์ ์์ญ ์ด๋ผ๊ณ ๋ฐ์๋ค์ฌ์ง๋๋ค.
์๋ฅผ๋ค์ด, ์ด๋ค ์น ์๋น์ค๋ฅผ ๋ง๋ค ๋ ํ์์ ๊ฐ์ ํ๊ณ , ํ์์ ํํดํ๋ ์ผ๋ จ์ ์์ ์ "ํ์"๊ณผ ๊ด๋ จ๋ ์ผ๋ จ์ ์์ ๋ค์ด๋ฉฐ ์ฌ๊ธฐ์ "ํ์"์ด๋ผ๋ ๋๋ฉ์ธ์ด ์๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค.
๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ๋ ๊ฐ๋ฐ์ ํจ์ ์์ด ์์์ ์ค๋ช ํ ๋๋ฉ์ธ์ด ์ค์ฌ์ด ๋๋ ๊ฐ๋ฐ ๋ฐฉ์์ ๋งํ๋ฉฐ, ๊ทธ ๋ชฉ์ ์ ์ํํธ์จ์ด์ ์ฐ๊ด๋ ๋ถ๋ถ๋ค์ ์ฐ๊ฒฐํ์ฌ ๊ณ์ํด์ ์งํํ๋ ์๋ก์ด ๋ชจ๋ธ์ ๋ง๋ค์ด๋๊ฐ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋๋ ๊ฒ์ ์ฝ๊ฒ ํด์ฃผ๋ ๊ฒ์ ์์ต๋๋ค. DDD์ ํต์ฌ์ ์ธ ๋ชฉํ๋ ๋๋ฉ์ธ ๊ฐ ๋์จํ ๊ฒฐํฉ๋(Loose Coupling)์ ๋๋ฉ์ธ์ ๋์ ์์ง๋(High Cohesion)๋ก ๊ฐ๋ฒผ์ด ์ค๊ณ๋ฅผ ์ํด ํ์ํ์์ต๋๋ค.
๊ฒฐ๊ตญ ๋๋ฉ์ธ ๋ด์ ์ฌ๋ฌ ์ ๋ฌด ์ ์๋ ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ๋ชจ๋ธ๋ก ํํํ๊ณ ๊ทธ๊ฒ์ ๋ฐํ์ผ๋ก ๊ตฌํํ๊ธฐ ์ฝ๊ฒ ์ดํดํ ์ ์๋ ๊ตฌ์กฐ๋ก ์ ์๋๋๊ฐ DDD์ ํต์ฌ์ ๋๋ค. ๋ฐ๋ผ์ ๋๋ฉ์ธ ๋ชจ๋ธ ์ค๊ณ์ ์๋์ 3๊ฐ์ง ์๊ตฌ์ฌํญ์ ์ถฉ์กฑ์์ผ์ผ ํฉ๋๋ค.
- ๋ชจ๋ธ๊ณผ ํต์ฌ ์ค๊ณ๋ ์ํธ ์ํฅ์ ์ฃผ๊ณ ๋ฐ์ผ๋ฉฐ ๊ตฌ์ฒดํ๋๋ค.
- ๋ชจ๋ธ์ ๋ชจ๋ ํ ๊ตฌ์ฑ์๋ค์ด ์ฌ์ฉํ๋ ์ธ์ด์ ๊ทผ๊ฐ์ ์ด๋ฃฌ๋ค.
- ๋ชจ๋ธ์ ๋ถ์๋ฌผ์ ๊ฑธ๋ฌ๋ธ ํต์ฌ ์ง์๋ง์ ํฌํจํ๋ค.
๋๋ฉ์ธ ์ฃผ๋ ๊ฐ๋ฐ์ Eric Evans๊ฐ 2003๋ ์ถ๊ฐํ ์ฑ ์์ ์ฒ์ ์๊ฐํ ๋ฐฉ๋ฒ๋ก ์ผ๋ก "์ ์ฉํ ์ํํธ์จ์ด๋ฅผ ๊ฐ๋ฐํ๊ณ ์ถ๋ค๋ฉด ๋๋ฉ์ธ์ ๊ท๋ฅผ ๊ธฐ์ธ์ฌ๋ผ"๋ผ๋ ์ฌ๋ก๊ฑด์ผ๋ก๋ถํฐ ์์๋ฉ๋๋ค.
๋๋ฉ์ธ ์ ๋ฌธ๊ฐ์ ๊ฐ๋ฐ์ ์ฌ์ด์ ์์ฌ์ํต์ ์ด๋ ค์์ ๋๋ฉ์ธ ์ปจ์ ์ Ubiquitous Language ๋ผ๋ ๋ณดํธ์ ์ธ์ด๋ก ํํํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค. ๋๋ฉ์ธ ๋ชจ๋ธ์ ์ด๋ฌํ **๋ณดํธ ์ธ์ด(Ubiquitous Language)**์ ๊ทผ๊ฐ์ ์ ๊ณตํ๊ณ ํ ๋ด์ ์์ฌ์ํต ๋ฐ ๊ตฌํ๊น์ง ์ฐ๊ฒฐํ ์ ์๋๋ก ํ๊ณ ์์ต๋๋ค. ์ฆ, ์ฌ์ฉ๋๋ ์ธ์ด์ ๋ํ ์ดํด๊ฐ ์๋ก ์ผ์นํด์ผ ํ๋ฉฐ, ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ๋ชจ๋ธ ๋ณ๊ฒฝ ๋ฐ ์ฝ๋์์ผ๋ก๋ Refactoring์ผ๋ก ์ด์ด์ง๋ ๊ณผ์ ์ด ๋ํ๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ณดํธ ์ธ์ด๋ค๋ก ์ ์ํ ๋ ๊ณ ๋ ค๋์ด์ผํ ์ฌํญ์ Bounded Context(์ ํ ์์ญ) ๋ฒ์ ๋ด์์ ์ ์ํด์ผ ๋๋ค๋ ๊ฒ์ ๋๋ค.
Bounded Context๋ ๋ ๋ฆฝ์ ์ผ๋ก ์๋น์ค ๋ ๋ ๋ฌธ์ ์๋ ์ ๋ฌด ๋ฒ์๋ก ์๊ฐํ ์ ์์ผ๋ฉฐ, ์ผํ๋ชฐ ์ฌ์ดํธ๋ฅผ ์๋ก ๋ค๋ฉด ์ ํ ํ๋งค ์ปจํ ์คํธ(Sales Context), ํ๋งค์ง์ ์ปจํ ์คํธ(Support Text) ๋ฑ๊ณผ ๊ฐ์ด ๋ถ๋ฅํ ์ ์์ต๋๋ค. ์ด๋ฐ ์ฌ๋ฌ context ๋ด์ ๋น์ทํด ๋ณด์ด๋ ์ฉ์ด๊ฐ ์๋ก ํ๋ฆฐ ์๋ฏธ๋ก ์ฌ์ฉ๋ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ด๋ฐ ์ธ์ด๋ ์ฃผ๋ก ์ ๋ฌด ์์ฃผ์ ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ฉ์ด์ฌ์ (Glossary) ํํ๋ก ๊ตฌ์ฑํ๋ ๊ฒ์ด ์ข์ผ๋ฉฐ, ๊ตฌ์ฑ์ ๋๊ตฌ๋ ์ฝ๊ฒ ์ฐธ์กฐํ ์ ์๋๋ก ํฉ๋๋ค. Project Wiki ์ฌ์ดํธ ๋ฑ์ ์ด์ํ์ฌ ์ ์งํ๋ ๊ฒ์ด ์ข์ ๋ฐฉ๋ฒ์ ๋๋ค.
์ฃผ์ํ ๊ฒ์ ์ฉ์ด์ฌ์ ํํ๋ก ๊ตฌ์ฑํ๋ค๊ณ ํด์ ์ฒ์๋ถํฐ ๋ชจ๋ ์ฉ์ด๋ฅผ ์ฌ์ ์ฒ๋ผ ์ ์ํ๊ณ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก DDD๋ ํญํฌ์ ๊ฐ๋ฐ ๋ฐฉ์๋ณด๋ค๋ ์ ์์ผ ๊ฐ๋ฐ๋ฐฉ์๊ณผ ๊ฐ์ ๋ฐ๋ณต ์ํ์ ํตํ ์์ฑ๋๋ฅผ ๋์ด๋ Model Exploration Whirlpool(๋ชจ๋ธ ๊ฐ๋ฐ ์์ฉ๋์ด) ๋ฐฉ์์ ๋๋ถ๋ถ ์ฑํํ๊ณ ์์ต๋๋ค. ์ฐ์ ๋๋ฉ์ธ์ ๊ด๋ จ๋ ํต์ฌ ์ ๋ฌด ๊ด๋ จ ๋ชจ๋ธ์ ๋ํ ์ฉ์ด๋ถํฐ ์ ์ํ๊ณ ๊ทธ ๋ชจ๋ธ์ ๋ํ ์ดํด๋๋ฅผ ์๋ก ๋์ด๋ฉด์ ์ฐจ์ธฐ ๋ฐ์ ์ํค๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
Eric Evans, Domain-Driven Design
๋๋ฉ์ธ ๋ชจ๋ธ๊ณผ ์ํํธ์จ์ด ์์คํ ๊ฐ์ ๋งตํ์ด ๋ช ํํด์ง๋๋ก ๋๋ฉ์ธ ๋ชจ๋ธ์ ์ถฉ์คํ๊ฒ ๋ฐ์ํ๋ ์ํํธ์จ์ด ์์คํ ์ ์ค๊ณํ๋ผ. ๋๋ฉ์ธ์ ๋ํ ๋ ๊น์ ์๊ฒฌ์ ๋ฐ์ํ ๋ฐฉ๋ฒ์ ์ฐพ๋ ์๊ฐ ์ํํธ์จ์ด ๋ด์์ ๋ชจ๋ธ์ ๋ ์์ฐ์ค๋ฝ๊ฒ ๊ตฌํํ ์ ์๋๋ก ๋ชจ๋ธ์ ์ฌ๊ฒํ ํ๊ณ ์์ ํ๋ผ. ๊ฒฌ๊ณ ํ ์ ๋น์ฟผํฐ์ค ์ธ์ด๋ฅผ ์ง์ํจ๊ณผ ๋์์ ๋ ๊ฐ์ง ๋ชฉ์ ๋ชจ๋์ ์ ๋ถํฉํ๋ ํ๋์ ๋ชจ๋ธ์ ์ถ๊ตฌํ๋ผ.
์ค๊ณ์์ ์ฌ์ฉ๋๋ ์ฉ์ด์ ๊ธฐ๋ณธ ์ฑ ์ ํ ๋น์ ์ฌ์ฉํด์ ๋ชจ๋ธ์ ์์ฑํ๋ผ. ์ฝ๋๋ ๋ชจ๋ธ์ ํํ์ด ๋๊ณ ์ฝ๋์ ๋ํ ์์ ์ ๋ชจ๋ธ์ ๋ํ ์์ ์ด ๋๋ค. ํจ๊ณผ๋ ๋๋จธ์ง ํ๋ก์ ํธ ํ๋ ๋ด๋ด ์ ์ ํ ํ๊ธ๋์ด์ผ ํ๋ค.
๋๋ฉ์ธ ๋ชจ๋ธ ์ ์ ์ ๋ช ๊ฐ์ง ๊ตฌํ ํจํด์ด ์๋๋ฐ, ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ํจํด์ Entity ๊ธฐ๋ฐ ๋ชจ๋ธ์ ์ ์ํ๋ ํจํด์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๊ธฐ๋ณธ ํจํด์์ ์ ์๋๋ ์์๋ฅผ ์์๋ณด๊ฒ ์ต๋๋ค.
- ์์ฑ์ด ์๋ ์๋ณ์ฑ์ ๊ธฐ์ค์ผ๋ก ์ ์๋๋ ๋๋ฉ์ธ ๊ฐ์ฒด
- ex)
DB : ERD (Entity - Relationship Model)
,J2EE : Entity Bean
- ์๋ณ์ฑ์ด ์๋ ์์ฑ์ ์ด์ฉํด ์ ์๋๋ ๋ถ๋ณ ๊ฐ์ฒด
- ๋ชจ๋ ๊ฒ์ ์๋ณ์ฑ์ ๋ถ์ฌํ๊ณ Entity๋ก ๊ด๋ฆฌํ๋ค๋ฉด ๋ณต์ก์ฑ ์ฆ๊ฐ
- ๊ณผ๊ฑฐ Javadml DTO(Data Transfer Object) ํจํด์ Value Object์ ๊ด๊ณ ์์
- Entity์ Value Object๋ฅผ ๊ตฌ๋ณํ๋ ์ฒซ ๋ฒ์งธ ์กฐ๊ฑด์ ์๋ณ์ฑ
- ์๋ณ์ฑ์ ๊ฐ์ง๋ฉด Entity, ๊ทธ๋ ์ง ์์ผ๋ฉด Value Obeject
- Domain Object์์ ์์น์ํค๊ธฐ ์ด๋ ค์ด Operation์ ๊ฐ์ง๋ ๊ฐ์ฒด
- ์ฌ๋ฌ Domain Object๋ฅผ ๋ค๋ฃจ๋ ์ฐ์ฐ (Servicedml Operation์ ์ผ๋ฐ์ ์ผ๋ก stateless)
- Domain Object์ ํด๋น๋๋ ์ญํ ์ Service Operation์ผ๋ก ๋ง๋๋ ๊ฒฝ์ฐ, ๋๋ฉ์ธ ์ญํ ์ ์นจ๋ฒํ์ฌ ๊ฒฐํฉ๋๊ฐ ๊ฐํด์ง
- ์ ์ฌ ์์ ๋ฐ ๊ฐ๋ ์ ๊ทธ๋ฃนํํ์ฌ ๋ณต์ก๋๋ฅผ ๊ฐ์์ํค๋ ๊ธฐ๋ฒ
- ์์ง๋๊ฐ ๋์ ๋ชจ๋์ ๋ชจ๋ ๊ฐ์ ๊ด๊ณ๋ ๊ฒฐํฉ๋๊ฐ ์ฝํด์ง
- Java๋ก ๊ตฌํํ๋ ๊ฒฝ์ฐ Package๋ก ๊ตฌ์ฑ๋ ์ ์์
- ์ฐ๊ด๋ Entity์ Value Object์ ๋ฌถ์, ์ผ๊ด์ฑ๊ณผ ํธ๋์ญ์ , ๋ถ์ฐ์ ๋จ์, ์บก์ํ๋ฅผ ํตํ ๋ณต์ก์ฑ ๊ด๋ฆฌ
- ex) ์ผํ๋ชฐ ์ฌ์ดํธ์์ ์ฃผ๋ฌธ Entity ๋ด์ ๋ฐฐ์ก์ฃผ์ ์ ๋ณด๋ฅผ ์ฐํธ๋ฒํธ, ์ฃผ์1, ์ฃผ์2, ์์ธ์ฃผ์ ์ด๋ฐ์์ผ๋ก ๊ฐ ์นผ๋ผ์ผ๋ก ์ ์ํ๋ ๊ฒ์ด ์๋๋ผ, ์ฃผ์๋ผ๋ Value Obeject๋ฅผ ๋ณ๋๋ก ์์ฑํ๊ณ ์ฃผ๋ฌธ Entity๋ ์ฃผ์ Value Object๋ฅผ ํฌํจํ๋ ๋ฐฉ์์ผ๋ก ๊ด๊ณ ์ผ๊ด์ฑ ๋ฐ ๋จ์ํ๋ฅผ ์ ์ง
- ๋ณต์กํ Entity์ ์์ฑ ์ ์ฐจ์ ์บก์ํ๋ฅผ ํ ์ ์๋ ๊ฐ๋
- ์์ฑํ๊ธฐ ๋ณต์กํ Aggregate ๋ด์ ์ฌ๋ฌ ๊ฐ์ฒด๋ฅผ ๋์์ ์์ฑ
- ์์ฑ์ Aggregate์ ์ผ๊ด์ฑ ์ ์ง
- ๋๋ฉ์ธ ์์ญ๊ณผ Data Infrastructure ๊ณ์ธต์ ๋ถ๋ฆฌํ์ฌ ๋ฐ์ดํฐ ๊ณ์ธต์ ๋ํ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ธฐ ์ํ ๋ฐฉ์
- ์์ฑ๋ Aggregate์ ๋ํ ์์์ฑ ๊ด๋ฆฌ, ์กฐํ, ๋ฑ๋ก, ์์ , ์ญ์ ์ Aggregate์ ์ผ๊ด์ฑ ์ ์ง
- DB ๋ฐ ๋ฐ์ดํฐ ์ ์ฅ์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ณ ์ ์ฅํ๋ ๊ฒฝ์ฐ Repository๋ฅผ ํ์ฉ
๊ธฐ์ ๋ด ์น ์๋น์ค๋ ๋ด๋ถ์ ์ผ๋ก ๋ค์ํ Context๋ก ๊ตฌ๋ถ๋์ด์ง ์ ์์ต๋๋ค. ์ฆ๊ถ ์๋น์ค๋ฅผ ์๋ก ๋ค์ด๋ณด๊ฒ ์ต๋๋ค.
- ๋ฆฌ์์น
- ์ฃผ์
- ํ๋
- ์ด์ฒด
์์ ๊ฐ์ด ๊ฐ๊ฐ์ ์ ๋ฌด๋ ๋ถํ ๋ ์ปจํ ์คํธ(Bounded Context)๋ก ๋๋ ์ ์์ผ๋ฉฐ, ๊ฐ Context์ ์ฌ์ฉ๋๋ ๋ชจ๋ธ์ ์๋ก ๋ถ๋ฆฌ๋์ด์ผํ๋ฉฐ, ๊ฐ ํ๋์ Context๋ ํ๋์ ํ์ ํ ๋น๋์ด ๊ด๋ฆฌ๋๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ํ ์ด๋ฌํ ๋ฐฉํฅ์ Microservice Architecture์์ ์ถ๊ตฌํ๋ ๋ฐฉํฅ์ด๊ธฐ๋ ํฉ๋๋ค.
์ฃผ์ํ ๊ฒ์ Bounded Context๋ Module๊ณผ ๋ค๋ฅธ ์์ญ์ด๋ฉฐ, ๋๋ฉ์ธ ๋ชจ๋ธ์ ์ง์คํ๋ ์์ญ์ ๋๋ค. ์ ๊ตฌ์ฑ๋ Bounded Context ๋ด์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ๋ฆฝ์ ๊ตฌ์ฑ์ด ๊ฐ๋ฅํด์ผ ํ๋ฉฐ, ๋ค๋ฅธ Context ๊ฐ์ ๋ชจ๋ธ ๋ฐ ๋ฐ์ดํฐ ์ฐธ์กฐ๋ ์ ํํ ์ ์๋ ์ธํฐํ์ด์ค(API) ๋ง์ผ๋ก ํต์ ํ์ฌ์ผ ํฉ๋๋ค. ๋ฌผ๋ก MSA์ ์ถ๊ตฌํ๋ Service ๋จ์๋ ์ด๋ณด๋ค ๋ ์์ ๋จ์์ง๋ง, ๊ธฐ์กด Monolithic Architecture์์ MSA ์ค๊ฐ ๋จ๊ณ๋ฅผ ๊ฑฐ์น๋ค๋ฉด Bounded Context ๋จ์๋ก ์์ญ์ ๋ถ๋ฆฌํ๊ณ ์์คํ ์ผ๋ก ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๊ทธ๋ผ DDD๋ฅผ ํตํ ์ํํธ์จ์ด ์ค๊ณ ์, ์ด๋ป๊ฒ ๋ฌธ์ํํ ์ง ๊ณ ๋ฏผํด ๋ณด์์ผ ํฉ๋๋ค. ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ ์๊ฐํ๋ UML ๋ค์ด์ด๊ทธ๋จ ๋๋ ๊ทธ์ ์ ์ฌํ ๋ค์ด์ด๊ทธ๋จ์ ํ์ฉํ๋ ๊ฒ์ ๋๋ค. ํ์์ด ์ค์ํ๊ฒ์ด ์๋๋ผ ๊ด๋ จ์๊ฐ ํจ๊ป ์ดํดํ ์ ์๋ ์ค์ฌ ์ญํ ์ ํด์ฃผ๋ฉด ๋ฉ๋๋ค. ๋ํ, ๋ชจ๋ธ๋ง์ ๊ธฐ๋ณธ ๊ฐ๋ ์ ๋๋ฌด๋ฅผ ๋ณด๋ ๊ฒ์ด ์๋๋ผ ์ฒ์ ๋ณด๋ ๊ฒ์ผ๋ก ๋ชจ๋ ๊ฒ์ ํฌํจํ์ฌ ๋ณต์กํ๊ฒ ๋ง๋ค ํ์๊ฐ ์๊ณ , ๋๋ฌด ์์ธํ ์ํฌ ํ์๋ ์์ต๋๋ค. UML ์์ฑ ์ ์ฃผ์์ ์ UML ์์ฒด๊ฐ ๊ฐ์ง๋ ์ ๋ณด ์ ๋ฌ์ ํ๊ณ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ์ ์ธ ์ธ์ด ๊ธฐ์ (desription)์ ํตํด ๊ฐ ์์์ ์์ด๋์ด ํต์ฌ์ ๋ด์์ผ ํฉ๋๋ค.
Eric Evans, Domain-Driven Design
๋ชจ๋ธ์ ์ธ์ด์ ๊ธฐ๋ฐ์ผ๋ก ์ผ์๋ผ. ํ์์ ์ด๋ฃจ์ด์ง๋ ๋ชจ๋ ์์ฌ์ํต๊ณผ ์ฝ๋์ ์ ๊ทน์ ์ผ๋ก ๊ณตํต์ ์ธ์ด๋ฅผ ์ ์ฉํ๋ผ.
๋ค์ด์ด๊ทธ๋จ๊ณผ ๋ฌธ์ํ ํนํ ๋ํ์ ๋์ผํ ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ผ. ์ฌ๋ฌ๊ฐ์ง ๋ชจ๋ธ์ ๋ฐ์ํ๋ ๋ค๋ฅธ ํํ์ ์คํํด๋ด์ผ๋ก์จ ๊ณตํต ์ธ์ด ์ ํ์ ๋ฐ๋ฅด๋ ์ด๋ ค์์ ํด์ํ๋ผ.
๊ทธ ํ ์๋ก์ด ๋ชจ๋ธ์ ์ ํฉํ๋๋ก ํด๋์ค, ๋ฉ์๋, ๋ชจ๋์ ์ด๋ฆ์ ๋ณ๊ฒฝํ์ฌ ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋งํ๋ผ. ์ผ์์์ ์ฌ์ฉํ๋ ์ฉ์ด๋ฅผ ๋ค๋ฅด๊ฒ ์ฌ์ฉํ ๊ฒฝ์ฐ ์๋ฏธ์ ๋ํ ๊ณต๊ฐ๋๋ฅผ ํ์ฑํ๋ ๊ฒ๊ณผ ๋์ผํ ๋ฐฉ์์ผ๋ก ๋ํ์ ์ฌ์ฉํ๋ ์ฉ์ด ์์ ํผ๋ ์ญ์ ํด๊ฒฐํ๋ผ. Ubiqutious Language์ ๋ณ๊ฒฝ์ ๊ณง ๋ชจ๋ธ์ ๋ณ๊ฒฝ์ด๋ผ๋ ์ฌ์ค์ ์ธ์ํ์.