์ํคํ ์ฒ ๊ฐ์
๋ค ๊ฐ์ ์์ญ
-
ํํ
-
์์ฉ
-
๋๋ฉ์ธ
-
Infrastructure
-
์์ฉ ์์ญ์ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํด ๋๋ฉ์ธ ์์ญ์ ๋๋ฉ์ธ ๋ชจ๋ธ์ ์ฌ์ฉํ๋ค.
-
์์ฉ ์๋น์ค๋ ๋ก์ง์ ์ง์ ์ํํ๊ธฐ๋ณด๋ค๋
๋๋ฉ์ธ ๋ชจ๋ธ์ ๋ก์ง ์ํ์ ์์
ํ๋ค. -
๋๋ฉ์ธ ์์ญ์ ๋๋ฉ์ธ ๋ชจ๋ธ์ ๊ตฌํํ๋ค.
- ๋ฐฐ์ก์ง ๋ณ๊ฒฝ, ๊ฒฐ์ ์๋ฃ, ์ฃผ๋ฌธ ์ด์ก ๊ณ์ฐ๋ฑ ๊ณผ ๊ฐ์ ํต์ฌ ๋ก์ง์ ๋๋ฉ์ธ ๋ชจ๋ธ์์ ๊ตฌํํ๋ค.
-
Infrastructure
- ๊ตฌํ ๊ธฐ์ ์ ๋ํ ๊ฒ์ ๋ค๋ฃฌ๋ค.
- RDBMS, Message Queue, SMTP (ex: mysql, kafka)
Layer Architecture
- ๋๋ฉ์ธ์ ๋ณต์ก๋์ ๋ฐ๋ผ ์์ฉ๊ณผ ๋๋ฉ์ธ์ ๋ถ๋ฆฌํ๊ธฐ๋ ํ๊ณ ํ ๊ณ์ธต์ผ๋ก ํฉ์น๊ธฐ๋ ํ๋ค.
- ์์ ๊ณ์ธต์์ ํ์ ๊ณ์ธต์ผ๋ก ์์กด๋ง ์กด์ฌํ๊ณ ํ์ ๊ณ์ธต์ ์์ ๊ณ์ธต์ ์์กดํ์ง ์๋๋ค.
- ์์ฉ๊ณ์ธต์ด ๋๋ฉ์ธ ๋ฟ๋ง ์๋๋ผ
Infrastructure์ ์์กด
ํ๊ธฐ๋ ํ๋ค.- Infrastructure์ ์์กดํ๋ฉด ํ ์คํธํ๊ธฐ ์ด๋ ต๋ค.
- ๊ธฐ๋ฅ ํ์ฅ์ด ์ด๋ ต๋ค.
- ํด๊ฒฐ ๋ฐฉ๋ฒ์ DIP๋ฅผ ์ ์ฉํ๋ ๊ฒ์ด๋ค.
DIP(Dependency Injection Principle)
- Low Abstract Module์ด High Abstract Module์ ์์กดํ๋๋ก ๋ฐ๊พผ๋ค.
- ์ถ์ํํ interface์ ์๋ค.
- High Abstract Module์ด ์ ํ ๊ท์น์ ๋ฐ๋ผ Low Abstract Module์ด ๊ตฌํํ๋ ๊ฒ.
- ์ธํฐํ์ด์ค๋ High Abstract Module ๊ด์ ์์ ๋์ถํด์ผ ํ๋ค.
์๋ชป๋ DIP Example
์ด๋ ํ ์ ์ด ์๋ชป๋์์๊น?
- CaculateDiscountService๊ฐ ์ ์์ค์ผ๋ก ์ ์๋ RuleEngine์ ์์กด์ ์ด๋ค.
- DIP์ ํต์ฌ์ ๊ณ ์์ค ๋ชจ๋์ด ์ ์์ค ๋ชจ๋์ ์์กดํ์ง ์๋๋ก ํ๊ธฐ ์ํจ
- ์ด ๊ตฌ์กฐ๋ ๋๋ฉ์ธ ์์ญ์ ๊ตฌํ ๊ธฐ์ ์ ๋ค๋ฃจ๋ ์ธํ๋ผ์คํธ๋ญ์ฒ ์์ญ์ ์์กดํ๊ณ ์๋ค.
- ์ฆ ๊ณ ์์ค ๋ชจ๋์ด ์ ์์ค ๋ชจ๋์ ์์กดํ๊ณ ์๋ค.
๋ค์ ์ ์ํ DIP Example
- CaculateDiscountService๋ ๋๋ฉ์ธ ๊ด์ ์ผ๋ก ์ฌ์ ์๋ RuleEngine์ ์์กดํ๋ค.
๋๋ฉ์ธ ์์ญ์ ์ฃผ์ ๊ตฌ์ฑ์์
- Entity
- ๊ณ ์ ์ ์๋ณ์๋ฅผ ๊ฐ๋ ๊ฐ์ฒด๋ก ์์ ์ ๋ผ์ดํ ์ฌ์ดํด์ ๊ฐ๋๋ค.
- Value
- ๊ณ ์ ์ ์๋ณ์๋ฅผ ๊ฐ๊ธฐ ์๋ ๊ฐ์ฒด๋ก ์ฃผ๋ก ๊ฐ๋ ์ ์ผ๋ก ํ๋์ธ ๋๋ฉ์ธ ๊ฐ์ฒด์ ์์ฑ์ ํํํ ๋ ์ฌ์ฉํ๋ค.
- Aggregate
- Entity์ Value๋ฅผ ๊ฐ๋ ์ ์ผ๋ก ํ๋๋ก ๋ฌถ์ ๊ฒ์ด๋ค.
- Repository
- ๋๋ฉ์ธ ๋ชจ๋ธ์ ์์์ฑ์ ์ฒ๋ฆฌํ๋ค.
- Domain Service
- ํน์ ์ํฐํฐ์ ์ํ์ง ์๋ ๋๋ฉ์ธ ๋ก์ง์ ์ ๊ณตํ๋ค.
Entity์ Value
- ๋๋ฉ์ธ ๋ชจ๋ธ์ Entity๋ ๋จ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ด๊ณ ์๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ผ๊ธฐ๋ณด๋ค๋ ๋ฐ์ดํฐ์ ํจ๊ป ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๊ฐ์ฒด์ด๋ค.
- Value๋
immutable๋ก ๊ตฌํํ๋ ๊ฒ์ผ๋ก ๊ถ์ฅ
ํ๋ค.
Aggregate
- ๋๋ฉ์ธ์ด ์ปค์ง์๋ก Entity์ Value๊ฐ ๋ง์์ง๊ณ ๊ด๋ฆฌํ๊ธฐ ํ๋ค๋ค.
- ๊ด๋ จ ๊ฐ์ฒด๋ฅผ ํ๋๋ก ๋ฌถ์ ๊ฐ์ฒด์ด๋ค.
- ์ฃผ๋ฌธ : ์ฃผ๋ฌธ์, ๋ฐฐ์ก์ง ์ ๋ณด, ์ฃผ๋ฌธ ๋ชฉ๋ก, ์ด ๊ฒฐ์ ๊ธ์ก
- ๋ด๋ถ ๊ตฌํ์ ์จ๊ฒจ์ Aggregate ๋จ์๋ก ๊ตฌํ์ ์บก์ํํ ์ ์๋๋ก ๋๋๋ค.
Repository
- Aggregate ๋จ์๋ก ๋๋ฉ์ธ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๊ณ ์กฐํํ๋ ๊ธฐ๋ฅ์ ์ ์ํ๋ค.
- ์ ์ฅํ๋ ๋ฉ์๋
- ๋ฃจํธ ์๋ณ์๋ก Aggregate๋ฅผ ์กฐํํ๋ Method
์์ฒญ ์ฒ๋ฆฌ ํ๋ฆ
- @Transaction
- ๊ธฐ๋ฅ ๊ตฌํ์ ํ์ํ ๋๋ฉ์ธ ๊ฐ์ฒด๋ฅผ Repository์์ ๊ฐ์ ธ์ ์คํํ๊ฑฐ๋ ์ ๊ท ๋๋ฉ์ธ ๊ฐ์ฒด๋ฅผ ์์ฑํด์ Repository์ ์ ์ฅํ๋ค.
Infrasturcture
- ๋ฌด์กฐ๊ฑด Infrasturcture์์กด์ ์์ ๋ ๊ฒ์ ์ข์ ๊ฒ์ด ์๋๋ค.
- @Transaction์ ์ฌ์ฉํ๋ ๊ฒ์ ํธ๋ฆฌํ๋ค.
- DIP์ ์ฅ์ ์ ํด์น์ง ์๋ ๋ฒ์์์ ์์ฉ ์์ญ๊ณผ ๋๋ฉ์ธ ์์ญ์์ ๊ตฌํ ๊ธฐ์ ์ ๋ํ ์์กด์ ๊ฐ์ ธ๊ฐ๋ ๊ฒ์ด ํ๋ช ํ๋ค.
- ์์กด์ ์์ ํ ๊ฐ์ง ์๋๋ก ์๋ํ๋ ๊ฒ์ ๊ตฌํ์ ๋ ๋ณต์กํ๊ณ ์ด๋ ต๊ฒ ๋ง๋ค ์ ์๋ค.
๋ชจ๋ ๊ตฌ์ฑ
- ํ ํจํค์ง์ ๊ฐ๋ฅํ๋ฉด 10๊ฐ ๋ฏธ๋ง์ผ๋ก ํ์ ๊ฐ์๋ฅผ ์ ์งํ๋ ค๊ณ ๋ ธ๋ ฅํ๋ค.
- ์ด ๊ฐ์๊ฐ ๋์ด๊ฐ๋ฉด ๋ชจ๋์ ๋ถ๋ฆฌํ๋ ์๋๋ฅผ ํด๋ณธ๋ค.