์ง๋ ํ๋ก์ ํธ์์ ์ฌ๋ฌ๋ฒ ๋ฆฌํฉํ ๋ง์ ๊ฑฐ์น๋ฉฐ ์ํคํ ์ฒ์ ๊ดํ ๊ด์ฌ์ด ๋์์ก๋ค. DDD ์ฑ ์ ์ถ์ฒ ๋ฐ๊ณ ์ธํฐ๋ท์ ์ด์ฌํ ์ํํ๋ฉฐ ๊ณต๋ถ ์ค์ด๋ค.
๋ธ๋ก๊ทธ์ ๋ด์ฉ๋ค์ ์ ๋ฆฌํ๋ฉฐ ๋ณต๊ธฐํ๊ณ , ์ด๋ฅผ ์ด๋ฒ ์บก์คํค๋์์ธ ํ๋ก์ ํธ์ ์ ์ฉํ๋ฉด์ ์ฐ์ตํ๋ ค๊ณ ํ๋ค. ํ๋ก์ ํธ์ ๋ํด ๊ฐ๋จํ ๊ท๋ธํ์๋ฉด, ์๊ธฐ์๊ฐ์ ์ฒจ์ญ ์๋น์ค์ด๋ค.
DDD์์๋ ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ์ญํ ๋ฟ๋ง ์๋๋ผ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์ญํ
ex) ์๊ธฐ์๊ฐ์
๋ ๊ฐ ์ด์์ ๋ฐ์ดํฐ๊ฐ ํ๋์ ๊ฐ๋
์ธ ๊ฒฝ์ฐ์ ํด๋น
๋ถ๋ณ์ผ๋ก ๊ตฌํ๋๋๋ก ๊ถ์ฅ
ex) ์์ฑ์ (์์ฑ์์ ์ด๋ฆ, ์์ฑ์์ ์ด๋ฉ์ผ ๋ฑ)
๊ฐ์ฒด์งํฅ์ค๊ณ 5์์น SOLID ์ค D์ ํด๋น
Dependancy Inversion Principle(์์กด ์ญ์ ์์น)์ผ๋ก, ๊ณ ์์ค ๋ชจ๋์ด ์ง์ ์ ์์ค ๋ชจ๋์ ์์กดํ๋ ๋์ ๊ณ ์์ค ๋ชจ๋์ธ ์ธํฐํ์ด์ค์ ์์กด
์ ์์ค ๋ชจ๋์ ์ธํฐํ์ด์ค๋ฅผ ์์ ๋ฐ์ ์ค์ ๊ธฐ๋ฅ์ ์ํ
ex) ์๊ธฐ์๊ฐ์ ํ์ฌ ์ ๋ณด + ์ง๋ฌธ + ๋ต๋ณ == ์๊ธฐ์๊ฐ์ Aggregate
์ผ๋จ DDD๋ฅผ ๊ณต๋ถํ๊ธฐ ์ ์ ๊ธฐ์กด์ ํ๋๋๋ก DB ์ค๊ณ์ ORM ์์ฑ์ ๋ง์น ์ํ์ด๋ค. ๊ณต๋ถํ๋ฉฐ ํ์ธํ ๋ด์ฉ์ ๋ง์ถ์ด ์์ ํด๋ณด๋ ค๊ณ ํ๋ค.
์บก์คํค๋์์ธ ํ๋ก์ ํธ์ ๊ธฐ์กด DB๋ค. ์๊ธฐ์๊ฐ์ ์ ๋ ฅ, ์์ , ์ ์ฅ, ์ญ์ , ๋ถ์ ๋ฑ์ ๊ธฐ๋ฅ๋ง์ ๊ฐ์ง ๋ฐฑ์๋์๊ฒ๋ ๋น๊ต์ ๊ฐ๋จํ ์๋น์ค๋ผ DB๊ฐ ์กฐ๊ทธ๋งฃ๋ค.
์ง๊ธ๊น์ง ํ์ตํ ๋ด์ฉ์ ํ ๋๋ก Aggregate ๋จ์๋ก ๋ฌถ์ด ๋ณด์๋ค.
ํ์ ๋ฐ์ดํฐ User Entity
ํ์์ ๊ตฌ๋งค ์ฌ๋ถ(Plan)์ ๋ํ๋ด๋ PlanStatus Value
์๊ธฐ์๊ฐ์ ๋ฐ์ดํฐ Form Entity
์๊ธฐ์๊ฐ์ ์์ฑ ์ค/์๋ฃ ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ FormStatus Value
์๊ธฐ์๊ฐ์ ํญ๋ชฉ๊ณผ ๋ต๋ณ์ ๋ํ๋ด๋ Question Value
ํ์ฌ ๋ฐ์ดํฐ Company Entity
๋ฉด์ ๋ฐ์ดํฐ Interview Entity
๋ฉด์ ์ง๋ฌธ์ ๋ถ๋ฅ๋ฅผ ๋ํ๋ด๋ InterviewCategory Value
์์ ๊ฐ์ด ๊ตฌ์ฑํ๊ธฐ ์ ๊น์ง๋, Question์ด ๋ ๋ฆฝ๋ Entity๋ผ๊ณ ์๊ฐํ์๋ค. Aggregate ๋จ์๋ก ๋ฌถ์ผ๋ ค ์๊ฐํ๋ค ๋ณด๋ ์๊ธฐ์๊ฐ์ ํญ๋ชฉ์ ๋ํ ๋ต๋ณ์ ์์ฑํ๊ธฐ ์ ์, ์๊ธฐ์๊ฐ์ ํผ ์์ฒด์ ์กด์ฌ ์ฌ๋ถ๋ ์ ํจ์ฑ ๊ฒ์ฌ ๋ฑ์ด ํ์ํ๋ค๋ ์ฌ์ค์ ๊นจ๋ซ๊ฒ ๋์๋ค. ์ฆ, Form์์ ๊ฒ์ฌ ์ดํ Question์ ๋ณ๊ฒฝํด์ฃผ๋ ๊ธฐ๋ฅ์ ์คํํด์ผ ํ๋ฉฐ Question์ด Value๋ผ๊ณ ์๊ฐํ๊ฒ ๋์๋ค.
๋ฐ๋๋ก Company์ ๊ฒฝ์ฐ ๋จ์ํ ํ์ฌ ์ด๋ฆ๋ง์ ์ ์ฅํ๋ Form์ ํ ์ปฌ๋ผ์ผ๋ก ์ทจ๊ธํ๋๋ฐ, ๊ทธ ๊ฐ๋ ์์ฒด๊ฐ ์๊ธฐ์๊ฐ์์ ์ข ์๋์ง๋ ์์ ๋ฟ๋๋ฌ ํ์ฌ์ ์ ๋ณด๊ฐ ๋ ํ์ํ๊ฒ ๋๊ฑฐ๋ 'ํ์ฌ๋ณ ์๊ธฐ์๊ฐ์', 'ํ์ฌ๋ณ ๋ฉด์ ' ๋ฑ์ ํํฐ๋ง ๊ธฐ๋ฅ ๋ฑ ํ์ฅ์ฑ์ ๊ณ ๋ คํด ์๋ก์ด Entity ๋ฐ Aggregate๋ก ๋ถ๋ฆฌํ๊ฒ ๋์๋ค.
Value ๊ฐ์ฒด์ ๊ฒฝ์ฐ ๋ถ๋ณ์ธ ์ํ๋ก ๊ตฌํ๋๋ ๊ฒ์ด ๊ถ์ฅ๋๋ฉฐ, ํนํ Setter ์ฌ์ฉ์ ์ฃผ์ํด์ผ ํ๋๋ฐ ๊ทธ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ๋ค.
์ด๋ฌํ ์ด์ ๋ก ์ธ๋ถ์์ Value ๊ฐ์ ๋ฐ๊พธ์ด์ค ๋๋ ์์ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ํ ๋นํด์ ์๋ฆฌ๋ฅผ ๋ฐ๊พธ์ด์ค๋ค. ๋ ๋ด๋ถ ์ํ์ ๋ณ๊ฒฝ์ Aggregate Root๋ฅผ ํตํด์๋ง ์ด๋ฃจ์ด์ง๋ค.
Aggregate Root๋ Aggregate ์ ์ฒด์ ์ผ๊ด์ฑ์ด ๊นจ์ง์ง ์๋๋ก ๊ด๋ฆฌํด์ฃผ๋ Entity๋ก, Aggregate ๋ด ๋ค๋ฅธ ๊ฐ์ ๋ณ๊ฒฝํ๋ ๊ธฐ๋ฅ์ ํฌํจํ๋ค. ์ด๋ ์ฌ๋ฌ๊ตฐ๋ฐ์์ ๋ก์ง์ด ๋ฐ๋ณต๋๋ ๊ฒ์ ๋ฐฉ์งํด์ฃผ๊ธฐ๋ ํ๋ค. ์ญํ ์ ํฌ๊ฒ ๋ค์๊ณผ ๊ฐ๋ค.
๋๊ฐ ํ Aggregate๋ Entity๋ฅผ ํ๋๋ง ๊ฐ์ง๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค๊ณ ํ๋ค.
์์์ ์๊ธฐ์๊ฐ์ Aggregate์์๋ Form์ด Aggregate Root์ ํด๋นํ๋ค.
๋ณดํต์ ํธ๋์ญ์ ์ ๋จ์๊ฐ ํ Aggregate์ ๋ฒ์์ ํด๋นํ๋๋ฐ, Aggregate๊ฐ ์ ์ ํ๊ฒ ์ค์ ๋์ง ์์ ๊ฒฝ์ฐ์๋ ํด๋น ํ ์ด๋ธ๋ค์ด ์ ๋ถ ์ ๊ธฐ๊ฒ ๋์ด ๋์์ ์ฒ๋ฆฌํ ์ ์๋ ํธ๋์ญ์ ์ ์๊ฐ ํ์ ํ ์ค์ด๋ ๋ค.
Repository๋ ํ Aggregate๋ฅผ ๋ด๋นํ๋๋ก ์์ฑํ๋ ๊ฒ์ด ๊ถ์ฅ๋๋ค. Aggregate์ ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์์์ ์ผ๋ก ๋ฐ์์ด ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ฌ๊ธฐ๊น์ง ๋ฆฌํฉํ ๋ง์ ์งํํ์๋ค.