์๋ ํ์ธ์~!! 11๊ธฐ ์ต๋ฏผ์ฃผ ๊ธฐ์์ ๋๋ค ๐
ํ์ฌ 11๊ธฐ๋ ์ธํผ์์์ ๋ง์ง๋ง ํ๋ก์ ํธ์ธ ์์จ ํ๋ก์ ํธ๋ฅผ ์งํ ์ค์ธ๋ฐ์,
์ ํฌ ํ์ ํนํ ํ๋ก์ ํธ ๋ ๋ชจ๋๋ฆฌ์ ์ํคํ ์ฒ๋ก ๊ตฌํํ ํ๋ก์ ํธ๋ฅผ ์์จ ํ๋ก์ ํธ์์ MSA๋ก ์ ํํ๊ณ , ์ด๋ฅผ ๊ณ ๋ํํ ๊ณํ์ ๋๋ค.
๋ฐ๋ผ์ ์ค๋์ ์ ํฌ ํ์ด DDD๋ฅผ ๋์ ํ๊ฒ ๋ ์ด์ ์ DDD ์ ๋ต์ ์ค๊ณ์ ๋ํด ๊ฐ๋จํ ๋ง์๋๋ฆฌ๊ฒ ์ต๋๋ค!
1. DDD(Domain Driven Design)์ด๋?
๊ฐ๊ฐ์ ๊ธฐ๋ฅ์ ์ธ ๋ฌธ์ ์ ์์ญ๋ค์ ์ ์ํ๋ '๋๋ฉ์ธ'๊ณผ, ๊ทธ ๋๋ฉ์ธ์ ์ฌ์ฉํ๋ '๋น์ฆ๋์ค ๋ก์ง'์ ์ค์ฌ์ผ๋ก ์ค๊ณํ๋ ๋ฐฉ๋ฒ๋ก ์ ๋งํฉ๋๋ค.
DDD๋ ๋ค์๊ณผ ๊ฐ์ ํน์ง์ ๊ฐ์ต๋๋ค.
1. ๋๋ฉ์ธ์ ๋ชจ๋ธ๊ณผ ๋ก์ง์ ์ง์ค
2. ๋ณดํธ์ ์ธ์ด(Ubiqutous Language) ์ฌ์ฉ
3. Software Entity์ Domain ๊ฐ ๊ฐ๋ ์ ์ผ์น
2. ์ DDD๋ฅผ ๋์ ํ๊ฒ ๋์์๊น?
์์ ์ ํฌ ํ์ด MSA ์ ํ์ ๋ชฉํ๋ก ํ๊ณ ์๋ค๊ณ ๋ง์๋๋ ธ๋๋ฐ์,
MSA ์ ํ๊ณผ DDD(Domain-Driven Design)๊ฐ ํญ์ ํจ๊ป ์ฌ์ฉ๋๋ ๊ฒ์ ์๋์ง๋ง, MSA๋ก ์ ํํ ๋ DDD๋ฅผ ์์ฃผ ๋์ ํ๋ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
MSA๋ ์ฌ๋ฌ ๋ ๋ฆฝ์ ์ธ ์๋น์ค๋ก ๋๋๊ธฐ ๋๋ฌธ์ ๊ฐ ์๋น์ค์ ๋๋ฉ์ธ ๊ฒฝ๊ณ๋ฅผ ๋ช ํํ ์ ์ํ๋ ๊ฒ์ด ์ค์ํ๋ฐ,
DDD๋ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๋๋ฉ์ธ ๋ชจ๋ธ์ ๋ช ํํ ์ค๊ณํ๋ ๋ฐ ์ค์ ์ ๋๋ฏ๋ก ์๋น์ค ๊ฐ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ณ ์๋น์ค ๊ฐ ์ญํ ์ ๋ช ํํ ๊ตฌ๋ถํ๋ ๋ฐ ๋์์ด ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
3. DDD ์ ๋ต์ ์ค๊ณ ๋ฐฉ๋ฒ
๊ฐ๋จํ ์์๋ฅผ ๋ณด๋ฉฐ, ์ ๋ต์ ์ค๊ณ์ ๊ฐ ๋จ๊ณ์ ๋ํด ์ค๋ช ํ๊ฒ ์ต๋๋ค.

์ฅ๋ฐ๊ตฌ๋์ ์ ๋ณด๋ ์๋ฒ์ ์ ์ฅ๋๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
1. ๋๋ฉ์ธ ์ด๋ฒคํธ(Domain Event)
์์คํ ๋ด์์ ์ค์ํ `์ฌ๊ฑด`์ ์๋ฏธํ๋ฉฐ, ๋ณดํต ๊ณผ๊ฑฐ ์์ ๋์ฌ๋ก ํํํฉ๋๋ค.
์ ์์์์๋ "์ฅ๋ฐ๊ตฌ๋์ ๋ฌผํ์ ์ถ๊ฐํ์๋ค", "์ฅ๋ฐ๊ตฌ๋์ ๋ฌผํ์ ์ ๊ฑฐํ์๋ค" ๋ฑ์ด ๋๋ฉ์ธ ์ด๋ฒคํธ์ ๋๋ค.
2. ์ปค๋งจ๋(Command)
์ด๋ฒคํธ๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ ๋ช ๋ น์ผ๋ก, ์ปค๋งจ๋๋ฅผ ํตํด ๋น์ฆ๋์ค ๋ก์ง์ด ์คํ๋ฉ๋๋ค.
"์ฅ๋ฐ๊ตฌ๋์ ๋ฌผํ์ ์ถ๊ฐํ์๋ค" ๋ผ๋ ์ด๋ฒคํธ๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ ์ปค๋งจ๋๋ "์ฅ๋ฐ๊ตฌ๋์ ๋ฌผํ ์ถ๊ฐ" ์ด๊ณ ,
"์ฅ๋ฐ๊ตฌ๋์ ๋ฌผํ์ ์ ๊ฑฐํ์๋ค" ๋ผ๋ ์ด๋ฒคํธ๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ ์ปค๋งจ๋๋ "์ฅ๋ฐ๊ตฌ๋์์ ๋ฌผํ ์ ๊ฑฐ" ๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.
3. ์ธ๋ถ ์์คํ (External System)
์ด๋ฒคํธ์ ์ํด ํธ์ถ๋๊ฑฐ๋, ์ด๋ฒคํธ์ ๊ด๊ณ๊ฐ ์๋ ๋ ๊ฑฐ์ ์์คํ ๋๋ ์ธ๋ถ ์์คํ ์ ๋๋ค.
๋ฌผํ ์ ๊ฑฐ๊ฐ ์๋ฃ๋ ํ, "์ฌ๊ณ ๊ด๋ฆฌ ์์คํ "์ ์ ํธ๋ฅผ ๋ณด๋ด ํด๋น ๋ฌผํ์ ์ฌ๊ณ ์๋์ ์ ๋ฐ์ดํธํ ์ ์์ต๋๋ค.
4. ์กํฐ(Actor)
์ญํ ์ ํ๋ ๊ฐ์ธ ๋๋ ์กฐ์ง
์กํฐ๋ ์ฅ๋ฐ๊ตฌ๋์ ๋ฌผํ์ ์ถ๊ฐ/์ ๊ฑฐํ๋ ์ฃผ์ฒด์ธ "์ฌ์ฉ์"์ ๋๋ค.
5. ์ ๊ทธ๋ฆฌ๊ฑฐํธ(Aggregate)
๋ฐ์ดํฐ ๋ณ๊ฒฝ ๋จ์๋ก, ๋ผ์ดํ ์ฌ์ดํด์ด ๊ฐ์ ๋๋ฉ์ธ๋ค์ ํ๋ฐ ๋ชจ์๋์ ์งํฉ์ ๋๋ค. (์ฐ๊ด๋๋ ์ํฐํฐ์ ๊ฐ ๊ฐ์ฒด์ ๋ฌถ์)
์ฅ๋ฐ๊ตฌ๋์ ๋ด๊ธด ๋ฌผํ ์ ๋ณด(๋์๋ช , ๊ฐ๊ฒฉ, ์๋)๋ "์ฅ๋ฐ๊ตฌ๋"๋ผ๋ ์ ๊ทธ๋ฆฌ๊ฑฐํธ๋ก ์ทจ๊ธ๋ฉ๋๋ค.
6. ๋ฆฌ๋ ๋ชจ๋ธ(ReadModel)
๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๋ชจ๋ธ์ ๋๋ค. ๋ณดํต CQRS ํจํด์์ ์ฐ๊ธฐ ๋ชจ๋ธ๊ณผ ๋ถ๋ฆฌ๋์ด, ์ฝ๊ธฐ ์์ ์ ์ต์ ํํฉ๋๋ค.
(์ฌ์ฉ์๊ฐ ์ปค๋งจ๋๋ฅผ ์ํํจ์ ์์ด ๊ฒฐ์ ๊ทผ๊ฑฐ’๊ฐ ๋๋ ๋ฐ์ดํฐ๋ค์ ์๋ฏธํ๊ธฐ๋ ํฉ๋๋ค.)
์ฌ์ฉ์๊ฐ ์ฅ๋ฐ๊ตฌ๋์์ ๋ฌผํ์ ์ ๊ฑฐํ๊ธฐ ์ํด์ ์ฌ์ฉ์๋ ๋ฌด์์ ๋ณด๊ณ , ๋ฌด์์ ๊ณ ๋ คํ ๊น์?
1. ์ฌ์ฉ์๋ ์ฅ๋ฐ๊ตฌ๋์ ‘์ด์ก’์ด ์ผ์ ๊ธ์ก์ ๋์์ ๋, ๋ฌผํ์ ์ ๊ฑฐํด์ผ ํ๋ค๊ณ ์๊ฐํ๊ฒ ๋ฉ๋๋ค.
2. ์ฌ์ฉ์๋ ์ฅ๋ฐ๊ตฌ๋์ ‘๋ฌผํ ๋ชฉ๋ก๋ค’๋ก๋ถํฐ ์ ๊ฑฐํ ํญ๋ชฉ์ ํ์ํฉ๋๋ค.
3. ์ฌ์ฉ์๋ ‘๋ฌผํ์ ๊ฐ๊ฒฉ’๊ณผ ‘๋ฌผํ์ ๊ฐ์’๋ฅผ ๋ณด๊ณ ์ ๊ฑฐํ ํญ๋ชฉ์ ์ ํํฉ๋๋ค.
์ด ์์์์ ์ฌ์ฉ์๋ ‘์ฅ๋ฐ๊ตฌ๋ ์ด์ก’, ‘๋ฌผํ ๋ชฉ๋ก’, ‘๋ฌผํ์ ๊ฐ๊ฒฉ’, ‘๋ฌผํ์ ๊ฐ์’ Read Model์ ํ์ฉํด ‘๋ฌผํ ์ ๊ฑฐ’ ์ปค๋งจ๋๋ฅผ ์ํํ๊ธฐ๋ก ๊ฒฐ์ ํฉ๋๋ค.
7. ์ ์ฑ (Policy)
์์คํ ์์ ๋น์ฆ๋์ค ๊ท์น์ ์ ์ํ๋ฉฐ, ํน์ ์ด๋ฒคํธ๋ ์กฐ๊ฑด์ด ๋ฐ์ํ์ ๋ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ์ง ๊ฒฐ์ ํฉ๋๋ค.
์ฅ๋ฐ๊ตฌ๋์ ์ด ๊ธ์ก์ด ํน์ ๊ธ์ก ์ดํ๋ก ๋ด๋ ค๊ฐ๋ฉด, ์ฌ์ฉ์์๊ฒ ์ถ๊ฐ์ ์ธ ํ ์ธ ํํ์ด ์ ์ฉ๋์ง ์๋๋ก ์ ์ฑ ์ ์ค์ ํ ์ ์์ต๋๋ค.

MSA๋ก์ ์ ํ์ ์๋๊ณ ์๋ค๋ฉด, DDD ์ ๋ต์ ์ค๊ณ๋ฅผ ์งํํด๋ณด๋ ๊ฒ์ ์ด๋จ๊น์?
๊ทธ๋ผ ๋ค์ ๊ธฐ์ฌ๋ก ๋ง๋์, ์๋ -! ๐จ

'๐ ์ผ์ฑ์ฒญ๋ SW์์นด๋ฐ๋ฏธ(SSAFY) > SSAFYcial (๊ธฐ์๋จ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| #10. 2ํ๊ธฐ ๊ณตํต ํ๋ก์ ํธ ์ต์ฐ์ํ ์ธํฐ๋ทฐ (0) | 2024.11.28 |
|---|---|
| [์ธํผ์์ ๋ญํ๋?] #2ํ๊ธฐ_ํนํํ๋ก์ ํธ_ํ๊ณ (4) | 2024.10.23 |
| #8. NH๋ํ ๊ณ์ด์ฌ ์ฑ์ฉ์๋ด๐ค (0) | 2024.09.20 |
| [์ธํผ์์ ๋ญํ๋?] #2024_์ ํ์ํ_ํด์ปคํค_with_SSAFY #์คํ๋ผ์ธ_ํ์ฅ_ํ๊ธฐ (1) | 2024.09.19 |
| [์ธํผ์์ ๋ญํ๋?] #2ํ๊ธฐ_์ฒซ_๊ณตํตํ๋ก์ ํธ_ํ๊ณ (0) | 2024.08.26 |