๊ฐ์ฒด์งํฅ์ ์ข์ํ๋๋ผ๋ ๊ฐ๋ฐํ ๋น์ฆ๋์ค ๋ก์ง์ด ๋๋ฌด ๋จ์ํ ๊ฒฝ์ฐ ๊ฐ์ฒด์งํฅ ์ ๊ทผ์ ๊ณผํ ์ ์๋ค. ์ด๋ฐ ๊ฒฝ์ฐ **์ ์ฐจ์ ์ธ ์ฝ๋(procedural code)**๋ฅผ ์์ฑํ๋ค.
๋งํดํ์ธ๋ฌ๋ ์ด๋ฅผ Transaction Script Pattern์ด๋ผ๊ณ ๋ถ๋ ๋ค.
์ด ๋ฐฉ๋ฒ์์๋ ๊ฐ์ฒด์งํฅ ์ค๊ณ๋ฅผ ํ๋ ๊ฒ์ด ์๋๋ผ, presentation tier์ ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด transaction script(OrderService์ createOrder, reviseOrder, cancelOrder ๋ฑ)๋ผ๊ณ ๋ถ๋ฆฌ๋ ๋ฉ์๋๋ฅผ ์์ฑํ๋ค.
์ด ์ ๊ทผ๋ฒ์ ์ค์ํ ํน์ฑ์ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ํ์๋ฅผ ๊ตฌํํ๋ ํด๋์ค(OrderService)๊ฐ ์ํ๋ฅผ ์ ์ฅํ๋ ํด๋์ค(Order)์ ๋ถ๋ฆฌ๋๋ค๋ ๊ฒ์ด๋ค.
์คํฌ๋ฆฝํธ๋ ๋ณดํต Service ํด๋์ค(OrderService)์ ์์นํ๋ค. Service๋ ํ๋์ ์์ฒญ๊ณผ ํด๋น ์์ฒญ์ ๋ํ ์์คํ ํ์์ ๋ํด์ ํ๋์ ๋ฉ์๋๋ฅผ ๊ฐ๋๋ค. ์ด ๋ฉ์๋๊ฐ ํด๋น ์์ฒญ์ ๋ํ ๋น์ฆ๋์ค ๋ก์ง์ ๊ตฌํํ๋ค. ๋ฐ์ดํฐ ๊ฐ์ฒด(Order)๋ ํ์๊ฐ ์๊ฑฐ๋ ๊ฑฐ์ ๊ฐ์ง ์๋๋ค.
์ด ์ ๊ทผ๋ฒ์ ๊ฐ๋จํ ๋น์ฆ๋์ค ๋ก์ง์๋ ์ ๋์ํ๋ค. ๋จ์ ์ ๋ณต์กํ ๋น์ฆ๋์ค ๋ก์ง์ ๊ตฌํํ๊ธฐ์๋ ์ข์ ๋ฐฉ๋ฒ์ด ์๋๋ผ๋ ๊ฒ์ด๋ค.
Transaction Script Pattern์ด ๋จ์ํ์ฌ ๋งค์ฐ ๋งค๋ ฅ์ ์ด์ง๋ง ๋น์ฆ๋์ค ๋ก์ง์ด ๋ณต์กํด์ง๋ฉด ์ ์ง๋ณด์๊ฐ ์ ๋ชฝ์ด ๋๋ค.
์ค๋ ๊ธฐ๊ฐ ์๋น์ค๋ฅผ ์ด์ํด ๋ณธ ๊ฐ๋ฐ์๋ผ๋ฉด ๋ณ๊ฒฝ ์๊ตฌ๋ ๋๋ถ๋ถ ๊ธฐ๋ฅ ์์ฒด๊ฐ ์๋๋ผ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ ๊ธฐ์ธํ๋ค๋ ์ ์ ๊ณต๊ฐํ ๊ฒ์ด๋ค. Transaction Script Pattern์์๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ ํด๋์ค๊ฐ ํ์๋ฅผ ๊ฐ์ง๊ณ ์์ง ์์์ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ด ์๊ธฐ๋ฉด ํ์๋ฅผ ๊ฐ์ง๊ณ ์๋ ํด๋์ค์ ์ํฅ์ ๋ฏธ์น๋ค. ์ฌ์ง์ด ํ์๋ฅผ ๊ฐ์ง ์ฝ๋๊ฐ ์๋น์ค ํด๋์ค ์ธ์ ์ฌ๋ฌ๊ณณ์ ์กด์ฌํ๋ค๋ฉด ๋ฌธ์ ๋ ๋ ์ฌ๊ฐํด์ง๋ค. ๋ฐ๋ผ์ ์ด์๊ณผ ์ ์ง๋ณด์๋ฅผ ์๊ฐํ๋ค๋ฉด ๋ฐ์ดํฐ๋ฅผ ์บก์ํํ๊ณ ๊ธฐ๋ฅ๋ง ์ธ๋ถ์ ์ ๊ณตํ๋ ๋ฐฉ์์ด์ฌ์ผ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ด ์๊ฒจ๋ ์ธ๋ถ์ ์ํฅ์ ์ต์ํํ ์ ์๋ค.
Monolithic Application์ด ์ง์์ ์ผ๋ก ์ปค์ง๋ ์ต์ฑ์ด ์๋ ๊ฒ๊ณผ ๊ฐ์ด Transaction Script๋ ๋์ผํ ๋ฌธ์ ๋ฅผ ๊ฐ๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก ๊ทน๋๋ก ๋จ์ํ ์ดํ๋ฆฌ์ผ์ด์ ์ ์์ฑํ๋ ๊ฒ์ด ์๋๋ผ๋ฉด ์ ์ฐจ์ ์ฝ๋๋ฅผ ์์ฑํ๋ Transaction Script์ ์ ํน์ ์ด๊ฒจ๋ด๊ณ Domain Model Pattern์ ์ ์ฉํ์ฌ ๊ฐ์ฒด์งํฅ ์ค๊ณ๋ฅผ ๊ฐ๋ฐํด์ผ ํ๋ค.
๊ฐ์ฒด์งํฅ์ค๊ณ์์ ๋น์ฆ๋์ค ๋ก์ง์ ๊ฐ์ฒด๋ชจ๋ธ๋ก ๊ตฌ์ฑ๋๋ค. ๊ฐ์ฒด๋ชจ๋ธ์ ์ ์ ์์ ํด๋์ค๋ค์ ๋คํธ์ํฌ๋ก ๊ตฌ์ฑ๋๋ค. ์ด๋ฐ ์ค๊ณ ๋ฐฉ์์์๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ํ์๋ ์ํ๋ง ๊ฐ๋ ํด๋์ค๋ค์ด ์กด์ฌํ ์๋ ์์ง๋ง ๋๋ถ๋ถ์ ๊ฒฝ์ฐ๋ ํ์์ ์ํ๋ฅผ ๋ชจ๋ ๊ฐ๋๋ค.
Transaction Script์ ๋์ผํ๊ฒ OrderService๋ ๊ฐ ์์ฒญ๊ณผ ํด๋น ์์ฒญ์ ๋ํ ์์คํ ํ์์ ๋ํด ํ๋์ ๋ฉ์๋๋ฅผ ๊ฐ๋๋ค. Domain Model Pattern์์ Service ๋ฉ์๋๋ ๋๊ฐ ๋จ์ํ๋ค. Service ๋ฉ์๋๊ฐ ํญ์ ๋๋ฉ์ธ ๊ฐ์ฒด์๊ฒ ์์ํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋๋ฉ์ธ ๊ฐ์ฒด๋ ๋น์ฆ๋์ค ๋ก์ง์ ๋๋ถ๋ถ์ ๊ฐ๋๋ค.
์๋ฅผ ๋ค๋ฉด Service ๋ฉ์๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก๋ถํฐ ๋๋ฉ์ธ ๊ฐ์ฒด๋ค์ ๋ก๋ฉํ๊ณ ๋๋ฉ์ธ ๊ฐ์ฒด๋ค์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
์ด ์์ ๊ฒฝ์ฐ Order ํด๋์ค๋ ์ํ์ ํ์๋ฅผ ๊ฐ๋๋ค. ์ฌ์ง์ด ์ํ๋ private์ด์ฌ์ ๋ฉ์๋๋ฅผ ํตํด์๋ง ๊ฐ์ ์ ์ผ๋ก ์ ๊ทผ ๊ฐ๋ฅํ๋ค.
๊ฐ์ฒด์งํฅ์ค๊ณ ๋ฐฉ์์ ์ฅ์
- ์ค๊ณ๊ฐ ์ดํด, ์ ์ง๋ณด์ํ๊ธฐ ์ฝ๋ค.
- ๋ชจ๋ ์ผ์ ํ๋ ํ๋์ ํฐ ํด๋์ค ๋์ ์ ์ ๊ฐฏ์์ ์ฑ ์์ ๊ฐ๋ ๋ค์์ ์์ ํด๋์ค๋ค๋ก ์ด๋ค์ง๋ค.
- ํ
์คํธํ๊ธฐ ์ฝ๋ค.
- ๊ฐ ํด๋์ค๋ค์ ๋ ๋ฆฝ์ ์ผ๋ก ํ ์คํธ ๊ฐ๋ฅํ๊ณ ๋ ๋ฆฝ์ ์ผ๋ก ํ ์คํธ๋์ด์ผ ํ๋ค.
- ํ์ฅํ๊ธฐ ์ฝ๋ค.
- strategy pattern, template pattern ๋ฑ๊ณผ ๊ฐ์ด ์ค์ ์ฝ๋๋ฅผ ์์ ํ์ง ์๊ณ ์ปดํฌ๋ํธ๋ฅผ ํ์ฅํ ์ ์๋ ์ ์๋ ค์ง ๋์์ธ ํจํด์ ์ฌ์ฉํ ์ ์๋ค.
Domain Model Pattern์ ์ ๋์ํ์ง๋ง ๋ช๊ฐ์ง ๋ฌธ์ ๋ฅผ ๊ฐ๋๋ค. ํนํ MSA์์...
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ์ธ๊ธํ๊ธฐ ์ํด DDD๋ก ์๋ ค์ง OOD์ ์ ์ (refinement)๋ฅผ ์ฌ์ฉํด์ผ๋ง ํ๋ค.
DDD๋ OOD์ ์ ์ ๋ก์จ ๋ณต์กํ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋น์ฆ๋์ค ๋ก์ง์ ๊ฐ๋ฐํ๋ ์ ๊ทผ๋ฒ์ด๋ค. DDD์ Subdomain์ ์ดํ๋ฆฌ์ผ์ด์ ์ ์๋น์ค๋ค๋ก ๋ถํดํ๋๋ฐ ์ ์ฉํ ๊ฐ๋ ์ด๋ค. DDD์์ ๊ฐ ์๋น์ค๋ ์์ ๋ง์ ๋๋ฉ์ธ ๋ชจ๋ธ์ ๊ฐ๋๋ค. ์ด๋ก ์ธํด ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ ๊ฑธ์ณ ๋จ์ผ ๋๋ฉ์ธ ๋ชจ๋ธ์ ๊ฐ์ง์ผ๋ก์จ ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ์ ๊ฑฐํ๋ค. Subdomain๊ณผ ๊ด๋ จ๋ ๊ฐ๋ ์ธ Bounded Context๋ DDD์ 2๊ฐ์ Strategic Pattern์ด๋ค.
DDD๋ ๋๋ฉ์ธ ๋ชจ๋ธ์ ๋น๋ฉ๋ธ๋ก(building block)์ธ Tactical Pattern๋ ๊ฐ๋๋ค.
- Entity
- Value Object
- Factory
- Repository
- Service
๋ฑ์ด ์กด์ฌํ๋ค.
food2go๋ผ๋ ์์ ๋ฐฐ๋ฌ ์ดํ๋ฆฌ์ผ์ด์ ์ ์๋ก ๋ค๋ฉด ์๋์ ๊ฐ์ ๋ชจ๋ธ๋ก ํํํ ์ ์๋ค.
์ผ๋ฐ์ ์ธ ๋๋ฉ์ธ ๋ชจ๋ธ์์ ๊ฐ ์ ๋ฌด ๊ฐ์ฒด(business object)์ ๋ช ์์ ๊ฒฝ๊ณ(explicit boundary)๊ฐ ์๊ณ , ๊ฒฝ๊ณ๊ฐ ์๋ ๊ฒ์ ๊ฐ๋ ๋ฌธ์ ๋ฅผ ์ผ์ผํจ๋ค. ํนํ MSA์์...
Order๋ฅผ loadํ๋ ์คํผ๋ ์ด์ ์ ๊ตฌํํ๊ณ ์ ํ๋ค. ์ด๊ฒ ์๋ฏธํ๋ ๊ฒ์ด ์ ํํ ๋ฌด์์ผ๊น ? Order ๊ฐ์ฒด๋ฅผ loadํ ์๋ ์๋ค. ํ์ง๋ง ํ์ค์ Order๋ฅผ loadํ๋ ๊ฒ์ ๋จ์ํ Order ์์ฒด๋ง์ loadํ๋ ๊ฒ์ผ๋ก๋ ๋ถ์กฑํ๋ค. OrderLineItem, PaymentInfo, DeliveryInfo ๋ฑ๋ ์กด์ฌํ๋ค. ๋๋ฉ์ธ ๊ฐ์ฒด์ ๊ฒฝ๊ณ์ ๋ํ ์ ์๊ฐ ๊ฐ๋ฐ์์ ์ง๊ฐ์ ๋จ๊ฒจ์ก๋ค. ๋ช ์์ ๊ฒฝ๊ณ์ ๋ถ์ฌ๋ ๊ฐ๋ ์ ๋ชจํธํจ ์ธ์๋ ๋น์ฆ๋์ค ๊ฐ์ฒด๋ฅผ ๊ฐฑ์ ํ ๋๋ ๋ฌธ์ ๋ฅผ ์ผ์ผํจ๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋น์ฆ๋์ค ๊ฐ์ฒด๋ ํญ์ ์ง์ผ์ผ๋ง ํ๋ ์ ๋ฌด ๊ท์น์ธ ๋ถ๋ณ๋ฅ (invariants)์ ๊ฐ๋๋ค. ์. ์ต์ ์ฃผ๋ฌธ์ก.