domainDesign
Last updated
Last updated
(์๊ฐ ๊ฐ์ - ํจ์คํธ์บ ํผ์ค, The RED : ๋น์ฆ๋์ค ์ฑ๊ณต์ ์ํ Java/Spring ๊ธฐ๋ฐ ์๋น์ค ๊ฐ๋ฐ๊ณผ MSA ๊ตฌ์ถ by ์ดํฌ์ฐฝ)
์ด ๊ธ์์๋ base.md์์ ๋ค๋ค๋ ddd์ ๊ธฐ๋ณธ ๊ฐ๋ ์์ ๋ ๋์๊ฐ domain layer์ ๋ํ ๊ตฌํ์ ๋ค๋ฃน๋๋ค.
domain layer์์์ service์์๋ ์ ์ฒด ๋๋ฉ์ธ ๋ก์ง์ ํ๋ฆ์ ํ์ ํ ์ ์๋๋ก ๊ตฌํํ๋ค.
์ด๋ฅผ ์ํด์ ์ถ์ํ์ ๋ ๋ฒจ์ ๋ง์ด ๋์ฌ์ผ ํ๋ค.
๋๋ฉ์ธ์ interface๋ฅผ ์ฌ์ฉํ์ฌ ์ถ์ํํ๊ณ ์ค์ ๊ตฌํ์ ๋ค๋ฅธ layer์ ๋งก๊ธด๋ค.
์ด๋ service๋ง ์ฝ์ด๋ ๋๋ฉ์ธ์ ๋ก์ง ํ๋ฆ์ ํ์ ํ ์ ์๊ธฐ ์ํจ์ด๋ค.
dip(dependency inversion principle)์ ํ์ฉํ์ฌ ๋๋ฉ์ธ์ด ์ฌ์ฉํ๋ interface์ ์ค์ ๊ตฌํ์ฒด๋ฅผ ์ฃผ์ ๋ฐ์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ค.
์์ํ๋ ๊ฐ์ฒด๋ฅผ ๋ก๋ฉํ๊ธฐ ์ํด jpa๋ฅผ ์ฌ์ฉํ ์๋ ์์ง๋ง querydsl์ ์ฌ์ฉํ ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค.
domain layer์์๋ ๊ฐ์ฒด๋ฅผ ๋ก๋ฉํ๊ธฐ ์ํ ์ถ์ํ๋ interface๋ฅผ ์ฌ์ฉํ๊ณ , ์ค์ ๋์์ ํ์ layer์ ๊ธฐ์ ๊ตฌํ์ฒด์ ๋งก๊ธด๋ค๋ ๊ฒ์ด ํต์ฌ์ด๋ค.
interface๋ก ์ถ์ํ๋ ๊ฒ์ ๊ตฌํํ๋ ๊ตฌํ๋ถ๋ ์ธ์ ๋ ์ง ๊ต์ฒด ๊ฐ๋ฅ
๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ ์์น์ด์ ํต์ฌ ๊ฐ๋
์ ๊ตฌ์กฐ๊ฐ dip์ธ๋ฐ ์ฒ์ ๋ณด๋ฉด ์ดํดํ๊ธฐ ํ๋ค ์ ์์ผ๋ฏ๋ก ์์๋ฅผ ๋ค์ด๋ณด๊ฒ ๋ค.
์๋ ๊ฐ๋จํ๊ฒ ์ดํดํ ์ ์๋, ์๋์ฐจ๊ฐ ์ค๋ ธ์ฐ ํ์ด์ด์ ์์กดํ๋ ๊ตฌ์กฐ์ด๋ค.
์๋ ํ์ด์ด๋ฅผ ๋ค๋ฅธ ์ข ๋ฅ์ ํ์ด์ด๋ก ๊ต์ฒดํ ์ ์๋ ๊ตฌ์กฐ์ด๋ค. ์ ๋ง ๊ฐ๋จํ ๊ตฌ์กฐ์ด์ง๋ง ์ด๊ฒ์ด dip์ด๋ค. ์ด๋ค ๊ฒ์๋ ์์กดํ์ง ์๋ ์ค๋ ธ์ฐ ํ์ด์ด๊ฐ, ํ์ด์ด๋ผ๋ ์ธํฐํ์ด์ค์ ์์กดํ๊ฒ ๋์์ผ๋ฏ๋ก ์์กด ๊ด๊ณ์ ์ญ์ ์ด ์ผ์ด๋ ๊ฒ์ด๋ค. ์ฉ์ด๋ก๋ง ๋ดค์ ๋๋ ์ด๊ฒ ์ ์ญ์ ์ธ๊ฑด์ง ์ดํดํ๊ธฐ ํ๋ค์๋๋ฐ, ์์๊ฐ ์ ๋ง ์ง๊ด์ ์ด๋ผ์ ์ด ์์๊ฐ ๊ผญ ํ์ํ๋ค๊ณ ์๊ฐํ๋ค.
์ฌ๊ธฐ์์ ์ฐ์ด๋ inversion ๊ฐ๋ ์ ioc(inversion of container)์์๋ ์ฐ์ด๊ธฐ ๋๋ฌธ์ ๋ค์ ์ง๊ณ ๋์ด๊ฐ๊ฒ ๋ค. ๊ฐ๋จํ๊ฒ, ioc๋ di(dependency injection)์ ํตํด์ ์์กด์ฑ ์ฃผ์ ์ ๊ฐ๋ฐ์๊ฐ ์๋๋ผ ํ๋ ์์ํฌ๊ฐ ํ๋ ๊ฒ์ ๋งํ๋ค. ๊ฐ๋ฐ์๊ฐ ์๋๋ผ ํ๋ ์์ํฌ๊ฐ ์์กด์ฑ์ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์ ์ด์ ๊ถํ์ ์ญ์ ์ด๋ผ๊ณ ๋งํ๋ ๊ฒ์ด๋ค.