๐ ๊ธฐ์กด์ ๊ฐ๋ฐ
- ๊ด๊ณํ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ์ข ์
- ์ต์ด ์ค๊ณ ๋ฐ์ดํฐ์ ๋ชจ๋ธ๋ง์ ๋ณ๊ฒฝ๊ณผ ํ์ฅํ๊ธฐ ์ด๋ ค์
- ๋ชจ๋ธ๋ง๊ณผ ์ค์ ๊ฐ๋ฐ์ ๋ถ์ผ์น ๋์
๐จ Domain Driven Design
- ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฅ๊ณผ ๋ถ๋ฆฌํด์ ์๋ณํ์ง ์๊ณ , ๋ณ๋์ ๋๋ฉ์ธ ๋ชจ๋ธ๋ก ์ ์
- ์ฉ์ด ์ฌ์ ์ ๊ธฐ๋ฐ์ผ๋ก ๋๋ฉ์ธ ์ค๊ณ
- ๋๋ฉ์ธ ๋ณ๋ก ์ค๊ณ์ ๊ตฌํ ๊ฐ๋ฅ
๐ง ์ฉ์ด ์ฌ์ (Ubiquitous Language)
์ฌ์ฉ์์ ์ค๊ณ์, ๊ตฌํ์๊ฐ ๋ชจ๋ ์๋ฏธ์ ๋์ํ ์ ์๋ ์ฉ์ด์ ๋ชจ์
โจ Domain
- ์ํํธ์จ์ด๋ก ํด๊ฒฐํ๊ณ ์ ํ๋ ๋ฌธ์ ์์ญ
- ๊ฐ๋ฐํ๋ ค๋ ์๋น์ค์ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ์ฐ๊ด
โ Domain model
์๊ตฌ์ฌํญ์ผ๋ก๋ถํฐ Domain๊ณผ ์ดํ entity๋ฅผ ์ ์ํ๊ณ ๊ทธ ๊ด๊ณ๋ฅผ ๊ฒฝ๊ณ์ ํจ๊ป ์ถ์ํํ ๋ชจ์๋
๐ Domain-driven and Object-oriented Comperison
Object
- ์ถ์ํํ๊ฑฐ๋ ๊ตฌ์ฒดํํ ์ ์๋ ๋์
- e.g. ์ํ, ์ฃผ๋ฌธ, ์ฟ ํฐ
Domain
- ์๊ตฌ์ฌํญ์์ ํํํ๋ ๋ชจ๋ ๊ฒ
- e.g. Object + ์ฃผ๋ฌธํ๋ค, ๊ฒฐ์ ํ๋ค, ์ ์ฐํ๋ค ๋ฑ
๐ Domain Driven Design Step
- ์๊ตฌ์ฌํญ ์ ๋ฆฌ
- ํต์ฌ ๋๋ฉ์ธ ๋ก์ง ํ์
์ฉ์ด ์ฌ์ ์ ๋ฆฌ- ๋๋ฉ์ธ์ ์์ ๋จ์๋ก ๋ถ๋ฆฌ
Bounded context์ค์ ํ๊ณ ๊ด๊ณ ์ ์- ์ธ๋ถ ๋์ ์ค๊ณ
- Context ๋ณ bounds ์นจ๋ฒ ์ฌ๋ถ ํ์ธ
- ๋ณ๊ฒฝ ์ฌํญ ๋ฐ์ ์ ๋ฐ๋ณต
๐ Domain Driven Design ๊ธฐ๋ณธ ์์
Domain model pattern
- Entity
- Value Object
- Service
- Aggregate
- Repository
Bounded Context
- ์๋ก ๋ ๋ฆฝ์ ์ธ ์ ๋ฌด๋ก ๋ถํ ๋ ์ ์๋ ๋ชจ๋ธ ์์ญ
- MSA๋ฅผ ๋๋๋ ๋จ์๋ก ์ฌ์ฉ ๊ฐ๋ฅ
๐ Domain Driven Architecture
Client
- Presentation layer์
HTTP Request์ ๋ฌ
Presentation layer
- Client์ ์์ฒญ์ ๋ฐ๊ณ Application layer๋ก ์ ๋ฌ๋ฐ์ ๊ฒฐ๊ณผ๋ฅผ client์๊ฒ ์ ๋ฌ
Application layer
- Client์๊ฒ ์ ๊ณตํ ๊ฒฐ๊ณผ๋ฅผ Domain layer์ ์์ฒญํ์ฌ ์กฐํฉ
Domain layer
Domain model์ ๊ตฌํ- ํ๋์ ๋ํ๋๋ ๋๋ฉ์ธ์ด ๋ค๋ฅธ ๋๋ฉ์ธ์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์กฐํฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค๊ณ ํ๋ค.
Infrastructure layer
- DB, ์ธ๋ถ ์์คํ ๋ฑ ์ฐ๋ ์ฒ๋ฆฌ