[Design Pattern] DDD(๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ)๋?
DDD(Domain-Driven Design)๋?
๋ง์ดํฌ๋ก์๋น์ค์ ์ค๊ณ ๋ฐฉ๋ฒ๋ก ์ธ ๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ๋ ๋๋ฉ์ธ ํจํด์ ์ค์ฌ์ ๋๊ณ ์ค๊ณํ๋ ๋ฐฉ์์ ๋งํฉ๋๋ค. ์ฆ, ๋๋ฉ์ธ์ ์ค์ฌ์ผ๋ก ์ค๊ณํด ๋๊ฐ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
- DDD๋ ๋น์ฆ๋์ค ๋๋ฉ์ธ๋ณ๋ก ๋๋์ด ์ค๊ณํ๋ ๋ฐฉ์
- ๋จ์ํ ๊ธฐ์ ์ ์ธ ์ฌํญ๋ง ๊ณ ๋ คํ์ง ์๊ณ ์ค์ ๋๋ฉ์ธ์ธ ์๊ตฌ ์ฌํญ์ ์ค์ฌ
- ์ปค๋ฎค๋์ผ์ด์ ์ ํจ์จ์ฑ์ ๋์ด๊ธฐ ์ํ ์ค๊ณ
๋๋ฉ์ธ์ด๋?
์ค์ ์ธ๊ณ์์ ์ฌ๊ฑด์ด ๋ฐ์ํ๋ ์งํฉ์ผ๋ก DDD์์ ๋งํ๋ ๋๋ฉ์ธ์ ๋น์ฆ๋์ค ๋๋ฉ์ธ์ ๋๋ค. ์๋ฅผ ๋ค์ด ์ผํ๋ชฐ์์ ์ด์ฉ์๋ค์ธ ๊ณ ๊ฐ ๋๋ฉ์ธ, ์๋๋ค์ด ์ฃผ๋ฌธํ๋ ๋๋ฉ์ธ ๋ฑ์ด ์์ ์ ์์ต๋๋ค. ์ฆ, ๋น์ฆ๋์ค ๋๋ฉ์ธ์ ์ ์ฌํ ์ ๋ฌด์ ์งํฉ์ ๋๋ค.
์ด์ฒ๋ผ ์ํํธ์จ์ด๋ฅผ ๊ฐ๋ฐํ๊ธฐ ์์ DDD๋ ์ด๋ฌํ ๋น์ฆ๋์ฆ ๋๋ฉ์ธ์ ๋ํ ๊น์ ์ดํด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋น์ค์ ๋ํ ์ดํด๋๋ฅผ ๋์ฌ ๋ณต์กํ ๋น์ฆ๋์ค ์ํฉ์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๋ก ์ ๋๋ค.
DDD์ ์ ์ฉ ๊ณผ์
DDD์ ํต์ฌ ๋ชฉํ๋ "Loolsy coupling", "High cohesion"์ ๋๋ค. ์ฆ, ์ดํ๋ฆฌ์ผ์ด์ ๋๋ ๊ทธ ์์ ๋ชจ๋๊ฐ์ ์์กด์ฑ์ ์ต์ํํ๊ณ ์์ง์ฑ์ ์ต๋ํํ๋ ๊ฒ์ ๋๋ค. ๋ํ DDD๋ Strategic Design๊ณผ Tactical Design์ผ๋ก ๋๋ ์ ์์ต๋๋ค.
- Strategic Design: ๊ฐ๋ ์ค๊ณ (์ ๋ต์ ์ค๊ณ)
- Tactical Design: ํ๋ก๊ทธ๋๋ฐ ํ๊ธฐ ์ํ ๊ตฌ์ฒด์ ์ค๊ณ (์ ์ ์ ์ค๊ณ)
๊ณผ์ ์ ๊ฐ๋จํ ์ ๋ฆฌํ์๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋๋ฉ์ธ/์๋ธ๋๋ฉ์ธ/Bounded Context๋ฅผ ๊ตฌ๋ถํ๊ณ ์ ์
- ์ด๋ฅผ ๋ฐํ์ผ๋ก Aggregate/Entity/Value Object/Repository ๋ฑ์ ๊ตฌํ
- ์ด์ ์ ํฉํ ์ํคํ ์ฒ๋ฅผ ๊ฒฐ์ ํ๊ณ ๊ฐ๋ฐ
์ด๋ฌํ DDD๋ ํ ๊ตฌ์ฑ์์์ด ๋ชจ๋ ์ด์ ๋ํ ์ง์๋ค์ด ํ์ต๋์ด ์์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋์ ํ๋ ๊ณผ์ ์ด ์ฝ์ง ์์ต๋๋ค.
Strategic Design
๋๋ฉ์ธ ์ ๋ฌธ๊ฐ ๋ฐ ๊ธฐ์ ํ์ด ํจ๊ป ๋ชจ์ฌ ์ ๋น์ฟผํฐ์ค ์ธ์ด๋ฅผ ํตํด ๋๋ฉ์ธ ์ง์์ ๊ณต์ ๋ฐ ์ดํดํ๊ณ ์ด๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฐ๋ ๊ณผ ๊ฒฝ๊ณ๋ฅผ ์๋ณํด bounded-context๋ก ์ ์ํ๊ณ ๊ฒฝ๊ณ์ ๊ด๊ณ๋ฅผ context map์ผ๋ก ์ ์ํฉ๋๋ค.
- model: ๋๋ฉ์ธ์ ํน์ ์์์ ๋ฌ์ฌํ๋ ์ถ์ํ ์์คํ
- entity: ํ ์ด๋ธ ๋ชจ๋ธ, ๊ณ ์ ์๋ณ์๋ฅผ ๊ฐ์ง
- value object: ๋ฐ์ดํฐ ํํ ๋ชจ๋ธ ์๋ณ์๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๋ ๋ถ๋ณ ํ์
- domain model: ์ค์ ์ธ๊ณ๋ฅผ ๋ฐ์ํ๋ ๊ตฌ์ฒด์ ์ธ ์ค๊ณ
- ์ ๋น์ฟผํฐ์ค ์ธ์ด: ๋๋ฉ์ธ ๋ชจ๋ธ์ ๋๋ฌ์ผ ์ธ์ด ๊ตฌ์กฐ๋ก ํ ์ ์ฒด๊ฐ ๊ฐ๊ฐ์ ์ ๋ฌด ํํธ์์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉ๋๋ ์ดํ
- context: ์๋ฏธ๋ฅผ ๊ฒฐ์ ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ ๋จ์ด๋ ๋ฌธ์ฅ์ด ๋ํ๋๋ ์ค์ ์ผ๋ก ์ํฉ์ด ๋ฒ์ด์ง๋ ์ฃผ๋ณ ํ๊ฒฝ
- bounded-context: context์ ๋ํ ๊ตฌ์ฒด์ ์ธ ์ค๋ช ์ผ๋ก ํน์ ๋ชจ๋ธ์ด ์ ์๋๊ณ ์ ์ฉ๋ ์ ์๋ ์์ญ
- context map: ๊ฐ bounded-context๋ค ์ฌ์ด์ ๊ด๊ณ
Tactical Design
Strategic Design์์ ๋์ถ๋ bounded-context์ ๋๋ฉ์ธ์ ์ด์ฉํ์ฌ Aggregate ํจํด, Entity์ Value Object, Repository ๋ฑ์ ๊ตฌ์ฑํ๊ณ ๊ตฌํํฉ๋๋ค.
- Aggregate: ์ฐ๊ด๋ ๋น์ฆ๋์ค ๋ชฉ์ ์ํ์ ์ํ ์ํฐํฐ์ ๋ฒจ๋ฅ ์คํ์ ํธ์ ๋ฌถ์
์ด๋ฌํ ๊ณผ์ ์ ํตํด์ ์ค์ ์๋น์ค๋ฅผ ๊ตฌํํ๊ฒ ๋ฉ๋๋ค.
[์ฐธ๊ณ ]
https://happycloud-lee.tistory.com/94
https://huisam.tistory.com/entry/DDD
https://appleg1226.tistory.com/m/40
https://kadensungbincho.tistory.com/73
https://blog.bespinglobal.com/post/domain-driven-design-1%EB%B6%80-strategic-design/