์คํ๋ง ํ๋ ์์ํฌ๋ฅผ ๊ณต๋ถํ๋ฉฐ ํ๋ก์ ํธ๋ฅผ ์ค๊ณํ๋ ๋์ค ํ๋ก์ ํธ ์ค๊ณ ๊ณผ์ ์์ ์์ธ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์๋ค. ๊ธฐ์กด์ ๋ง๋ค์๋ ์น ํ๋ก์ ํธ๋๋ก Controller & Service & Domain & Repository ํจํค์ง๋ฅผ ์์ฑํด์ ๋ง๋ค์์ง๋ง ํ๋ก์ ํธ๋ฅผ ์ค๊ณํ๋ ๋ฐ์ ์์ด์ ๋ถ๋ช ํ ์ค๊ณ ๊ธฐ์ค์ด ์์ ๊ฑฐ๋ผ๋ ์๊ฐ์ด ๋ค์๋ค. ์๋๋ ๋ค๋ฅผ๊น DDD์ด๋ Layered ์ด๋ ์ฌ๋ฌ ๊ฐ์ง ํ๋ก์ ํธ ์ํคํ ์ฒ๊ฐ ์กด์ฌํ๋ ๊ฒ์ ์๊ฒ ๋์๊ณ , ์ด๋ฒ ๊ธฐํ์ ์์ธํ ์ ๋ฆฌํด์ ํ๋ก์ ํธ์ ๊ตฌ์ฒด์ ์ผ๋ก ์ ์ฉ์์ผ๋ณผ ์๊ฐ์ด๋ค.
์ํํธ์จ์ด ์ํคํ ์ฒ(Software Architecture) ๋?
-> ๋ง ๊ทธ๋๋ก ๊ตฌ์กฐ์ด๋ค.
-> ์ฌ๋ฌ ๊ฐ์ง ์ํํธ์จ์ด ๊ตฌ์ฑ ์์๊ฐ ๊ฐ์ง ํน์ฑ ์ค ์ธ๋ถ์ ๋๋ฌ๋๋ ํน์ฑ, ๊ตฌ์ฑ ์์ ๊ฐ์ ๊ด๊ณ๋ฅผ ํํํ๋ ์์คํ ๊ตฌ์กฐ๋ ๊ตฌ์กฐ์ฒด
๋ชจ๋
-> ์ํํธ์จ์ด๋ฅผ ๊ตฌ์ฑํ๊ณ ์๋ ์์ ๊ธฐ๋ฅ ํ๋์ ๋จ์
์ปดํฌ๋ํธ
-> ๋ชจ๋์ ๊ธฐ๋ฅ๋ณ๋ก ๋ฌถ์ด ๋์ ์งํฉ
=> ์ด ์ ์ฒด๋ฅผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์ด์ ๊ธฐ๋ณธ์ ์ธ ์ฉ์ด๋ค์ ์์ ๋ณด์์ผ๋ ๋ณธ๊ฒฉ์ ์ผ๋ก ๋ค๋ฃจ๊ธฐ ์ํ ์ํคํ ์ฒ์ ๊ฐ๋ ์ ์ดํด๋ณด์
Layered Architecture
> ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ(Seperation of concerns)์ ๋ฐ๋ผ ์์คํ ์ ์ ์ฌํ ์ฑ ์(๊ด์ฌ)์ ์ง๋ Layer๋ก ๋ถ๋ฆฌํ๊ณ ๊ฐ๊ฐ์ Layer๊ฐ ํ์ Layer์๋ง ์์กดํ๋๋ก ๊ตฌ์ฑํ๋ ์ํคํ ์ณ ํจํด
๋ชฉ์
> ๊ฐ ๋ ์ด์ด๋ค์ด ํน์ ๊ด์ฌ์ฌ์ ๊ด๋ จ๋ ๊ฐ์ฒด๋ง์ ํฌํจํ๋๋ก ํจ
> ์์คํ ์ ๊ฒฐํฉ๋ ๋ฎ์ถค
> ๊ฐ๋ฐ์์ ์ธ์ง ๊ณผ๋ถํ ๋ฐฉ์ง
> ์ด๋ก ์ธํ ์ฌ์ฌ์ฉ์ฑ & ์ ์ง๋ณด์์ฑ ํฅ์
๊ณ์ธต
- Presentation layer : ์ฌ์ฉ์์ ์์ฒญ ๋ฐ ์๋ต์ ๋ด๋น
- Application layer : ์ ํ๋ฆฌ์ผ์ด์ ์ ํ๋ฆ์ ์ ์ด
- Domain layer : ๋๋ฉ์ธ์ ํต์ฌ ๋ก์ง์ ํฌํจ
- Infrastructure layer : ์์ ๊ณ์ธต์ ์ง์
๋จ์
- ํ๋ก์ ํธ์ ๊ท๋ชจ๊ฐ ํด ์๋ก ํ์ฅ์ฑ์ด ๋จ์ด์ง
- ๋ถ๋ฆฌ๋ ๊ด์ฌ์ฌ ์ธ์ ๋ค๋ฅธ ๊ด์ฌ์ฌ๊ฐ ๋ฐ๊ฒฌ๋ ๊ฒฝ์ฐ ํจํค์ง ๋ถ๋ฆฌ ๋ฐ ์ฝ๋ ๋ฐฐ์น๊ฐ ์ด๋ ค์์ง
- ๋ณต์กํ ๋น์ฆ๋์ค ๋ ผ๋ฆฌ๋ฅผ ํด๊ฒฐํ๊ณ ์ฑ๋ฅ์ ์ด์ ์ ์ป๊ธฐ๊ฐ ์ด๋ ค์
์ ์ฉํ๊ธฐ ์ข์ ์
- ํ๋ก์ ํธ ๋๋ฉ์ธ์ด ๋ณต์กํ ๋ ผ๋ฆฌ๋ฅผ ํฌํจํ์ง ์์ ๊ฒฝ์ฐ
- ํ์ฅ์ฑ๋ณด๋ค๋ ์ผ๊ด์ฑ์ ๊ฐ์ ธ๊ฐ๋ ๊ฒ์ด ๋ชฉํ์ธ ๊ฒฝ์ฐ
- ์๊ท๋ชจ๋ก ๊ตฌ์ฑ๋ ํ์ธ ๊ฒฝ์ฐ
=> ๊ฐ์ธ์ ์ผ๋ก ๊ฐ์ธ ํ๋ก์ ํธ ๋จ๊ณ์์๋ ์ด ์ํคํ ์ฒ๋ฅผ ๊ฐ์ ธ๊ฐ๋ ๊ฒ ์๋ง๊ฒ ๋ค๋ ์๊ฐ์ ํ๋ค.
Domain Driven Development
> ๋๋ฉ์ธ์ ์ค์ฌ์ผ๋ก ์ค๊ณํด ๋๊ฐ๋ ๊ฒ
๋๋ฉ์ธ์ด๋?
> ์ค์ธ๊ณ์์ ์ฌ๊ฑด์ด ๋ฐ์ํ๋ ์งํฉ
> ex ) ์ท ์ผํ๋ชฐ : [์ฃผ๋ฌธํ๋ ๋๋ฉ์ธ, ์ท์ ๊ด๋ฆฌํ๋ ๋๋ฉ์ธ, ๊ฑด๋ฌผ ๊ด๋ฆฌ ๋๋ฉ์ธ ๋ฑ๋ฑ๋ฑ]
์ด๋ฌํ ์ฌ๋ฌ๊ฐ์ง ๋๋ฉ์ธ๋ค์ด ์๋ก ์ํธ์์ฉ ํ๋ฉฐ, ์ค๊ณํ๋ ๊ฒ์ด ๋ฐ๋ก ๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ
ํน์ง
> ์๋ก ๋ค๋ฅธ ๋๋ฉ์ธ ์์ญ์ ์ํฅ์ ๋ผ์น๊ธฐ ์ํด์๋ API๋ก ํธ์ถํด์ผํจ
> ๊ฐ๊ฐ์ ๋๋ฉ์ธ์ ์๋ก ์ฒ ์ ํ ๋ถ๋ฆฌ
> ์ด๋ก ์ธํ ๋์ ์์ง๋ ฅ๊ณผ ๋ฎ์ ๊ฒฐํฉ๋๋ก ๋ณ๊ฒฝ๊ณผ ํ์ฅ์ ์ฉ์ดํ ์ค๊ณ๋ฅผ ์ด๋ฃธ
Domain Layer
> Entity (๊ณ ์ ์๋ณ์ [PK]๋ฅผ ๋ฐํ์ผ๋ก ๊ฐ์ฒด์ ์ ์ฒด์ฑ ๋ถ์ฌ), VO (์ํ [Attribute] ๋ฅผ ๋ฐํ์ผ๋ก ๊ฐ์ฒด์ ์ ์ฒด์ฑ ๋ถ์ฌ) ๋ฅผ ํ์ฉํ์ฌ ๋๋ฉ์ธ ๋ก์ง์ด ์งํ๋๋ ๊ณ์ธต
์ ์ฉํ๊ธฐ ์ข์ ์
- ํ๋ก์ ํธ ๋๋ฉ์ธ์ด ๋ณต์กํ ๋ ผ๋ฆฌ๋ฅผ ํฌํจํ ๊ฒฝ์ฐ
- ํ์ฅ์ฑ์ ๊ฐ์ ธ๊ฐ๋ ๊ฒ์ด ๋ชฉํ์ธ ๊ฒฝ์ฐ
- ๋๊ท๋ชจ๋ก ๊ตฌ์ฑ๋ ํ์ธ ๊ฒฝ์ฐ
๋์ ํ๋ก์ ํธ์๋ ์ด๋ค ์ํคํ ์ณ๋ฅผ ์ ์ฉ ์ํค๋๊ฒ ์ข์๊น?
> ๋๋ฉ์ธ ๋ ์ด์ด, ์ ํ๋ฆฌ์ผ์ด์ ๋ ์ด์ด ์ํคํ ์ณ์ ๊ฐ๋ ์ ๊ณต๋ถํ ๊ฒฐ๊ณผ ๊ฐ์ธ ํ๋ก์ ํธ ๊ฐ์ ์๊ท๋ชจ ํ๋ก์ ํธ๋ application layer ๊ธฐ๋ฐ ์ํคํ ์ณ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ง๋ค๋ ๊ฒฐ๋ก ์ ๋ด๋ ธ๋ค.
> ๋๊ท๋ชจ์ฑ ํ์ฅ์ฑ์ ๋ ํ๋ก์ ํธ๊ฐ ์๋๊ธฐ ๋๋ฌธ์ DDD๋ ๋์ค์ ํ์ฌ์์ ๊ฒฝํ์ ํด๋ณด๊ณ ์ถ๋ค.
์ฐธ๊ณ : https://moo-you.tistory.com/218
์ํํธ์จ์ด ์ํคํ ์ฒ(Software Architecture) ๋?
์ํํธ์จ์ด ์ํคํ ์ฒ(Software Architecture) ๋? ๊ฐ๋ ์ ์๋ฏธ ์ฌ๋ฌ ๊ฐ์ง ์ํํธ์จ์ด ๊ตฌ์ฑ์์์ ๊ทธ ๊ตฌ์ฑ์์๊ฐ ๊ฐ์ง ํน์ฑ ์ค ์ธ๋ถ์ ๋๋ฌ๋๋ ํน์ฑ, ๊ทธ๋ฆฌ๊ณ ๊ตฌ์ฑ ์์ ๊ฐ์ ๊ด๊ณ๋ฅผ ํํํ๋ ์์คํ ๊ตฌ
moo-you.tistory.com
์ฐธ๊ณ : https://huisam.tistory.com/entry/DDD
DDD(Domain Driven Design) - ๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ๋? ๋ง์ดํฌ๋ก์๋น์ค์ ๊ด์ ์์
๊ฐ์ฒด์งํฅ์์๋ถํฐ ๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ๋ฅผ ์ดํดํ๊ธฐ ์ํด์๋ ๊ฐ์ฒด์งํฅ์ ๋จผ์ ์ดํดํ ํ์๊ฐ ์์ต๋๋ค ๊ฐ์ฒด์งํฅ์์์ ํต์ฌ์ ๋ญ๊น์? ๊ฐ์ฒด์งํฅ์์์ ํต์ฌ์ ์ค์ธ๊ณ์ ๊ฐ์ฒด(๋ฌผ๊ฑด, ์ฌ๋, ์ฃผ๋ฌธ ....
huisam.tistory.com
์ฐธ๊ณ : https://happycloud-lee.tistory.com/94
DDD ํต์ฌ๋ง ๋น ๋ฅด๊ฒ ์ดํดํ๊ธฐ
์ฐธ๊ณ : https://steemit.com/kr/@frontalnh/domain-driven-design ์ ๊ธ์ Eric Evans์ '๋๋ฉ์ธ๊ธฐ๋ฐ๋์์ธ'์ ๋ฒ์ญํ ๊ธ์ธ๋ฏ ํ๋ฐ ์ง์ญํ๋ค ๋ณด๋ ์๋ฏธ๊ฐ ์ ์ ๋ฌ ์๋๋ ๋ถ๋ถ์ด ์์ด ์ ๋๋ฆ๋๋ก ์ฌํด์ํ์์ต๋๋ค..
happycloud-lee.tistory.com