์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- TS
- react natvie
- ์ ๊ทธ๋ฆฌ๊ฒ์ดํธ
- ์ ๋ณด์ฒ๋ฆฌ๊ธฐ์ฌ
- js
- BOUNDED CONTEXT
- ๋น๋ฉ ๋ธ๋ก
- IAP
- ์๋๊ฐ์
- ํ์ ์คํฌ๋ฆฝํธ
- ์ด๋ฒคํธ ์์คํ
- nextjs ๋ผ์ฐํ
- ์ ์ฒ๊ธฐ ์ค๋น๋ฌผ
- react native bridge
- ์ดํํฐ๋ธ ํ์ ์คํฌ๋ฆฝํธ
- rn
- HTML
- react native ๋ด๋ถ ๊ตฌ์กฐ
- Aggregate
- nextjs์ฌ์ฉ์ด์
- DDD
- rniap
- nextjs route code
- std::char_traits<unsigned char>
- in app purchase
- ๋น๋๊ธฐ
- typeScript
- ๋ถ๋ณ์
- ์ ์ฒ๊ธฐ ์๊ฒฉ
- nextJS
- Today
- Total
nika-blog
๐ ๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ(DDD) - ํํธ4 ์ ๋ต์ ์ค๊ณ ๋ณธ๋ฌธ
๐ ๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ(DDD) - ํํธ4 ์ ๋ต์ ์ค๊ณ
nika0 2025. 2. 23. 14:21๐ฏ ๊ฐ๋ฐ๊ณผ ์ ์น๊ฐ ๋ง๋๋ ๊ณณ: ์ ๋ต์ ์ค๊ณ
์ํํธ์จ์ด ๊ฐ๋ฐ์ ๋จ์ํ ์ฝ๋ ์์ฑ์ด ์๋๋ผ ์กฐ์ง์ ๊ตฌ์กฐ, ํ์
๋ฐฉ์, ๊ทธ๋ฆฌ๊ณ ๋น์ฆ๋์ค ๋ชฉํ์๋ ๋ง๋ฌผ๋ ค ์๋ ์ ๋ต์ ์ธ ์์
์
๋๋ค.
ํนํ, ๋๊ท๋ชจ ์์คํ
์์๋ ์ฌ๋ฌ ๊ฐ์ ๋๋ฉ์ธ ๋ชจ๋ธ์ ๋ค๋ฃจ๋ ๊ฒ์ด ํต์ฌ์ด ๋ฉ๋๋ค.
๐ก ์ ์ฌ(๊ธฐ์ ์ ์ฒด)์ ํ๋์ ๋๋ฉ์ธ ๋ชจ๋ธ๋ง ์กด์ฌํด์ผ ํ ํ์๋ ์๋ค!
- ํ๋ง๋ค ๋๋ฉ์ธ ๋ชจ๋ธ์ด ๋ค๋ฅผ ์ ์์
- ๋ชจ๋ ๋๋ฉ์ธ ๋ชจ๋ธ์ด ์ค์ํ ๊ฒ์ ์๋๋ฉฐ, ์ค์ํ ๊ณณ์ ์ง์คํด์ผ ํจ
โ ์ค๋ฌด์์ ๋ง์ฃผํ๋ ๋ฌธ์ ๋ค
์ํํธ์จ์ด๊ฐ ์ฑ์ฅํ๋ฉด์ ์์ฐ์ค๋ฝ๊ฒ ๋ณต์ก์ฑ์ด ์ฆ๊ฐํ๊ฒ ๋ฉ๋๋ค.
๐น ์์ง๋๊ฐ ๋ฎ์ ์ฝ๋
- ์ฌ๋ฌ ํ์ด ํจ๊ป ์์ ํ๋ค ๋ณด๋ฉด ํ ๊ธฐ๋ฅ์ด ์ฌ๋ฌ ๋๋ฉ์ธ์ ๊ฑธ์ณ ์ค๋ณต
- ์ ์ง๋ณด์๊ฐ ์ด๋ ค์์ง
๐น ๊ธฐ๋ฅ ์ถ๊ฐ & ์ฝ๋ ์์ ์ ์ถฉ๋
- ๋จ์ผ ๋๋ฉ์ธ ๋ชจ๋ธ์ ์ฌ์ฉํ ๊ฒฝ์ฐ, ์์ ์ ์์์น ๋ชปํ ์ฌ์ด๋ ์ดํํธ ๋ฐ์
- ์ฝ๋ ๋ณ๊ฒฝ์ด ๋ค๋ฅธ ํ์ ์ํฅ์ ๋ฏธ์น๋ ๋ฌธ์ ๋ฐ์
๐น ํ์ ์ค๋ฒํค๋ ์ฆ๊ฐ
- ์๋ก ๋ค๋ฅธ ํ์ด ํ๋์ ์ฝ๋๋ฒ ์ด์ค์์ ์์ ํ ๊ฒฝ์ฐ, ๋ฆด๋ฆฌ์ฆ ์ผ์ ์กฐ์จ ํ์
- ๋ค๋ฅธ ํ์ ์ฝ๋ ๋ณ๊ฒฝ์ด ๋์๊ฒ๋ ์ํฅ์ ๋ฏธ์น ์ ์์
๐ ์์ : ์ฃผ๋ฌธ ๋๋ฉ์ธ๊ณผ ํ์ ๋๋ฉ์ธ ์ถฉ๋
- ํ์ ์ ๋ณด๋ฅผ ์์ ํ๋๋ฐ ์ฃผ๋ฌธ ๋๋ฉ์ธ์์ ๋ฒ๊ทธ ๋ฐ์
- ์ฃผ๋ฌธ ํ๊ณผ ํ์ ํ์ด ์กฐ์จํด์ผ ํ๋ ๋ถํ์ํ ํ์ ์ฆ๊ฐ
๐ก โก ํด๊ฒฐ์ฑ : ์ฝ๋ ๋ถ๋ฆฌ & ๋ฐ์ด๋๋ ์ปจํ ์คํธ(Bounded Context) ์ ์ฉ
๐ Bounded Context (๋ฐ์ด๋๋ ์ปจํ ์คํธ)
๋ฐ์ด๋๋ ์ปจํ
์คํธ๋?
๐ ํน์ ํ ๋๋ฉ์ธ ๋ชจ๋ธ์ด ์ ์ฉ๋๋ ๋ฒ์
๐น ์ ํ์ํ ๊น?
- ํ๋์ ๋๋ฉ์ธ ๋ชจ๋ธ๋ง ์ฌ์ฉํ๋ฉด ์ฌ์ด๋ ์ดํํธ๊ฐ ์ปค์ง๊ณ ํ์ ์ค๋ฒํค๋๊ฐ ์ฆ๊ฐ
- ๋ฐ๋ผ์, ๊ฐ ํ์ด ๋ ๋ฆฝ์ ์ธ ๋๋ฉ์ธ ๋ชจ๋ธ์ ๊ฐ์ ธ์ผ ํจ
- ๊ฐ์ ๊ฐ๋ ์ด๋ผ๋ ๊ฐ ์ปจํ ์คํธ๋ง๋ค ๋ค๋ฅธ ์๋ฏธ๋ฅผ ๊ฐ์ง ์ ์์
๐น ์์ : ์ ์์๊ฑฐ๋ ์์คํ
1๏ธโฃ ํ๋งค ์ปจํ ์คํธ์ ์ํ(Product)
- ํ๋งค์๋ ์ํ์ ๋ฑ๋กํ๋ฉฐ, ์ํ ์ ๋ณด๊ฐ ๋ง์ผํ
์ ์ต์ ํ๋จ
2๏ธโฃ ๋ฐฐ์ก ์ปจํ ์คํธ์ ์ํ(Product) - ๋ฐฐ์กํ์ ์ํ์ ํจํค์งํ๊ณ , ๋ฌผ๋ฅ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌ
โ
๊ฐ์ "์ํ"์ด๋ผ๋, ํ๋งค ์ปจํ
์คํธ์ ๋ฐฐ์ก ์ปจํ
์คํธ์์ ๋ค๋ฅด๊ฒ ํด์๋ ์ ์์!
→ ๊ฐ ์ปจํ
์คํธ๋ณ๋ก ๋ณ๋์ ๋๋ฉ์ธ ๋ชจ๋ธ์ ์ฌ์ฉํด์ผ ํจ
๐ก Best Practice
- DB๊น์ง ๋ถ๋ฆฌํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ด์์
- MSA(Microservices Architecture)์์๋ ๋ง์ด ์ฌ์ฉ๋จ
๐ ์ปจํ ์คํธ ๋งต (Context Map)
๐ ์ปจํ ์คํธ ์ฌ์ด์ ๊ด๊ณ์ ๋ชจ๋ธ ๋ณํ ๋ฐฉ์์ ์ ์ํ๋ ์ง๋
๐น ์ปจํ ์คํธ ๋งต์ด ํ์ํ ์ด์
- ํ ๊ฐ ํ์ ์ ์ํํ๊ฒ ํ๊ธฐ ์ํด
- ๋ค๋ฅธ ๋ฐ์ด๋๋ ์ปจํ ์คํธ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ๋ ๋ณํ ๋ฐฉ์ ์ ์
๐น ์์
- ํ๋งค ์ปจํ ์คํธ์์ "์ํ" ๋ฐ์ดํฐ → ๋ฐฐ์ก ์ปจํ ์คํธ์ "์ํ" ๋ฐ์ดํฐ๋ก ๋ณํ
- ๊ฐ ์ปจํ ์คํธ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ๋์ํ๋ฉด์๋ ํ์ํ ๋ถ๋ถ๋ง ๊ณต์ ํ๋๋ก ์ค๊ณ
๐น ์กฐ์ง ๊ตฌ์กฐ์์ ๊ด๊ณ
๋ฐ์ด๋๋ ์ปจํ ์คํธ๋ ๋จ์ํ ์ฝ๋ ๋ถ๋ฆฌ๊ฐ ์๋๋ผ ์กฐ์ง ๊ด๋ฆฌ ๋ฐ ํ์ ๋ฐฉ์๊ณผ๋ ์ฐ๊ฒฐ๋จ
- ๊ฐ ์ปจํ ์คํธ๋ ํ ๋จ์๋ก ๊ด๋ฆฌ
- ํ ๊ฐ ํ์ ๋ฐฉ์ ์ ๋ฆฌ ํ์
โ ์ปจํ ์คํธ ๊ฐ ํ์ ๋ฐฉ์ 3๊ฐ์ง 1๏ธโฃ ์ค๋์ญ์ ๊ฐ์ง ํ์ด ์ฃผ๋
- ํ ํ์ด ์ ์ฒด ๋๋ฉ์ธ์ ์ฃผ๋ (ex. ์ฃผ๋ฌธ ๋๋ฉ์ธ์ด ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ณ , ๋ค๋ฅธ ํ์ด ์ด ๋ฐ์ดํฐ๋ฅผ ์๋น)
2๏ธโฃ Shared Kernel (๊ณต์ ์ปค๋) - ํต์ฌ ๋ชจ๋ธ์ ์ผ๋ถ ๊ณต์ (ex. ํ์ ์ ๋ณด๋ ๊ณตํต์ผ๋ก ์ฌ์ฉ)
3๏ธโฃ Conformist (์ข ์์ ๊ด๊ณ) - ํ ํ์ด ๋ค๋ฅธ ํ์ ๋ชจ๋ธ์ ๋ง์ถฐ์ผ ํจ
๐ก โก ์ ๋ต์ ์ผ๋ก ํ๊ณผ ์ปจํ ์คํธ๋ฅผ ๋ถ๋ฆฌํด์ผ ์ ์ง๋ณด์์ฑ์ด ๋์์ง
๐ฏ ์ ๋ต์ ๋์คํธ๋ ์ด์ (Strategic Distillation)
๋ชจ๋ ๋๋ฉ์ธ์ด ๋์ผํ๊ฒ ์ค์ํ ๊ฒ์ ์๋๋ค!
→ ๊ฐ์ฅ ์ค์ํ ๋๋ฉ์ธ์ ์ต๊ณ ์ ์ธ๋ ฅ๊ณผ ๋ฆฌ์์ค๋ฅผ ์ง์คํด์ผ ํจ
๐น ํต์ฌ ๋๋ฉ์ธ(Core Domain)
- ๋น์ฆ๋์ค ์ฑ๊ณต์ ๊ฒฐ์ ์ ์ธ ์ญํ ์ ํ๋ ๋๋ฉ์ธ
- ๊ฐ์ฅ ์ค์ํ ๋ถ๋ถ์ด๋ฉฐ, ๊ณ์ํด์ ๋ณํํ๊ณ ์ต์ ํ๋์ด์ผ ํจ
- โ ์ต๊ณ ์ ๊ฐ๋ฐ์๋ฅผ ๋ฐฐ์
๐น ์ง์ ์๋ธ๋๋ฉ์ธ(Supporting Subdomain)
- ์ฝ์ด ๋๋ฉ์ธ์ ์ง์ํ๋ ์ญํ
- ์: ๊ฒฐ์ ์์คํ (ํต์ฌ ๋๋ฉ์ธ์ด์ง๋ง, ์ฃผ๋ฌธ ์์คํ ๋ณด๋ค ์๋์ ์ผ๋ก ํ์์)
- โ ์ผ๋ฐ์ ์ธ ๊ฐ๋ฐํ์ด ๊ด๋ฆฌ
๐น ์ ๋๋ฆญ ์๋ธ๋๋ฉ์ธ(Generic Subdomain)
- ๊ฒฝ์ ์ฐ์๋ฅผ ์ ๊ณตํ์ง ์์ผ๋ฉฐ, ๊ธฐ์ฑ ์ํํธ์จ์ด๋ก ๋์ฒด ๊ฐ๋ฅ
- ์: ์ด๋ฉ์ผ ๋ฐ์ก ์์คํ , ๋ก๊ทธ ์์คํ
- โ ์ฃผ๋์ด ๊ฐ๋ฐ์ ๋ฐฐ์ or ๊ธฐ์ฑ ์๋ฃจ์ ์ฌ์ฉ
๐ ์ ๋ต์ ๋์คํธ๋ ์ด์
์ ํต์ฌ 1๏ธโฃ ํต์ฌ ๋๋ฉ์ธ(Core Domain)์ ์ต๊ณ ์ ์ธ๋ ฅ ์ง์ค
2๏ธโฃ ๋ ์ค์ํ ๋๋ฉ์ธ์ ์ธ๋ถ ์๋ฃจ์
๋์
or ์ฃผ๋์ด ๊ฐ๋ฐ์๊ฐ ๋ด๋น
3๏ธโฃ ์ ์ฒด์ ์ธ SW ๋น์ ์ ์์ง ์๋๋ก ๋ช
ํํ ์ฐ์ ์์ ์ค์
๐ ๊ฒฐ๋ก : DDD์ ์ ๋ต์ ์ค๊ณ๋ฅผ ์ ์ฉํ๋ฉด?
๐ก ๊ธฐ์ ์ ์ธ ๋ถ๋ฆฌ๊ฐ ์๋๋ผ, ๋น์ฆ๋์ค์ ์กฐ์ง ๊ตฌ์กฐ๊น์ง ๊ณ ๋ คํด์ผ ํ๋ค!
โ
๋จ์ผ ๋๋ฉ์ธ ๋ชจ๋ธ์ด ์๋๋ผ, ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ด๋๋ ์ปจํ
์คํธ๋ฅผ ๋์
ํด์ผ ํ๋ค
โ
์ปจํ
์คํธ ๋งต์ ํ์ฉํ์ฌ ํ ๊ฐ ํ์
์ ์ํํ๊ฒ ํด์ผ ํ๋ค
โ
ํต์ฌ ๋๋ฉ์ธ์ ์ต๊ณ ์ ์ธ๋ ฅ์ ์ง์คํ๊ณ , ๋ ์ค์ํ ๋๋ฉ์ธ์ ์ธ๋ถ ์๋ฃจ์
์ผ๋ก ๋์ฒด ๊ฐ๋ฅ
๐ DDD์ ์ ๋ต์ ์ค๊ณ๋ ๋จ์ํ ์ฝ๋ ๋ถ๋ฆฌ๊ฐ ์๋๋ผ, ์กฐ์ง ์ด์ ๋ฐฉ์๊น์ง ๊ณ ๋ คํด์ผ ํ๋ ์ค์ํ ๊ฐ๋
์
๋๋ค.
๐ ๊ฒฐ๊ตญ, ๋๋ฉ์ธ ๋ชจ๋ธ์ ๋น์ฆ๋์ค ์ ๋ต๊ณผ ํจ๊ป ์งํํด์ผ ํฉ๋๋ค! ๐