DDD์ ๋ํด ์ดํดํ๊ณ ํ๋ก์ ํธ์ ์ ์ฉํด๋ณด์
DDD์ ๊ฐ๋ ๊ณผ ๋ฑ์ฅ ๋ฐฐ๊ฒฝ
- ์ํํธ์จ์ด๋ฅผ ์ค๊ณํ ๋ ๊ฐ์ฅ ์ค์ํ ๊ฒ = ๊ณ ๊ฐ์ ์๊ตฌ์ฌํญ์ ์ ํํ ์ดํดํ๋ ๊ฒ
- ๊ณผ๊ฑฐ : ๊ธฐ์ ์ค์ฌ ๊ฐ๋ฐ ๋ฐฉ๋ฒ๋ก โ ๋น์ฆ๋์ค ์ธก๋ฉด์์ ๋ฐ์ํ๋ ์๊ตฌ์ฌํญ ๋ฐ์์ ํ๊ณ
DDD์ ํต์ฌ ๊ฐ์น
- ์ํํธ์จ์ด ์ค๊ณ์์ ๋๋ฉ์ธ ์ง์์ด ๊ฐ์ฅ ์ค์ํ ์์์์ ์ธ์ํ๊ณ ์ด๋ฅผ ์ค์ฌ์ผ๋ก ์ํํธ์จ์ด ์ค๊ณ
- ์ ๋น์ฟผํฐ์ค ์ธ์ด : ๋ชจ๋ ๊ณณ์์ ๋์ผํ๊ฒ ์ฌ์ฉํ๋ ์ธ์ด
- ์ฉ์ด์ ๋ชจํธํจ์ ์ค์ด๊ณ ๋๋ฉ์ธ๊ณผ ์ฝ๋ ์ฌ์ด ๋ถํ์ํ ํด์ ๊ณผ์ ๊ฐ์
๋๋ฉ์ธ ๋ชจ๋ธ
- DDD์์ ํต์ฌ ๊ฐ๋ ์ ํฌํํ๋ ๋ฐฉ๋ฒ
- ํน์ ๋๋ฉ์ธ์ ๋ํ ์ง์, ๊ท์น, ๋ก์ง์ ์ถ์ํํ์ฌ ๊ฐ๋ ์ ์ผ๋ก ํํํ ๊ฒ
DDD์ ๊ตฌ์กฐ์ ์ฉ์ด
Entity
- ๊ณ ์ ์ ์๋ณ์๋ฅผ ๊ฐ๋ ๊ฐ์ฒด๋ก ์์ ์ ๋ผ์ดํ ์ฌ์ดํด์ ๊ฐ์ง
- ๋ฐ์ดํฐ์ ํจ๊ป ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๊ฐ์ฒด
- ๋๋ฉ์ธ ๊ด์ ์์ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ณ ๊ธฐ๋ฅ ๊ตฌํ์ ์บก์ํํด์ ๋ฐ์ดํฐ๊ฐ ์์๋ก ๋ณ๊ฒฝ๋๋ ๊ฒ ๋ฐฉ์ง
Value
- ๊ณ ์ ์ ์๋ณ์๋ฅผ ๊ฐ์ง ์๋ ๊ฐ์ฒด๋ก ๊ฐ๋ ์ ์ธ ํ๋์ ๊ฐ์ ํํ
Domain Service
- ํน์ ์ํฐํฐ์ ์ํ์ง ์๋ ๋๋ฉ์ธ ๋ก์ง
Aggregate
- ๊ด๋ จ๋ ๊ฐ์ฒด๋ค์ ๋ชจ์ ํ๋์ ๋จ์๋ก ์ทจ๊ธํ๋ ๊ฐ๋
- ์ฐ๊ด ๋๋ฉ์ธ์ ์ ๊ทธ๋ฆฌ๊ฑฐํธ๋ก ๋ฌถ์ด ํ๋์ ๊ตฐ์ง์ผ๋ก ์ดํด
- ์์ ์์ค์์ ๋๋ฉ์ธ ๋ชจ๋ธ ๊ฐ์ ๊ด๊ณ ํ์ ๊ฐ๋ฅ
- ํน์ ๋๋ฉ์ธ ๊ตฐ์ง์ ์ํ ๊ฐ์ฒด๋ค์ ๊ด๋ฆฌํ๋ ๋ฃจํธ ์ํฐํฐ๋ฅผ ๊ฐ์ง
- ํ๋์ ์ ๊ฑฐ๋ฆฌ๊ฑฐํธ์๋ ๋ฐ๋์ ํ๋์ ๋ฃจํธ ์ํฐํฐ๊ฐ ์กด์ฌ
JPA์์์ DDD
- ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๋๋ฉ์ธ ๋ชจ๋ธ ๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ธฐ ์ํด repository ํจํด ๊ถ์ฅ
- JpaRepository, @Entity
- ๋๋ฉ์ธ ๋ชจ๋ธ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ํต์ฌ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ๋ํ ๋งคํ์ ํ๋ฉด์๋ ๋๋ฉ์ธ ๋ชจ๋ธ์ ์์์ฑ ์ ์ง ๊ฐ๋ฅ
๊ทธ๋ผ mybatis๋ก DDD ๊ฐ๋ฐ์ ์ด๋ ต๋โฆ? ๋๊ฐ์ด repository๋ก ํ๋๊ฑฐ๋ผ ์๊ด์๋..? ํ
- JpaRepository๋ฅผ ๋ฃจํธ ์ ๊ทธ๋ฆฌ๊ฑฐํธ์๋ง ๊ตฌํ
- ๋ฃจํธ ์ ๊ทธ๋ฆฌ๊ฑฐํธ๊ฐ ํ์ ์ ๊ทธ๋ฆฌ๊ฑฐํธ ๊ด๋ฆฌ
- ์์์ฑ ๋ก์ง๋ ๋ฃจํธ ์ ๊ทธ๋ฆฌ๊ฑฐํธ์ ์ง์ค
- ex) Order(root) โ OrderProduct โ Receipt ๊ฐ๊ฒฉ ์ ๋ณด ์์
@Transactional
public void updateOrderProductReceiptPrice(Long id, Long orderProductId, Long receiptId, Long price) {
orderRepository.findById(id)
.flatMap(order -> order.getProduct(orderProductId))
.flatMap(orderProduct -> orderProduct.findReceipt(receiptId))
.ifPresent(receipt -> receipt.update(price));
}
OrderProduct๋ Order์ ์ํด ๋ณ๊ฒฝ ๋๊ณ , Receipt๋ OrderProduct์ ์ํด ๋ณ๊ฒฝ๋จ โ ์บก์ํ๊ฐ ๊นจ์ง์ง ์์!
MSA ์์์ DDD
- ๋ชจ๋๋ฆฌ์ ์ ํ๋ฆฌ์ผ์ด์ ์ MSA๋ก ์ ํํ ๋ ์ค์ํ ๊ฒ : ์๋น์ค์ ๊ฒฝ๊ณ๋ฅผ ๋ช ํํ ๋๋๋ ๊ฒ
- ๋๋ฉ์ธ ๊ฐ๋ ์ ๊ธฐ์ค์ผ๋ก ๋ง์ดํฌ๋ก์๋น์ค ๊ตฌ์ถ(์ฃผ๋ฌธ, ์ํ, ๋ฆฌ๋ทฐ ๋ฑ)