DDD
๊ธฐ์กด์ ๊ฐ๋ฐ์ MVC ํํ์ ๋ ์ด์ด ์ํคํ ์ฒ๋ก ์งํํ์์ต๋๋ค.
controller -> service -> repository๋ก ์ด๋ฃจ์ด์ ธ์๊ณ , ์์กด์ ํ์ดํ ๋ฐฉํฅ์ผ๋ก ์ด๋ฃจ์ด์ง๋๋ค.
๊ทธ๋ฌ๋ ์ค, ํ ์คํฐ๋ ๋ด์์ DDD
์ ๋ํด์ ์ด์ผ๊ธฐ๊ฐ ๋์์ต๋๋ค.
DDD๋?
DDD๋ Domain Driven Design
์ผ๋ก, ๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ๋ฅผ ๋งํฉ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ๊ฐ ๋ฌด์จ๋ป์ผ๊น์?
Domain
๋๋ฉ์ธ์ด๋ ๊ธฐ๋ฅ์ ์ธ ๋ฌธ์ ์์ญ์ ์ ์ํ ๋ถ์ผ๋ผ๊ณ ํ ์ ์์ต๋๋ค.
Domain Driven Design
์์ ๋๋ฉ์ธ๊ณผ ๋๋ฉ์ธ์ ์ฌ์ฉํ๋ ๋น์ฆ๋์ค ๋ก์ง์ ์ค์ฌ์ผ๋ก ์ค๊ณํ๋ ๊ฒ์ ๋งํฉ๋๋ค.
๋๋ฉ์ธ์ ๋ชจ๋ธ๊ณผ ๋ก์ง์ ์ง์ค
์ ๋น์ฟผํฐ์ค ์ธ์ด ์ฌ์ฉ
๊ฐ๋ฐํ ๋ง์ด ์๋, ๊ธฐํ ๊ฐ๋ฐ ๋ชจ๋ ๋ณดํธ์ ์ธ ์ธ์ด ์ฌ์ฉ
์ํํธ์จ์ด Entity์ ๋๋ฉ์ธ ๊ฐ ๊ฐ๋ ์ผ์น
๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ๋ ๋๋ฉ์ธ ์ ๋ฌธ๊ฐ์ ๊ฐ๋ฐ์๊ฐ ํ์ ์ด๋ฃจ๊ณ ์ง์์ ํ๊ตฌํ์ฌ ํจ๊ป ๋๋ฉ์ธ ๋ชจ๋ธ์ ์ฐฝ์กฐํฉ๋๋ค. ์ด ๋ ๋ง๋ค์ด์ง๋ ๋๋ฉ์ธ ๋ชจ๋ธ์ ์ค์ ๋ก ์ฝ๋์ ์ผ์นํด์ผ ํฉ๋๋ค. ๋๋ถ์ด ๋ชจ๋ ์ปค๋ฎค๋์ผ์ด์ ์ ํจ๊ป ์ ์๋ ์ ๋น์ฟผํฐ์ค ์ธ์ด๋ฅผ ํ์ฉํด์ผ ํฉ๋๋ค.
DDD์์๋ ์ ๋ต์ ์ค๊ณ๊ฐ ์ค์ํ๋ค๊ณ ํฉ๋๋ค. ์ ์ ์ ์ธ ํจํด์ ๋ํด ํจ๋ชฐ๋์ง ์๋๋ก ์ฃผ์ํด์ผ ํฉ๋๋ค.
๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ์ ๋ชฉ์ ์ ์ํํธ์จ์ด๊ฐ ํด๊ฒฐํด์ผ ํ๋ ๋ฌธ์ ์์ญ์ ๋ณต์ก์ฑ์ ๋ฎ์ถ๊ธฐ ์ํจ์ ๋๋ค.
์ ๋ต์ ์ค๊ณ
๋น์ฆ๋์ค ๋๋ฉ์ธ์์ ๋ฌธ์ ๋๋ฉ์ธ์ ์ถ์ถํฉ๋๋ค. ๋ฌธ์ ๋๋ฉ์ธ์ ๋ฌธ์ ๊ณต๊ฐ์ผ๋ก ํ๊ณ , ํด๊ฒฐ ๊ณต๊ฐ์ผ๋ก ๋ฐ๊พธ๋ ๊ฒ๊น์ง๊ฐ DDD์ ์ ๋ต์ ์ค๊ณ์ ํฐ ํ๋ฆ์ ๋๋ค.
๋น์ฆ๋์ค ๋๋ฉ์ธ์ ํ์ค ์ธ๊ณ์์ ๊ธฐ์ ์ ํ๋ ์์ญ์ ๋งํฉ๋๋ค. ํ์ฌ์ ๋น์ฆ๋์ค ์์ญ์์ ์ํํธ์จ์ด๋ฅผ ํตํด ํด๊ฒฐํ๊ณ ์ ํ ๋, ๋ฌธ์ ์์ญ์ด๋ผ๊ณ ํฉ๋๋ค. ๋ฌผ๋ก , ๋น์ฆ๋์ค ๋๋ฉ์ธ = ๋ฌธ์ ๋๋ฉ์ธ ์ผ ์๋ ์์ต๋๋ค.
๋ฌธ์ ๊ณต๊ฐ์ ์ธ์ํ๋ ๊ฒ์ผ๋ก ๋๋์ง ์๊ณ , ๋ฌธ์ ๋๋ฉ์ธ์ ์์ ํ์ ๋๋ฉ์ธ์ผ๋ก ๋๋์ด์ผ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ๋น์ฆ๋์ค ๋๋ฉ์ธ์์ ์ธํฐ๋ท ์๋งค๋ผ๋ ๋ฌธ์ ๋๋ฉ์ธ์ ์ถ์ถํ๋ค๊ณ ๊ฐ์ ํด๋ณด๊ฒ ์ต๋๋ค. ์ด ๋ ์ด๋ฅผ ์์ ํ์ ๋๋ฉ์ธ๋ค๋ก ๋๋๋ ๊ฒ์ ๋ฌธ์ ๊ณต๊ฐ์ ์๋ณํ๋ค๊ณ ํ ์ ์์ต๋๋ค.
์ด ๋ ๋๋ฉ์ธ ์ง์์ ๊ธฐ๋ฐ์ผ๋ก ์ ๋น์ฟผํฐ์ค ์ธ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ํตํ๊ณ ํ์ ๋๋ฉ์ธ์ ๋ง๋ญ๋๋ค. ์ง์์ ์ธ ์์ฌ์ํต์ ํตํด ํด๋น ๋๋ฉ์ธ์ ๋ณธ์ง๊ณผ ํด๊ฒฐํด์ผ ํ ๋ฌธ์ ๋ฅผ ์ ์ดํดํ ์ ์๊ฒ ๋ฉ๋๋ค.
ํ์ ํ์ ๋๋ฉ์ธ์ ์ผ๋ฐ์ ์ผ๋ก ๋๋ถ๋ถ์ ์ํํธ์จ์ด๊ฐ ๊ฐ์ง๋ฏ๋ก ์ผ๋ฐ ํ์ ๋๋ฉ์ธ์ด ๋ฉ๋๋ค. ๊ฐ์ฅ ์ค์ํ ์๋งค๋ ํต์ฌ ํ์ ๋๋ฉ์ธ์ด ๋ฉ๋๋ค. ํต์ฌ๊ณผ ์ผ๋ฐ์ ์ ์ธํ ๋๋ฉด, ์ํ์ ์ง์ ํ ์ธ ๋๋ฉ์ธ์ด ๋ฉ๋๋ค. ์ฌ๊ธฐ๊น์ง๊ฐ DDD์ ์ ๋ต์ ์ค๊ณ์์ ๋ฌธ์ ๊ณต๊ฐ์ ํ๋ณดํ๋ ๊ฒ์ ๋๋ค.
DDD๋ฅผ ๊ตฌํํ๊ธฐ ์ํ ์ ์์ฌํญ
Bounded Context
๋ฒ์๋ฅผ ๊ตฌ๋ถํด๋์ ํ์ ๋๋ฉ์ธ ๊ฐ๋ .
์ฝํ ์ธ ์ ์/๋ฉํ์ ๋ณด ๊ด๋ฆฌ/ํ๋งค๊ฐ ํ๋์ ๋ฐ์ด๋๋ฆฌ๋ก ๋ฌถ์ด๊ณ ์ด๋ MSA ์ ํ๋์ ์๋น์ค๊ฐ ๋ฉ๋๋ค. ์ด๋ ๊ฒ ๋ถ๋ฅ๋ Context๋ ์๋ก์ ๋๋ฉ์ธ์ ์ฒ ์ ํ ๋ถ๋ฆฌํ๊ณ API๋ฅผ ํตํ CRUD๋ฅผ ์ํํ๊ฒ ๋ฉ๋๋ค. ์ด ๋ Bounded Context๊ฐ ๋ค๋ฅด๋ฉด, ์ ๋น์ฟผํฐ์ค ์ธ์ด๋ ๋ฌ๋ผ์ ธ์ผ ํฉ๋๋ค.
์์ฒ๋ผ ๊ฐ์ ์ธ์ด์ด์ง๋ง, Bounded Context์ ๋ฐ๋ผ ์๋ฏธ๊ฐ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค.
Context Map
Bounded Context ๊ฐ์ ๊ด๊ณ.
Context Map.์ ํตํด up/down ์คํธ๋ฆผ์ ํ ๋์ ๋ณผ ์ ์๊ณ , ์ ์ฒด์ ์ธ ํ๋ฆ์ ์์ํ ์ ์๊ฒ ๋ฉ๋๋ค.
Aggregate
๋ฐ์ดํฐ ๋ณ๊ฒฝ ๋จ์. ๋ผ์ดํ ์ฌ์ดํด์ด ๊ฐ์ ๋๋ฉ์ธ์ ๋ชจ์๋์ ์งํฉ.
Aggregate๋ Root Entity๋ฅผ ํตํด์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๋๋ก ํ๊ณ ํด๋น ์ ๊ทผ์ผ๋ก ์ธํ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ ๋ด๋ถ์ ๋ชจ๋ ๊ฐ์ฒด์ ์ํฅ์ ๋ฏธ์น๊ฒ ๋ฉ๋๋ค.
์ด๋ ๊ฒ Aggregate๋ฅผ ๊ตฌ์ฑํ๊ฒ ๋๋ฉด, Video Product ๋ด๋ถ ๊ฐ๋ณ ๊ฐ์ฒด์ ์ํธ์์ฉ๋ณด๋ค๋ ์ธ๋ถ์ ๋ค๋ฅธ Aggregate๋ ๊ฐ์ฒด๋ค ์ฌ์ด์ ๊ด๊ณ๋ฅผ ์กฐ๊ธ ๋ ๋์ ์์ผ๋ก ๋ฐ๋ผ๋ณผ ์ ์์ผ๋ฉฐ, ์ ์ฝ์ฌํญ๋ค์ ํ๋์ ๋งฅ๋ฝ์ผ๋ก ๊ด๋ฆฌํ ์ ์๊ฒ ๋ฉ๋๋ค.
DDD์ ๋ํ ๊ถ๊ธ์ฆ
JPA Entity์ Domain Entity๋ฅผ ๋ถ๋ฆฌ์์ผ์ผ ํ๋์?
์์น๋๋ก๋ผ๋ฉด, JPA Entity์ Domain Entity๋ฅผ ๋ถ๋ฆฌํด์ผ ํฉ๋๋ค.
JPA Entity๋ DB ๊ณ์ธต์ ์ด๋ํฐ์ ๋๋ค. ์ด ๋, JPA Entity์ Domain Entity๋ฅผ ์ ์ฌํ๋ค๊ณ ๋๊ปด Domain Entity๋ฅผ ์ญ์ ํ๊ณ JPA Entity๋ฅผ ๋๋ฉ์ธ ๊ณ์ธต์ผ๋ก ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
๊ทธ๋ฐ๋ฐ ํ๋๋ก ์ฌ์ฉํ๊ฒ ๋๋ฉด ํด๋์ค, ํจํค์ง ๊ตฌ์กฐ๋ ๋จ์ํ๋์ง๋ง, ์์์ฑ ๊ณ์ธต๊ณผ ๋๋ฉ์ธ ๊ณ์ธต์ด ๊ฐํ๊ฒ ๊ฒฐํฉ๋ฉ๋๋ค. ๋ํ Domain Entity๋ฅผ ๋ค๋ฃฐ ๋ ์ ๋ฌด ๊ท์น๋ฟ๋ง ์๋๋ผ ์ฐ๊ด๊ด๊ณ ๋งคํ, ์ง์ฐ ๋ก๋ฉ ๋ฑ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
JPA Repository?
JPA Repository๋ ์ถ๋ ฅ ํฌํธ๊ฐ ์๋๋ผ ์ด๋ํฐ์ ๋๋ค.
์ถ๋ ฅ ํฌํธ๋ Use Case๊ฐ ํ์๋ก ํ๋ ํํ๋๋ก ์ ์ง๋์ด์ผ ํฉ๋๋ค. Use Case๊ฐ DB์ ์ธ๋ถ ์ฌํญ์ ๋ณ๊ฒฝ์ ์ํด ๋ฐ๋์ด์ผ ํ๋ค๋ฉด ํด๋ฆฐ ์ํคํ ์ฒ๊ฐ ์๋๋๋ค. ์ ์ด๋ ์ถ๋ ฅ ํฌํธ์ ๋ก์ง์ด ํ ๋ฒ์ ํธ์ถ๋ก ํด๊ฒฐ๋์ง ์๊ฒ ๋๋ฉด ๋ถ๋ฆฌํด์ผ ํฉ๋๋๋ค.
Use Case๋ฅผ ๊ผญ ์ธํฐํ์ด์ค๋ก ๋ฝ์์ผํ ๊น?
Use Case๋ ์ธํฐํ์ด์ค๋ก ๋ฝ์์ผ ํฉ๋๋๋ค. Controller๊ฐ Service์ ๊ตฌํ์ ๋ํด ๋๋ฌด ๋ง์ด ์์ง ๋ชปํ๋๋ก ๋ง๊ธฐ ์ํด ์กด์ฌํฉ๋๋ค. ์คํ์ ๋ฐ๋ก ๋ถ๋ฆฌํ๋ค๋ ์ธก๋ฉด์์๋ ์ธํฐํ์ด์ค๋ก ๋ฐ๋ก ๋ถ๋ฆฌํ๋๊ฒ ์ข์ต๋.
์ด๋ป๊ฒ ์จ์ผ DDD์ผ๊น?
DDD์ ๋ํด ์ฐพ๊ฒ๋ ์ด์ ๋ ์ ํ๋ก์ ํธ์์ DDD๋ฅผ ์ ์ฉ์ํค๊ณ ์ ์ฐพ์๋ณด๊ธฐ ์์ํ์ต๋๋ค. ํ์ง๋ง ์ฐพ์๋ณผ์๋ก '์ด๋ ๊ฒ ํด์ผ DDD๋ค!' ๋ผ๋ ๋ฐฉ์์ ๊ฒฐ๋ก ์ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. DDD๋ ์ํคํ ์ฒ๊ฐ ์๋๋ผ, ํ๋์ ๋ฐ๋ผ๋ณด๋์์ (?)์ด๋ผ๊ณ ๋๊ปด์ก์ต๋๋ค.
์ํคํ ์ฒ๋ ์ด๋ฌํ ๋ฐฉ๋ฒ์ ์ ์ฉ์ํฌ ์๋จ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ค์ ๋ก ๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ์์ ๊ธฐ์ ์ ์ธ ๊ฒ์ ๋๋ฌด ์น์ค๋์ง ๋ง๋ผ๊ณ ์ด์ผ๊ธฐํฉ๋๋ค.
์ฐธ๊ณ
Last updated