๊ฐ์
DDD์ ๋ ์ด์ด๋ ์ํคํ ์ฒ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ค๊ณ ํ์ง๋ง, ๋๋ ํ๋ด๋ง ๋ด์๋ ๊ฒ ๊ฐ๋ค. ์ด๋ฒ ๊ธ์ ๋ด๊ฐ ํท๊ฐ๋ ธ๋ ์ง์ ์ ์ ๋ฆฌํ๊ณ ์ค๋ฌด ์ฝ๋์ ์ ์ฉํ ์ ์๋ ๋๋ง์ ๊ธฐ์ค์ ์ธ์๋ณด๋ ค๊ณ ํ๋ค. ์ ๋ฆฌ ๊ณผ์ ์์ ChatGPT์ ๋์์ ๋ฐ์๊ณ , ๋ด์ฉ์ ์ค๋ฅ๊ฐ ์์ ์ ์๊ธฐ์ ์ง์์ ์ผ๋ก ๋ณด์ํ ์์ ์ด๋ค.
๋๋ฉ์ธ
ํ์ค์ธ๊ณ์ ์๋ ๋ฌธ์ ๋ฅผ ์ํํธ์จ์ด๋ก ํด๊ฒฐํ๊ธฐ ์ํ ๊ด์ฌ์ฌ ๋๋ ๋ฌธ์ ์์ญ์ด๋ค. ๋๊ฒ๋ ๊ธ์ต ๋๋ฉ์ธ, ์ปค๋จธ์ค ๋๋ฉ์ธ, ๋ชจ๋น๋ฆฌํฐ ๋๋ฉ์ธ, ๊ด๊ณ ๋๋ฉ์ธ ๋ฑ. ์ฌ๊ธฐ์ ์ข ๋ ์ธ๋ถํํด์ ์๋ธ๋๋ฉ์ธ์ผ๋ก ํํ์ด ๊ฐ๋ฅํ๋ค. ํ์ง๋ง ์ค์ ๋ํ๋ฅผ ํ๋ฉด ๋๋ฉ์ธ์ด๋ผ๋ ๊ฒ์ ๋๊ฒ, ์ข๊ฒ ๋ฌธ๋งฅ์ ๋ฐ๋ผ ๋ค์ํ๊ฒ ํํ๋๋ค. ๊ฐ์ ๋จ์ด๋ผ๋ ์ปจํ ์คํธ์ ๋ฐ๋ผ ์๋ฏธ๊ฐ ๋ฌ๋ผ์ง๋ค.
- ๊ธ์ต : ๋์ถ, ๋ณดํ, ์์ ๊ธ ๋ฑ
- ์ปค๋จธ์ค : ์ํ, ์ ์, ์ฃผ๋ฌธ, ๊ฒฐ์ , ์ ํต ๋ฑ
- ๋ชจ๋น๋ฆฌํฐ : ๋ฒ์ค, ์งํ์ฒ , ํ์, ๋ด๋น ๋ฑ
- ๊ด๊ณ : ์ ์ฐฐ, ๊ณผ๊ธ, ํ๊ฒํ ๋ฑ
๋๋ฉ์ธ ๋ก์ง
๋๋ฉ์ธ์ด ๊ฐ์ง ๊ณ ์ ์ ๊ท์น๊ณผ ๋ ผ๋ฆฌ ๋ชจ์์ด๋ค. ๋๋ฉ์ธ ๋ก์ง์ ๋๋ฉ์ธ ๋ชจ๋ธ์ด ์ํ์ ํ์๋ฅผ ํจ๊ป ๊ฐ์ง๋ฉฐ ํ๋ํ ์ ์๋๋ก ์ค๊ณํ๋ ๊ฒ์ด ๋ชฉํ๋ค. ๋ฐ๋ฉด ์ ์ฆ์ผ์ด์ค๋ฅผ ์ํํ๊ธฐ ์ํ ํ๋ฆ์ ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ฒ์ธต์ ์ค์ผ์คํธ๋ ์ด์ ์ฑ ์์ผ๋ก ๋ถ๋ฆฌํ๋ค.
- ์ ์ฆ์ผ์ด์ค ์ค์ผ์คํธ๋ ์ด์ : ์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง
- ๋๋ฉ์ธ ๊ท์น : ๋๋ฉ์ธ ๋ก์ง
๋๋ฉ์ธ ๋ก์ง์ ๊ฐ๋ฅํ Aggregate ๋ด๋ถ๋ก ๋๊ณ ์ค์ค๋ก ๊ท์น์ ์ฒ๋ฆฌํ๋๋ก ํ๋ค. ํ์ง๋ง ๋ชจ๋ธ ๋ด๋ถ์์ ์์ฐ์ค๋ฝ๊ฒ ๋ค์ด๊ฐ์ง ์๋ ๋ก์ง๋ค์ ๋๋ฉ์ธ ์๋น์ค๋ก ๋ถ๋ฆฌํ ์ ์๋ค.
์ ๊ทธ๋ฆฌ๊ฒ์ดํธ (Aggregate)
๋๋ฉ์ธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํ ๊ฒฝ๊ณ๋ฅผ Aggregate ๋ผ๊ณ ํ๋ค. Repository๋ฅผ ํตํด์ Aggregate๋ฅผ ์กฐํ/์ ์ฅํ๋ค. ์ธ๋ถ์์ Aggregate Root๋ฅผ ํตํด์๋ง ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ค. ๋ด๋ถ์ ํ์๋ก ๋๋ฉ์ธ ๊ท์น์ ์ํํ๋๋ก ์ค๊ณํ ๋ฐฉ์์ Rich Domain Model์ด๋ผ๊ณ ํ๋ค. ๋ฐ๋๋ก ๋๋ฉ์ธ ๋ก์ง์ด ๋ชจ๋ธ ๋ฐ์ ์๊ณ , ๊ฐ๋ง ๋ด๋ DTO์ฒ๋ผ ๋์ด์๋ค๋ฉด ๊ทธ๊ฑด Anemic Domain Model์ ๊ฐ๊น๋ค.
๋ ์ด์ด๋ ์ํคํ ์ฒ์ DDD
๋ ์ด์ด๋ ์ํคํ ์ฒ์์๋ ์์กด์ฑ์ด ์์์ ์๋๋ก ๋จ๋ฐฉํฅ์ผ๋ก ํ๋ฅธ๋ค. ์ด ๋จ๋ฐฉํฅ ์์ฒด๋ ๋๋ฉ์ธ์ด ์ธํ๋ผ๋ฅผ ์ฐธ์กฐํ๋๋ก ๊ฐ์ ํ๋ ๊ฒ์ด ์๋์ง๋ง, 3 Layer ๋ฅผ ์ธํ๋ผ๋ ํ๋ ์์ํฌ ์ค์ฌ์ผ๋ก ๊ตฌํํ๋ค ๋ณด๋ฉด ๋๋ฉ์ธ ์ฝ๋๊ฐ ์ธํ๋ผ์ ๊ฒฐํฉ๋๋ ํํ๊ฐ ๋์ฌ ์ ์๋ค.
DDD ๊ด์ ์์๋ ๋๋ฉ์ธ์ ์ธ๋ถ ๊ธฐ์ ๋ก๋ถํฐ ๋ณดํธํ๊ธฐ ์ํด, ๋๋ฉ์ธ ๊ณ์ธต์ด ์ธํ๋ผ ๊ตฌํ์ ์ง์ ์์กดํ๋ ๊ฒ์ ์ง์ํ๋ค. ๋๋ฉ์ธ์ด ํ์๋ก ํ๋ ์์กด ์ง์ ์ Port (์ธํฐํ์ด์ค) ๊ฐ์ ์ถ์ํ๋ก ํํํ๊ณ ์ค์ ๊ตฌํ์ฒด๋ ์ธํ๋ผ ๊ณ์ธต์ ๋๋, Port๋ฅผ ํฅํ๋๋ก ํ๋ค. (DIP ์์น)
์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ฆ์ผ์ด์ค๋ฅผ ์ค์ผ์คํธ๋ ์ด์ ํ๋ฉด์, ํฌํธ๋ฅผ ํตํด์ ํ์ํ ์ ๊ทธ๋ฆฌ๊ฒ์ดํธ๋ฅผ ์กฐํ/์ ์ฅํ๋ค. ํธ๋์ญ์ ๊ฒฝ๊ณ์ ๋ฝ, ์ฌ์๋์ ๋ณด์ ๊ทธ๋ฆฌ๊ณ ์ฌ๋ฌ ์ ๊ทธ๋ฆฌ๊ฒ์ดํธ์ ์กฐํฉ ๋ฑ ํ๋ก์ธ์ค ์ ์ด๋ฅผ ๋ด๋นํ๋ค. ๋ฐ๋ฉด ๋๋ฉ์ธ ์๋น์ค์ ๋๋ฉ์ธ ๋ชจ๋ธ์ ๋ถ๋ณ์กฐ๊ฑด(๋๋ฉ์ธ ๊ท์น)์ ์ค์ฌ์ผ๋ก ๊ตฌ์ฑํ๋ฉฐ ์ ์ฆ์ผ์ด์ค ์ค์ผ์คํธ๋ ์ด์ ์ฑ ์์ ๊ฐ์ง ์๋๋ค.
๊ฒฐ๋ก
DDD ๋ ๋ฌธ์ ํด๊ฒฐ์ ์ํด ๋ฌด์์ ์ค์ฌ์ ๋ ๊ฒ์ธ์ง ์ค๊ณํ๋ ๊ด์ . ๋ ์ด์ด๋ ์ํคํ ์ฒ๋ ์์คํ ๊ตฌ์กฐ๋ฅผ ์ด๋ป๊ฒ ๋๋ ๊ฒ์ธ์ง ๊ฒฐ์ ํ๋ ๊ตฌ์กฐ์ ๊ด์ ์ด๋ค. ์ด ๋์ ๋ชฉ์ ์ด ๋ค๋ฅด๋ค. ๋๋ฉ์ธ ๋ชจ๋ธ์ ์ค์ฌ์ ๋๊ณ ์ด๋ฅผ ์ธ๋ถ๋ก๋ถํฐ ๋ณดํธํด์ ์ํคํ ์ฒ๋ฅผ ๊ตฌ์ฑํ ๋ ๋ ๋ชฉ์ ์ ์๋ก ์๋ฏธ ์๊ฒ ๋ถํฉ๋๋ค.
์๋ฆญ์๋ฐ์ค DDD ๋ด์ฉ์ ๋ณด๋ฉด ์๋์ ๊ฐ์ ๋ด์ฉ์๋ค.
๋๋ฉ์ธ ๊ท์น์ ๊ฒฉ๋ฆฌํ๋๊ฒ ์ต์ข ๋ชฉํ์ด๋ฉฐ, ์ํคํ ์ฒ๋ ๊ทธ ๋ชฉํ๋ฅผ ์คํ์ํค๊ธฐ ์ํ ํจํด ํน์ ๊ตฌ์กฐ๋ผ๊ณ ์๊ฐํ๋ค.
Concentrate all the code related to the domain model in one layer and isolate it from the user interface, application, and infrastructure code.
The key goal here is isolation. Related patterns, such as “Hexagonal Architecture,” may serve as well or better to the degree that they allow our domain model expressions
to avoid dependencies on and references to other system concerns.
๊ด๋ จ์๋ฃ
'Interest > ๊ฐ๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| 2024-12 ๊ฐ๋ฐ : ์ํฌ๋ฆฌ ๊ธฐ๋ก (0) | 2024.12.02 |
|---|---|
| 2024-11 ๊ฐ๋ฐ : ์ํฌ๋ฆฌ ๊ธฐ๋ก (0) | 2024.10.16 |
| 2024-05 ๊ฐ๋ฐ : ์ํฌ๋ฆฌ๊ธฐ๋ก (0) | 2024.06.03 |
| 2024-04 ๊ฐ๋ฐ : ์ํฌ๋ฆฌ๊ธฐ๋ก (1) | 2024.04.10 |
| 2024-03 ๊ฐ๋ฐ : ์ํฌ๋ฆฌ ๊ธฐ๋ก (0) | 2024.03.09 |