base
Last updated
Last updated
(์๊ฐ ๊ฐ์ - ํจ์คํธ์บ ํผ์ค, The RED : ๋น์ฆ๋์ค ์ฑ๊ณต์ ์ํ Java/Spring ๊ธฐ๋ฐ ์๋น์ค ๊ฐ๋ฐ๊ณผ MSA ๊ตฌ์ถ by ์ดํฌ์ฐฝ)
์คํ๋ง ๋ถํธ๋ฅผ ์ค๋ฌด๋ก ์งํํ๊ณ ๋ ๊ณต๋ถํด๋๊ฐ๋ฉด์ ๊ถ๊ธํ ๊ฒ์ด ์ ๋ง ๋ง์๋ค. ๊ทธ ์ค์์๋ ์คํ๋ง ๋ถํธ ์ฝ๋์ ์ ๋ฐ์ ์ธ ๊ตฌ์กฐ๋ฅผ ๋ด๋นํ๋ DDD์ ๋ํด ๋จผ์ ๊ธฐ๋กํ๋ ค ํ๋ค.
๋จผ์ ๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ, DDD๋ ์๋ ๊ทธ๋ฆผ์ผ๋ก ๊ฐ๋ตํ๊ฒ ์๊ฐํ ์ ์๋ค.
๊ตฌ๊ธ์๋ DDD์ ๋ํด ๋ณต์กํ๊ฒ ์ค๋ช ํ ๋ค์ด์ด๊ทธ๋จ์ด ๋ง์๋ฐ ์ ๋ค์ด์ด๊ทธ๋จ์ ์ ๋ง ๊น๋ํ๋ค... DDD๋ interfaces, application, domain, infrastructure ์ด๋ ๊ฒ ํฌ๊ฒ 4๊ฐ์ง ๊ณ์ธต์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
interface๋ controller, dto๊ฐ ์กด์ฌํ ์ ์๊ณ infrastructure์๋ db๋ ๋ฒจ์ ๊ตฌํ์ฒด๊ฐ ์กด์ฌํ๋ค. db๋ ๋ฒจ์ ๊ตฌํ์ฒด๋ผ ํจ์ ๋ํ์ ์ผ๋ก spring data jpa๊ฐ ์๊ฒ ๋ค. interface๋ฅผ ์ ์ธํ๋ฉด jpa์์ ์์์ ๊ตฌํ์ฒด๋ฅผ ๋ง๋ค์ด์ฃผ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด application๊ณผ domain์ ์ด๋ป๊ฒ ์ดํดํด์ผ ํ ๊น? ์ฌ์ค ๊ทธ๋ฅ ๊ทธ๋ฐ๊ฒ ์๊ตฌ๋ ํ๊ณ ๋์ด๊ฐ๋ ๋๋๋ฐ ๊ทธ๋ ์ง ๋ชปํ๋ ์ด์ ๊ฐ ๋ด๊ฐ ์ด์ ์ ์๊ณ ์๋ ์คํ๋ง ์น ๊ณ์ธต ๋๋ฌธ์ด๋ค. ์คํ๋ง ์น ๊ณ์ธต๊ณผ DDD๋ ์ด๋ป๊ฒ ๋น๊ตํ ์ง ๋ถ์์ด ํ์ํ๋ค.
๋จผ์ ์คํ๋ง ์น ๊ณ์ธต์ web layer์ repository layer๋ DDD 4๊ณ์ธต์ interface์ infrastructure์ ์์ํ๋ค. ๋ค์์ผ๋ก, dto๋ DDD์ interface, ์น ๊ณ์ธต์ web layer์ ์กด์ฌํ์ง๋ง, dto๋ฅผ ๋ค๋ฅธ ๊ณ์ธต์๋ ์ ๋ฌํ๋ฏ๋ก ์น ๊ณ์ธต์ ์ฐ์ธก ์๋จ์ ์์นํ ๊ฒ์ด ์ดํด๋๋ค. ๋จ์ ์คํ๋ง ์น ๊ณ์ธต์ service layer, domain model๋ ์ด๋ป๊ฒ ๋งค์นญ ์์ผ์ผ DDD์ application, domain layer์ ๋งค์นญ๋ ์ ์์๊น?
๋์ ๊ฒฐ๋ก ์ ์น ๊ณ์ธต์ service layer์ domain model, DDD์ application๊ณผ domain layer๊ฐ ๊ณตํต์ผ๋ก ๊ฐ์ ธ๊ฐ๋ ํต์ฌ ๊ฐ๋ ์ด '์ถ์ํ'๋ผ๊ณ ์ดํดํ๋ ๊ฒ์ด๋ค.
์ถ์ํ๋ผ ํจ์ ์ถ์ํ๋ฅผ ์์ผ์ domain์ ์์กดํ๋ ๊ฒ๋ค์ ์ฝ๋๋ฅผ ๋ฐ๊ฟ๋ domain์ ๋ก์ง์ ์ ์ง๋ ์ ์๊ฒ ํ๋ ๊ฒ์ด๋ค. ์์๋ก ํธ๋ํฝ์ด ๋ง์์ ธ db๋ฅผ mariadb์์ mongodb๋ก ๋ฐ๊ฟ์ผ ํ ์ํฉ์ด ์์ ์๋ ์๋๋ฐ ๊ทธ ์ํฉ์์ spring data jpa์์ spring data mongodb๋ก ์์กด์ฑ๋ง ๊ต์ฒดํด์ฃผ๋ฉด ๋๋ ๊ฒ์ด ์์ ์ ์๋ค. ์ด๋ ๊ฒ ๋ก์ง์ ์ถ์ํ๊ฐ ๋๋ค๋ฉด db๋ฅผ ๋ฐ๊พธ๊ธฐ ์ํด์ ๋๋ฉ์ธ์ ๋ก์ง์ ๋ฐ๊พธ์ง ์์๋ ๋๋ ๊ฒ์ด๋ค. ๊ทธ์ ๋ฐ๋ผ ํ์ฅ์ฑ๊ณผ ์ ์ง๋ณด์๊ฐ ์ฌ์์ง๋ ๊ฒ์ ๋ค์ด๊ณ ๋ง์ด๋ค.
์ด๊ฒ์ด ๊ฐ๋ฅํ๋ ค๋ฉด ์ฝ๋๋ฅผ ์งค ๋ ์ถ์ํ๋ฅผ ๊ณ์ ์ผ๋ํด๋๊ณ ์์ด์ผ ํ๋ฏ๋ก ์ฝ๋๋ฅผ ์ ์ง๋ ์ฐ์ต์ด ์ง์์ ์ผ๋ก ํ์ํ๊ฒ ๋ค... ์ฝ๋๋ฅผ ์ง๋ฉด์ service๋ถ๋ถ์ if๋ก์ง์ ๋ฌด์์ ๋ฃ๋ ๊ฒ์ด ์๋๋ผ if๋ก์ง์ ๋๋ฉ์ธ์ผ๋ก ์ฎ๊ธฐ๋ฉด ์ถ์ํ๊ฐ ๋ ์ ์ด๋ฃจ์ด์ง์ง ์์๊นํ๋ ๋ฌผ์๊ฐ์ ๊ฒ ๋ง์ด๋ค.
์คํ๋ง ์น ๊ณ์ธต๊ณผ DDD๋ฅผ ํตํฉํด ์ ๋ฆฌํ ํต์ฌ ๊ฐ๋ ์ **'domain๋ก์ง์ ์ถ์ํ'**์ด๋ค.