๋๋ฉ์ธ(Domain-Driven Design)
์ด๋ฏธ ๋ชจ๋๊ฐ ์๊ณ ์์ง๋ง ์๋ฒฝํ ์ดํดํ๊ณ ์ ์ํ๊ธฐ๋ ์ฝ์ง ์๊ธฐ์ ํ ๊ฐ์ง ์๋ฅผ ๋ค์ด๋ณด์.
์จ๋ผ์ธ ์ผํ๋ชฐ์ ๋ง๋ ๋ค๊ณ ๊ฐ์ ํ๋ค๋ฉด, ์ํ์ ์ฃผ๋ฌธํ๋ ํ์์ด ์์ด์ผํ๊ณ ์ฃผ๋ฌธ ์์คํ
, ์ํ ๋ฑ๋ก ๋ฐ ๊ด๋ฆฌ ์กฐํ, ์ํ ๋ฐฐ์ก, ๊ฒฐ์ ๋ฑ์ ๊ธฐ๋ฅ์ด ์ ๊ณต๋์ด์ผ ํ๋ค.
์ด ๋, '์จ๋ผ์ธ ์ผํ๋ชฐ' ์ ๋ฌธ์ ์์ญ์ธ ์ต์์ ๋๋ฉ์ธ์ ํด๋น๋๊ณ , ์ด๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๊ณผ์ ๋ฑ์ ๋๋ฉ์ธ ์ง์(Domain Knowledge)๋ค์ ์์ ๋๋ฉ์ธ์ ํด๋น๋๋ค.
์์๋๋ฉ์ธ
ํ์ ๋๋ฉ์ธ์ ์์ ๋๋ฉ์ธ์ ์ด๋ฃจ์ด์ง๊ฒํ๋ ํ์ ๊ตฌ์ฑ์ฒด์ด๋ค.
ํ์๋๋ฉ์ธ
ํ์: ํ์์ ๋ณด
์ํ: ๊ณต๊ธ์ฒ, ํ๋งค์ฒ, ์ํ ์ ๋ณด
์ฃผ๋ฌธ: ์ฃผ๋ฌธ ์ํ์ ๋ณด, ์ฃผ๋ฌธํ ํ์, ๋ฐฐ์ก์ง ...
๊ฒฐ์ : ๊ฒฐ์ ์ ๋ณด
๋ฐฐ์ก: ๋ฐฐ์ก์ง, ๋ฐฐ์ก๋ฒํธ, ๋ฐฐ์ก์ ๋ณด..
๋๋ฉ์ธ ์ค์ฌ ์ค๊ณ(Domain-Driven Design)์ด๋?
๋๋ฉ์ธ(๋น์ฆ๋์ค ๋ชฉํ)์ ์ค์ฌ์ผ๋ก ์๊ฒ ์ชผ๊ฐ์ด ์ค๊ณ(๋๋ ๋ฌธ์ ํด๊ฒฐ)ํด ๋๊ฐ๋ ๋ฐฉ๋ฒ์ด๋ค.
๊ฐ์ฒด์งํฅ์ ํน์ง์ธ '๋ชจ๋๊ฐ์ ์์กด์ฑ์ ๋ฎ์ถ๊ณ , ์์ง์ฑ์ ์ต๋ํ' ํ๋ฉด์ ์ค๊ณํ๋ค.
๋ฌผ๊ฑด์ ์ฌ๊ธฐ์ํด(Buy Domain) ์จ๋ผ์ธ ์ผํ๋ชฐ์ ๋ค์ด๊ฐ A์จ๋, ๊ทธ๊ณณ์์ ๋ฌผ๊ฑด์ ํ๋งค (Sell Domain) ํ๋ B์ฌ์์ ๊ด๋ฆฌ(Manage Domain) ํ๋ ๋ฌผ๊ฑด์ ์ฐ๋ค.
'Implementing DDD'์ ์ ์ ๋ฐ ๋ฒ๋
ผ์ DDD ๋์
์ด ํ์ํ์ง ์์ ๊ฒฝ์ฐ์ ๋ํด์๋ ๋ค์๊ณผ ๊ฐ์ด ๋งํ๊ณ ์๋ค.
๋น์ ์ ์ ํ๋ฆฌ์ผ์ด์
์ด ์์ ํ ๋ฐ์ดํฐ ์ค์ฌ(data-centric)์ด๋ฉฐ ์์ํ CRUD ์๋ฃจ์
์ ์ ๋ง ์ ๋ง์์, ๋ชจ๋ ๋์์ด ๊ฐ๋จํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ๋ฅผ ํตํด ๊ธฐ๋ณธ์ ์ธ ์์ฑ, ์ฝ๊ธฐ, ๊ฐฑ์ , ์ญ์ ๋ฑ์ ์ํํ ๋ฟ์ด๋ผ๋ฉด DDD๊ฐ ํ์ํ์ง ์๋ค. ๋น์ ์ ํ์ ๊ทธ์ ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ
์ด๋ธ ํธ์ง๊ธฐ๋ง ์์ผ๋ฉด ๋๋ค. ...... ๋น์ ์ด ๋จ์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ๋ฐ ๋๊ตฌ๋ฅผ ์ฌ์ฉํด ์๋ฃจ์
์ ๋ง๋ค ์ ์๋ค๋ฉด, DDD์ ํ์ฌ์ ์๊ฐ๊ณผ ๋์ ๋ญ๋นํ์ง ๋ง๋ผ.
1. ๋ฌผ๊ฑด์ ์ฌ๊ธฐ ์ํด ํ์ํ ์ ๋ณด๋ฅผ ๋ด์ ๊ฐ์ฒด์
2. ๊ณ์ฐ์ ํ๊ธฐ ์ํ ์ ๋ณด๋ฅผ ๋ด์ ๊ฐ์ฒด
3. ๊ด๋ฆฌ๋ฅผ ํ๊ธฐ ์ํ ์ ๋ณด๋ฅผ ๋ด์ ๊ฐ์ฒด
์ 3๊ฐ์ Repository ๋ฅผ ๋ชจ๋ ๊ตฌํํ๋ ๊ฒ์ด ๋ง์๊น?
๊ฐ์ฒด ๊ฐ ๋ด๋ถ ์ํธ์์ฉ์ ํตํด(๊ฑฐ๋ฅด๊ณ ๊ฑธ๋ฌ) ๊ณตํต ์งํฉ์ ์ฐพ์ Repository๋ก ๋ฌถ์ฌ์ผ๋ง ํ๋ค.
์ค๋ ํ์ฌ์์ ์ง๊ฐ์ง ๊ฐ๋ ๋ฌด์ํ ๋ง์ ๋ฐฉ๋ฒ ์ค ์ต์ ์ ํ ๊ฐ์ง ๋ฃจํธ๋ฅผ ์ฐพ๋ ๋ค๋น๊ฒ์ด์
๊ณผ ๊ฐ์ด ๋ง์ด๋ค.
๐๋ ์ฝ์๊ฑฐ๋ฆฌ
๐ DDD์งํฅ ๋ง์ดํฌ๋ก ์๋น์ค ๋์์ธ
๐ ํ์ํ ๋ด์ฉ๋ง ์ถ๋ ค์ DDD ๋น์ฅ ์จ๋จน๊ธฐ
๐ DDD ํต์ฌ๋ง ๋น ๋ฅด๊ฒ ์ดํดํ๊ธฐ