์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- ์ ์ฒ๊ธฐ ์ค๋น๋ฌผ
- in app purchase
- ์ดํํฐ๋ธ ํ์ ์คํฌ๋ฆฝํธ
- HTML
- ์ ๋ณด์ฒ๋ฆฌ๊ธฐ์ฌ
- BOUNDED CONTEXT
- Aggregate
- typeScript
- react natvie
- IAP
- nextjs ๋ผ์ฐํ
- react native ๋ด๋ถ ๊ตฌ์กฐ
- ์ด๋ฒคํธ ์์คํ
- nextjs์ฌ์ฉ์ด์
- nextjs route code
- rn
- js
- ์๋๊ฐ์
- ๋น๋ฉ ๋ธ๋ก
- ๋ถ๋ณ์
- nextJS
- react native bridge
- TS
- DDD
- ๋น๋๊ธฐ
- ์ ๊ทธ๋ฆฌ๊ฒ์ดํธ
- std::char_traits<unsigned char>
- ์ ์ฒ๊ธฐ ์๊ฒฉ
- ํ์ ์คํฌ๋ฆฝํธ
- rniap
- Today
- Total
nika-blog
๐ ๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ(DDD) - ํํธ2 ๋ชจ๋ธ ์ฃผ๋ ์ค๊ณ์ ๋น๋ฉ ๋ธ๋ก ๋ณธ๋ฌธ
๐ ๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ(DDD) - ํํธ2 ๋ชจ๋ธ ์ฃผ๋ ์ค๊ณ์ ๋น๋ฉ ๋ธ๋ก
nika0 2025. 2. 23. 14:13๐ ๊ฐ์ฒด์งํฅ ์ค๊ณ์์ ๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ๋ก
๐ ๊ฐ์ฒด์งํฅ ์ปค๋ฎค๋ํฐ์์ DDD ์ฒ ํ์ด ๋ฑ์ฅ
- ๊ฐ์ฒด ๋ชจ๋ธ๋ง์ ์ค๋ฌด ์ํํธ์จ์ด ํ๋ก์ ํธ์ ์ด๋ป๊ฒ ์ ์ฉํ ๊ฒ์ธ์ง์ ๋ํ ๋ ผ์
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ๊ณผ DDD๊ฐ ํจ๊ป ๋ฐ์
๐ฐ 1990~2000๋ ๋: OOP์ DDD์ ๋ฑ์ฅ ๋ฐฐ๊ฒฝ
๐น 1) ๊ฐ์ฒด ์งํฅ์ด ์ ํํ๊ธฐ ์์ํ ์ด์ ?
- GUI(Graphical User Interface)์ ๋ฑ์ฅ
- ๊ฐ์ฒด์งํฅ์ UI์ ์ ๋ง๋ ํจ๋ฌ๋ค์
- ์ด๋ฒคํธ(๋ฉ์์ง) → ํน์ UI(๊ฐ์ฒด) ๋ณ๊ฒฝ
- ์ฆ, OOP๋ ํด๋ผ์ด์ธํธ ๊ฐ๋ฐ์ ์ ํฉํ ํจ๋ฌ๋ค์
๐น 2) CS(Computer Science) ๋ถ์ผ์ ๋ณํ
- ์น(Web) ๊ฐ๋ฐ์ ๋๋
- ์ด์ ๊น์ง๋ ๋ก์ปฌ ์ปดํจํฐ ๋ด์์ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉ
- ์น์ด ๋ฑ์ฅํ๋ฉด์ ๋คํธ์ํฌ, ๋ถ์ฐ ์์คํ ๊ด๋ จ ๊ธฐ์ ์ด ํ์ ์์๋ก ๋ณํ
- ๋ถ์ฐ ๊ฐ์ฒด ๊ธฐ์ ์ ์ ํ
- ๋คํธ์ํฌ๋ฅผ ํตํด ๋ค๋ฅธ ์์คํ ์ ๊ฐ์ฒด๋ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๊ฒ์ฒ๋ผ ๋์
- ํ์ง๋ง ๊ธฐ์ ๊ณผ ๋๋ฉ์ธ์ด ํผ์ฌ๋๋ ๋ฌธ์ ๋ฐ์
- ๊ธฐ์ ์ด ๋๋ฉ์ธ์ ์นจํฌ(Pervasive)ํ๋ ๊ตฌ์กฐ
- ์๋ฒ๊ฐ ๊บผ์ ธ ์์ผ๋ฉด ์ฝ๋ ์คํ์ด ๋ถ๊ฐ๋ฅ
- ๋น์ฆ๋์ค ๋ก์ง๊ณผ ์ธํ๋ผ ์ฝ๋๊ฐ ๊ฒฐํฉ๋จ
- ์์์ฑ ๊ฐ์ฒด(Persistence Object) ๊ตฌํ ํ์
- ๊ฒฐ๋ก : ๊ฐ์ฒด ๋จ์๋ก ๋ถ์ฐํ ํ์ ์์ด, ์๋น์ค ๋จ์๋ก๋ง ๋ถ์ฐํ๋ฉด ์ถฉ๋ถ!
- Spring ๋ฑ์ฅ๊ณผ POJO(Plain Old Java Object) ๊ฐ๋
ํ์ฐ
- ๊ธฐ์ ์ข ์์ ์ธ ์ฝ๋ ์์ฑ ๋ฐฉ์์์ ๋ฒ์ด๋๋ ค๋ ์๋
- "๋๋ฉ์ธ์ด ๊ธฐ์ ์ ์ฃผ๋ํด์ผ ํ๋ค"๋ผ๋ ์ฒ ํ์ด ๋ฑ์ฅ
- DDD(๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ)๊ฐ ํ์ → ๋ชจ๋ธ์ ์ค์ฌ์ผ๋ก ์ฝ๋ ์์ฑ
๐น 3) ํ์ฌ: ๋๋ฉ์ธ ์ค์ฌ ๊ฐ๋ฐ์ด ๋น์ฐํ ์๋
- ๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ ๊ฐ๋ ์ด ๋๋ฆฌ ๋ฐ์๋ค์ฌ์ง
- ๋ง์ดํฌ๋ก์๋น์ค, ํด๋ฆฐ ์ํคํ ์ฒ ๋ฑ๊ณผ ๊ฒฐํฉ๋๋ฉด์ ๋์ฑ ๋ฐ์
๐ ๋๋ฉ์ธ ๋ก์ง์ ๊ฒฉ๋ฆฌ
๐ก ๊ธฐ์ ์ ์ธ ์์๋ฅผ ๋๋ฉ์ธ ๋ก์ง์์ ๋ถ๋ฆฌํ๊ณ ์ถ๋ค!
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ํ์ ์ธ ๋ฐฉ๋ฒ: ๋ ์ด์ด ์ํคํ
์ฒ
(ํ์ง๋ง DDD๋ฅผ ํ๋ค๊ณ ๋ฐ๋์ ๋ ์ด์ด ์ํคํ
์ฒ๋ฅผ ์จ์ผ ํ๋ ๊ฒ์ ์๋)
๐น ๋ ์ด์ด ์ํคํ ์ฒ (Layered Architecture)
1๏ธโฃ User Interface (UI)
- ์ฌ์ฉ์๊ฐ ์์คํ
๊ณผ ์ํธ์์ฉํ๋ ๊ณ์ธต
2๏ธโฃ Application - ๋น์ฆ๋์ค ๋ก์ง์ ์คํํ๋ ์ ํ๋ฆฌ์ผ์ด์
์๋น์ค ๊ณ์ธต
3๏ธโฃ Domain - ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง์ด ํฌํจ๋ ๊ณ์ธต (DDD์ ์ค์ฌ)
4๏ธโฃ Infrastructure - ๋ฐ์ดํฐ๋ฒ ์ด์ค, ์ธ๋ถ API, ๋ฉ์์ง ํ ๋ฑ๊ณผ ์ฐ๊ฒฐ
โ ์ด ๊ตฌ์กฐ๋ฅผ ํตํด ๊ธฐ์ ์ ์ธ ์์์ ๋๋ฉ์ธ ๋ก์ง์ ๋ถ๋ฆฌํ ์ ์์!
๐จ ๋ชจ๋ธ ์ฃผ๋ ์ค๊ณ์ ๋น๋ฉ ๋ธ๋ก (Building Blocks)
DDD๋ ์ฝ๋ ๋ณต์ก์ฑ์ ์ค์ด๊ธฐ ์ํด ๋๋ฉ์ธ์ ํน์ ์ญํ ๋ณ๋ก ๋ถ๋ฅํฉ๋๋ค.
์ด๋ฅผ ์ํด ์ฌ๋ฌ ๊ฐ์ง ๋น๋ฉ ๋ธ๋ก์ ์ ์ํ ์ ์์ต๋๋ค.
๐ฏ 1) ๋๋ฉ์ธ์ ํํํ๋ ๋น๋ฉ ๋ธ๋ก
์ด๋ค์ ๋น์ฆ๋์ค ๋ก์ง์ ์ฝ๋๋ก ํํํ๋ ํต์ฌ ์์์ ๋๋ค.
๋น๋ฉ ๋ธ๋ก์ค๋ช
Association (์ฐ๊ด ๊ด๊ณ) | ๊ฐ์ฒด ๊ฐ์ ๊ด๊ณ ํํ |
Value Object (๊ฐ ๊ฐ์ฒด) | ๋ถ๋ณ์ด๋ฉฐ ๋์ผ์ฑ๋ณด๋ค ๊ฐ์ด ์ค์ํ ๊ฐ์ฒด |
Entity (์ํฐํฐ) | ๊ณ ์ ํ ์๋ณ์๋ฅผ ๊ฐ์ง๋ ๊ฐ์ฒด |
Service (์๋น์ค) | ํน์ ์ํฐํฐ์ ์ํ์ง ์๋ ๋๋ฉ์ธ ๋ก์ง ์ฒ๋ฆฌ |
Module (๋ชจ๋) | ๊ด๋ จ๋ ๋๋ฉ์ธ ๊ฐ๋ ์ ๋ ผ๋ฆฌ์ ์ผ๋ก ๋ฌถ์ |
๐ฏ 2) ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๋ ๋น๋ฉ ๋ธ๋ก
์ด๋ค์ ๊ฐ์ฒด์ ์์ฑ๊ณผ ์ ์ฅ์ ๋ค๋ฃจ๋ ์์์ ๋๋ค.
๋น๋ฉ ๋ธ๋ก์ค๋ช
Aggregate (์ ๊ทธ๋ฆฌ๊ฒ์ดํธ) | ๋ถ๋ณ์์ ์ ์งํ๊ธฐ ์ํ ๊ฐ์ฒด ๊ทธ๋ฃน |
Repository (๋ฆฌํฌ์งํ ๋ฆฌ) | ์ ๊ทธ๋ฆฌ๊ฒ์ดํธ๋ฅผ ์ ์ฅํ๊ณ ์กฐํํ๋ ์ญํ |
Factory (ํฉํ ๋ฆฌ) | ๋ณต์กํ ๊ฐ์ฒด ์์ฑ์ ์ฒ๋ฆฌํ๋ ์ญํ |
โ ์ด๋ฌํ ๋น๋ฉ ๋ธ๋ก์ ํ์ฉํ๋ฉด ์ฝ๋์ ์์ง๋๋ฅผ ๋์ด๊ณ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ ์ ์์!
๐ ๋๋ฉ์ธ ๋ชจ๋ธ ์์ - ๋ถ๋ณ์(Invariant) ๊ด๋ฆฌ
๋๋ฉ์ธ ๋ก์ง์ ์ค๊ณํ ๋ **๋ถ๋ณ์(Invariant)**์ ์ ์งํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
๐ก ๋ถ๋ณ์์ด๋?
- ์์คํ ์์ ๋ฐ๋์ ์ ์ง๋์ด์ผ ํ๋ ๊ท์น
- ์์ :
- Order(์ฃผ๋ฌธ)์ ์ด ๊ธ์ก์ LimitPrice(์ต๋ ๊ฐ๊ฒฉ)๋ณด๋ค ์์์ผ ํ๋ค.
โ ๋ถ๋ณ์์ ๊นจ๋จ๋ฆฌ๋ ๋ฌธ์ (๋์์ฑ ์ด์)
- User1์ด Order ๊ฐ์ฒด๋ฅผ ์์
- User2๋ ๊ฐ์ Order ๊ฐ์ฒด๋ฅผ ์์
- DB ์
๋ฐ์ดํธ ์ ๋ณ๊ฒฝ๋ ๊ฒ๋ง ์ ์ฅํ๋ค๋ฉด?
- → ๋ถ๋ณ์ ์๋ฐ ๊ฐ๋ฅ์ฑ ๋ฐ์
โ ํด๊ฒฐ์ฑ : Aggregate(์ ๊ทธ๋ฆฌ๊ฒ์ดํธ) ์ฌ์ฉ
- ๋ถ๋ณ์์ ๋ง์กฑํ๋ ๊ฐ์ฒด ๊ทธ๋ฃน ๋จ์๋ก ์ฒ๋ฆฌ
- Aggregate ๋ด๋ถ์์ ๋ณ๊ฒฝ, DB ์ ๋ฐ์ดํธ ๋ฑ ๋ชจ๋ ์์ ์ ํธ๋์ญ์ ๋จ์๋ก ์ฒ๋ฆฌ
- ์ฆ, ๋๋ฉ์ธ ๋ฃฐ(๋น์ฆ๋์ค ๋ฃฐ)์ ๋ฐ๋ผ ํ๊บผ๋ฒ์ ์ ๋ฐ์ดํธ
โ ๊ฒฐ๊ณผ์ ์ผ๋ก, ์ ๊ทธ๋ฆฌ๊ฒ์ดํธ๋ ๋ฐ์ดํฐ ์ ํฉ์ฑ์ ๋ณด์ฅํ๋ ์ญํ ์ ์ํ
๐ ๊ฒฐ๊ณผ์ ์ผ๊ด์ฑ (Eventual Consistency)
- ์์ : ์ฃผ๋ฌธ ์(Order Count) ์
๋ฐ์ดํธ
- ์ฃผ๋ฌธ์ ์์ฑํ ๋, ์ฃผ๋ฌธ ๊ฐ์๋ฅผ ๋ณ๋์ ํธ๋์ญ์ ์์ ๊ด๋ฆฌํ๋ ๊ฒฝ์ฐ
- ์ฆ, ์ฃผ๋ฌธ ๊ฐ์ ์ ๋ฐ์ดํธ๊ฐ ์ฃผ๋ฌธ ์์ฑ ํธ๋์ญ์ ๊ณผ ๋ณ๋๋ก ์คํ๋จ
- ๋ชจ๋ ํธ๋์ญ์ ์ด ์ฆ์ ๋ฐ์๋์ง ์์๋ ๊ด์ฐฎ์ → ๊ฒฐ๊ณผ์ ์ผ๋ก ์ผ๊ด์ฑ์ด ์ ์ง๋๋ฉด ๋จ
- ์ด๋ฐ ๋ฐฉ์์ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ์์ ๋ง์ด ์ฌ์ฉ๋จ
๐ ๋ง๋ฌด๋ฆฌ: DDD๋ฅผ ์ ์ฉํ๋ฉด?
โ
๊ธฐ์ ์ด ๋๋ฉ์ธ์ ์ง๋ฐฐํ์ง ์๊ณ , ๋๋ฉ์ธ์ด ๊ธฐ์ ์ ์ฃผ๋ํ๋ ์ค๊ณ
โ
๋น์ฆ๋์ค ๋ก์ง์ ์ฝ๋์ ๋์ผํ๊ฒ ์ ์ง (๋ชจ๋ธ = ์ฝ๋)
โ
๋ ์ด์ด ์ํคํ
์ฒ์ ๋น๋ฉ ๋ธ๋ก์ ํ์ฉํ์ฌ ์ ์ง๋ณด์์ฑ์ ๋์
โ
๋ถ๋ณ์์ ์งํค๋ฉฐ ๋ฐ์ดํฐ ์ ํฉ์ฑ์ ๋ณด์ฅ
DDD๋ ๋จ์ํ ๊ฐ๋ฐ ๋ฐฉ๋ฒ๋ก ์ด ์๋๋ผ ๋น์ฆ๋์ค ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์ฒ ํ์
๋๋ค.
๊ธฐ์ ์ด ์๋ ๋๋ฉ์ธ ์ค์ฌ์ ์ฌ๊ณ ๋ฐฉ์์ผ๋ก ์ ๊ทผํ๋ ๊ฒ์ด ํต์ฌ! ๐