๋ฐ์ํ

ํต์ฌ๊ณ ๋ ์ํคํ ์ฒ์ ํต์ฌ ๊ฐ๋

- ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ๋ ์ ํต ๋ฐฉ์์ธ ๊ณ์ธตํ ์ํคํ ์ฒ์ ๋จ์ ์ ๋ณด์ํ๊ธฐ์ํด ์ค๊ณ๋์๋ค.
- ์ด๋ํฐ์ ํฌํธ๋ฅผ ์ค์ฌ์ผ๋ก ๊ตฌ์ฑ๋์ด ํฌํธ์ ์ด๋ํฐ ์ํคํ ์ฒ๋ก ๋ถ๋ฆฌ๊ธฐ๋ ํ๋ค.
- ๋น์ฆ๋์ค ๋ก์ง์ ์ธ๋ถ๋ก๋ถํฐ ๊ฒฉ๋ฆฌ์์ผ ์ธ๋ถ ์์คํ
๊ณผ ์์กด์ฑ์ ์ต์ํํ๋ค.
- ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ์ค์์ ๋๋ฉ์ธ ์์ญ์ ์์นํ๋ฉฐ, ์ ์ถ๋ ฅ์ ์ฒ๋ฆฌํ๋ ํฌํธ์ ์ด๋ํฐ๋ฅผ ํตํด ์ธ๋ถ์ ์ํตํ๋ค.
- ๋๋ฉ์ธ ๋ก์ง๊ณผ ์ธํ๋ผ ์คํธ๋ญ์ฒ ๊ณ์ธต์ ๋ช ํํ ๋ถ๋ฆฌํจ์ผ๋ก์จ ๋ณ๊ฒฝ ์ฌํญ์ด ๋๋ฉ์ธ ๋ก์ง์ ๋ฏธ์น๋ ์ํฅ์ ์ค์ผ ์ ์๋ค.
- ํด๋น ๊ตฌ์กฐ๋ ์ ์ง๋ณด์๋ฅผ ์ฉ์ดํ๊ฒํ์ฌ ์์คํ ์ ๋ค์ํ ๋ถ๋ถ์ ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ๋ฐํ๊ณ ํ ์คํธํ ์ ์๋ ํ๊ฒฝ์ ์ ๊ณตํ๋ค.
- ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ๋ ๋๋ฉ์ธ ์ค์ฌ ์ค๊ณ์ ๋ฐ์ ํ๊ฒ ์ฐ๊ด๋์ด์์ด ๋น์ฆ๋์ค ๋ก์ง์ ์ค์ฌ์ฑ์ ๊ฐ์กฐํ๋ค.
๊ณ์ธตํ ์ํคํ ์ฒ์ ๋ฌธ์ ์

- ๋ฐ์ดํฐ๋ฒ ์ด์ค, ์์์ฑ์ ๋ํ ์์กด์ฑ
- ๋๋ฉ์ธ ๊ณ์ธต์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์กดํ๊ฒ ๋์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ณํ๊ฐ ์ผ์ด๋๋ฉด ๋๋ฉ์ธ ๊ณ์ธต์๋ ๋ณํ๊ฐ ์๊ธด๋ค.
์๋น์ค ๊ณ์ธต์์๋ ์์์ฑ ๋ชจ๋ธ์ ๋๋ฉ์ธ ๋ชจ๋ธ์ฒ๋ผ ์ฌ์ฉํ๊ฒ ๋๋ค. - ์ฆ์๋ก๋ฉ, ์ง์ฐ๋ก๋ฉ, ํธ๋์ญ์ ๋ฑ์ ๊ณ ๋ คํด์ผํ๊ณ ์์์ฑ์ ๋ํ ์์กด์ด ํ๋ก์ ํธ ์ ์ฒด์ ์ผ๋ก ํผ์ง๊ฒ ๋์ด ๋ณ๊ฒฝ์ ์ทจ์ฝํด์ง๋ค.
- ๋๋ฉ์ธ ๊ณ์ธต์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์กดํ๊ฒ ๋์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ณํ๊ฐ ์ผ์ด๋๋ฉด ๋๋ฉ์ธ ๊ณ์ธต์๋ ๋ณํ๊ฐ ์๊ธด๋ค.
- ์ํคํ
์ฒ ๊ฒฝ๊ณ๋ฅผ ๊ฐ์ ํ ์ ์๋ค.
- ๊ณ์ธตํ ์ํคํ ์ฒ์์๋ ์์ ๊ณ์ธต์ ์๋ ์ปดํฌ๋ํธ์ ์ ๊ทผํ ๋ชฉ์ ์ผ๋ก ํด๋น ์ปดํฌ๋ํธ๋ฅผ ํ์ ๊ณ์ธต์ผ๋ก ๋ด๋ฆด ์ ์๋ค.
- ์ด๋ฌํ ํ์๊ฐ ๋ฐ๋ณต๋๋ฉด ์ ์ ๊ฒฝ๊ณ๊ฐ ๋ชจํธํด์ง๊ณ ํ๋ฌผ์ด์ง๊ฒ ๋๋ค.
- ๊ณ์ธต์ ์คํต ํ ์ ์๋ค.
- ๊ณ์ธต์ ๊ฑด๋๋ฐ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค.
- ๊ตฌํ์ด ๊ฐ๋จํ ๊ฒฝ์ฐ Controller์์ ๋ฐ๋ก ๋๋ฉ์ธ์ ์ฐธ์กฐํ๋ ๋ฑ์ ๋ก์ง์ ์์ฑํ ์ ์๋ค. ์ด ๊ฒฝ์ฐ์ ๋ฌธ์ ๋ ๊ธฐ๋ฅ ํ์ฅ์ด ์ด๋ ต๊ณ , ํ ์คํธ๊ฐ ๋ณต์กํด์ง๋ค.
- ์ ์ค์ผ์ด์ค๋ฅผ ์จ๊ธด๋ค.
- ๊ฐ๋ฐ์๋ ์ ์ค์ผ์ด์ค๋ฅผ ์ด๋ ๊ณ์ธต์๋ ์์ ๋กญ๊ฒ ์์ฑํ ์ ์๋ค.
- ๊ฐ๋ฐ์๊ฐ ์ ์ค์ผ์ด์ค์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ํ์ ํ๊ธฐ ์ด๋ ค์์ ๋์ผํ ๋ก์ง์ ๋ค๋ฅธ ์์น์ ์๋กญ๊ฒ ๊ตฌํํ์ฌ ์ฝ๋๋ฅผ ๋๋ฝํ๊ฒ ๋๋ค.
- ์๋น์ค์ ํฌ๊ธฐ๋ฅผ ๊ฐ์ ํ ์ ์๋ค.
- ๊ณ์ธตํ ๊ตฌ์กฐ์์๋ ์๋น์ค์ ํฌ๊ธฐ๋ฅผ ๊ฐ์ ํ์ง์๋๋ค. ์์ญ๊ฐ์ ์๋น์ค ๋ก์ง์ ํ๊ณณ์ ์ ๋ถ ์์ฑํ ์๋ ์๋ค.
- ์ด ๊ฒฝ์ฐ์ ์๋น์ค๊ฐ ๋๋ฌด ๋ง์ ์์กด์ ๊ฐ์ ธ ์๋ง์ ์น ๊ณ์ธต์ด ํด๋น ์๋น์ค๋ฅผ ์์กดํ๊ฒ ๋๋ค. ๊ฒฐ๊ตญ ์๋น์ค๋ฅผ ํ ์คํธํ๊ธฐ ์ด๋ ค์์ง๊ณ ์์ ํด์ผํ ์ ์ค์ผ์ด์ค๋ฅผ ์ฐพ๊ธฐ๋ ํ๋ค์ด์ง๋ค.
ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ์ ๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ(DDD)์ ์ฐ๊ด๊ด๊ณ
- ๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ์์ ๋น์ฆ๋์ค ๋๋ฉ์ธ์ ๋ณต์ก์ฑ์ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ๋ก ์ด๋ค.
- ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ์ DDD๋ ์๋ก ๋ณด์์ ์ธ ๊ด๊ณ์ ์๋ค.
- DDD๋ ๋๋ฉ์ธ ๋ชจ๋ธ ์ค์ฌ์ผ๋ก ์์คํ ์ ์ค๊ณํ๊ณ , ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ๋ ์ด๋ฌํ ๋๋ฉ์ธ ๋ชจ๋ธ์ ํจ๊ณผ์ ์ผ๋ก ๊ตฌํํ ์ ์๋ ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํ๋ค.
- DDD ๊ตฌํ์ ํต์ฌ 3๊ฐ์ง Layer
- Application Layer: ์ฃผ๋ก ๋๋ฉ์ธ๊ณผ Repository๋ฅผ ๋ฐํ์ผ๋ก ์ค์ ์๋น์ค(API)๋ฅผ ์ ๊ณตํ๋ ๊ณ์ธต
- Domain Model Layer: Entity๋ฅผ ํ์ฉํด ๋๋ฉ์ธ ๋ก์ง(๋น์ฆ๋์ค ๋ก์ง)์ด ์ํ๋๋ ๊ณ์ธต
- Infrastructure Layer: ์ธ๋ถ์ ํต์ (RDBMS, Redis, HttpClient, ...)์ ๋ด๋นํ๋ ๊ณ์ธต
์ฃผ์ ์ปดํฌ๋ํธ

Adapter
- ํฌํธ๋ฅผ ํตํด ์ธํ๋ผ์ ์ค์ ๋ก ์ฐ๊ฒฐํ๋ ๋ถ๋ถ์ ๋ด๋นํ๋ ๊ตฌํ์ฒด๋ฅผ ์๋ฏธ
- ์ธํ๋ผ๋ web๊ณผ ๊ฐ์ ์ ์์ค layer๋ค์ด ๋๋ฉ์ธ ๋ก์ง์ ์ ๊ทผํ ์ ์๋ ํฌํธ๋ฅผ ์ฌ์ฉ
| ์ด๋ฆ | ์ค๋ช | ์์ |
| Driving Adapter = Primary Adapter |
์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ์๋ค์ผ ๋ ์ฌ์ฉ๋๋ Adapter |
|
| Driven Adapter = Secondary Adapter |
๋๋ฉ์ธ ๋ชจ๋ธ์ ์ฒ๋ฆฌ์ ์ฌ์ฉ๋๋ Adapter |
|
Port
- ์๋น์ค(๋๋ usecase)์ ์ด๋ํฐ์ ๋ํ ๋ช ์ธ๋ง์ ์ ๊ณตํ๋ ๊ณ์ธต
- ๋จ์ํ ์ธํฐํ์ด์ค ์ ์๋ง ์กด์ฌํ๋ฉฐ, DI๋ฅผ ์ํด ์ฌ์ฉ๋๋ค.
- Port๋ application ์ ์ฅ์์ consumer, ๋๋ application์์ ๋๊ฐ๊ฑฐ๋/๋ค์ด์ค๋ end point๋ผ๊ณ ๋ณด๋ฉด ๋จ.
- ํฌํธ๋ ๋ด๋ถ ๋น์ฆ๋์ค ์์ญ์ ์ธ๋ถ ์์ญ์ ๋
ธ์ถํ API์ด๊ณ ์ธ๋ฐ์ด๋(Inbound)/์์๋ฐ์ด๋(Outbound) ํฌํธ๋ก ๊ตฌ๋ถ
- ์ธ๋ฐ์ด๋ ํฌํธ - ๋ด๋ถ ์์ญ ์ฌ์ฉ์ ์ํด ๋ ธ์ถ๋ API
- ์์๋ฐ์ด๋ ํฌํธ - ๋ด๋ถ ์์ญ์ด ์ธ๋ถ ์์ญ์ ์ฌ์ฉํ๊ธฐ ์ํ API
Application Service(usecase)
- ์ด๋ํฐ๋ฅผ ์ฃผ์ ๋ฐ์ ๋๋ฉ์ธ ๋ชจ๋ธ๊ณผ ์ด๋ํฐ๋ฅผ ์ ์ ํ ์ค์ผ์คํธ๋ ์ด์ ํ๋ ๊ณ์ธต์ ์๋ฏธ
Domain Model
- DDD์ ๋๋ฉ์ธ ๋ชจ๋ธ๊ณผ ๋์ผํ ๊ฐ๋
์ ์ง๋ ๊ณ์ธต
- ๋น์ฆ๋์ค ๋ก์ง์ด๋ผ ๋ถ๋ฅด๋ ์ํฐํฐ์ ๋ํ ๋ณ๊ฒฝ์ ๋ชจ๋ ํด๋น ๊ณ์ธต์์๋ง ์คํ๋๋ค.
- ์์น์ ์ผ๋ก๋ ์ด๋ ํ ์์กด์ฑ๋ ์์ด์ผ ํ์ง๋ง Entity๋ฅผ ๋ง๋ค ๋ Database์ ์ ์ฌ๋์ด ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฐธ๊ณ ํด์ผํ๋ ๊ฒฝ์ฐ์ ๊ฐ์ ์ํฉ์์๋ Port๋ฅผ ์ด์ฉํด Adapter๋ฅผ ์ฃผ์ ๋ฐ์์ ์ฌ์ฉํ ์ ์๋ค๋ ์์ธ์ฌํญ์ด ์กด์ฌํ๊ธฐ๋ ํ๋ค.
ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ ์ฅ๋จ์
์ฅ์
- ์ ์ฐ์ฑ : ์ธ๋ถ ์์คํ
์ด๋ ์ธํ๋ผ์์ ์์กด์ฑ์ด ๋ฎ์ ๊ตฌ์ฑ์์๋ฅผ ์ฝ๊ฒ ๊ต์ฒดํ๊ฑฐ๋ ์
๋ฐ์ดํธ๊ฐ ๊ฐ๋ฅ
- ๋คํ์ฑ์ผ๋ก ์ธํด DIP ์์น ์ค์
- ํ ์คํธ ์ฉ์ด์ฑ : ๋น์ฆ๋์ค ๋ก์ง์ ๋ ๋ฆฝ์ ์ผ๋ก ํ ์คํธํ ์ ์์
- ์ ์ง๋ณด์์ฑ : ์ฑ ์์ด ๋ถ๋ฆฌ๋์ด ์์ด ์ฝ๋์ ์ดํด์ ์์ ์ด ์ฉ์ด
๋จ์
- ๊ตฌํ ๋ณต์ก์ฑ : ํฌํธ์ ์ด๋ํฐ๋ฅผ ๊ตฌ์ฑํ๊ณ ๊ด๋ฆฌํ๋๋ฐ ๋ณต์ก๋ ์ฆ๋
- ์ค๋ฒํค๋ ๋ฐ์: ์ด๊ธฐ ๊ฐ๋ฐ ์๊ฐ ์ฆ๊ฐ, ๋๋ฉ์ธ ๋ชจ๋ธ์ ํํ ์ฌ์ด๋ฅผ ๋งคํํ ๊ฐ์ฒด ํ์
- ORM ํ๋ ์์ํฌ๋ DB ๊ตฌ์กฐ ๋ฐ ๊ฐ์ฒด ํ๋์ ์นผ๋ผ์ ๋งคํ์ ์์ ํ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๋ด๊ณ ์๋ ์ํฐํฐ ํด๋์ค ํ์.
- ๋๋ฉ์ธ ๊ณ์ธต์ ์์์ฑ ๊ณ์ธต์ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์, ๋ ๊ณ์ธต์์ ๊ฐ๊ฐ ์ํฐํฐ๋ฅผ ๋ง๋ค์ด์ฃผ์ด์ผ ํ๊ณ ๋๋ฉ์ธ ๊ณ์ธต๊ณผ ์์์ฑ ๊ณ์ธต์ด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋, ๋์ํฐํฐ๋ฅผ ์๋ก ๋งคํํ๋ ๊ณผ์ ์ด ๋ฐ์ํจ.
๋ฐ์ํ
'Backend' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| DDD ์์น(Domain Driven Design)์ด๋? (0) | 2026.01.03 |
|---|---|
| ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ์์ Port vs CQRS ํจํด ๋น๊ต (0) | 2026.01.03 |