๋ง์ดํฌ๋ก์๋น์ค์์ ๋ถ์ฐ ํธ๋์ญ์ ์ ๊ด๋ฆฌํ๊ธฐ ์ํ ํ์ ์ํคํ ์ฒ์ธ Saga ํจํด์ ์ดํด๋ณด์ธ์. ๋ณต์๋ ฅ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถ์ ์ํ ์ ํ, ์ด์ , ๊ณผ์ ๋ฐ ๊ตฌํ ์ ๋ต์ ์์๋ณด์ธ์.
Saga ํจํด: ๋ถ์ฐ ํธ๋์ญ์ ์กฐ์ ์ ์ํ ๊ฐ์ด๋
ํ๋ ์ํํธ์จ์ด ์ํคํ ์ฒ, ํนํ ๋ง์ดํฌ๋ก์๋น์ค์ ๋ถ์๊ณผ ํจ๊ป ์ฌ๋ฌ ์๋น์ค์์ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ๊ด๋ฆฌํ๋ ๊ฒ์ ์ค์ํ ๊ณผ์ ๊ฐ ๋์์ต๋๋ค. ๋จ์ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด์์ ์ ์๋ํ๋ ๊ธฐ์กด ACID(์์์ฑ, ์ผ๊ด์ฑ, ๊ฒฉ๋ฆฌ, ์ง์์ฑ) ํธ๋์ญ์ ์ ๋ถ์ฐ ํ๊ฒฝ์์๋ ์ข ์ข ๋ถ์กฑํฉ๋๋ค. Saga ํจํด์ ๋ฐ์ดํฐ ์ผ๊ด์ฑ๊ณผ ๋ณต์๋ ฅ์ ๋ณด์ฅํ๋ฉด์ ์ฌ๋ฌ ์๋น์ค์์ ํธ๋์ญ์ ์ ์กฐ์ ํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ์๋ฃจ์ ์ผ๋ก ๋ถ์ํ์ต๋๋ค.
Saga ํจํด์ด๋ ๋ฌด์์ธ๊ฐ์?
Saga ํจํด์ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ์์ ๋ถ์ฐ ํธ๋์ญ์ ์ ๊ด๋ฆฌํ๋ ๋ฐ ๋์์ด ๋๋ ์ค๊ณ ํจํด์ ๋๋ค. ๋จ์ผ์ ๋๊ท๋ชจ ACID ํธ๋์ญ์ ์ ์์กดํ๋ ๋์ Saga๋ ๋น์ฆ๋์ค ํธ๋์ญ์ ์ ๋ ์๊ณ ๋ก์ปฌ ํธ๋์ญ์ ์ ์ํ์ค๋ก ๋๋๋๋ค. ๊ฐ ๋ก์ปฌ ํธ๋์ญ์ ์ ๋จ์ผ ์๋น์ค ๋ด์์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํธํ ๋ค์ ์ํ์ค์์ ๋ค์ ํธ๋์ญ์ ์ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค. ๋ก์ปฌ ํธ๋์ญ์ ์ค ํ๋๋ผ๋ ์คํจํ๋ฉด Saga๋ ์ด์ ํธ๋์ญ์ ์ ์ํฅ์ ์คํ ์ทจ์ํ๊ธฐ ์ํด ์ผ๋ จ์ ๋ณด์ ํธ๋์ญ์ ์ ์คํํ์ฌ ์์คํ ์ ์ฒด์์ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ๋ณด์ฅํฉ๋๋ค.
์ผ๋ จ์ ๋๋ฏธ๋ ธ์ ๊ฐ์ต๋๋ค. ๊ฐ ๋๋ฏธ๋ ธ๋ ํน์ ๋ง์ดํฌ๋ก์๋น์ค ๋ด์ ๋ก์ปฌ ํธ๋์ญ์ ์ ๋ํ๋ ๋๋ค. ํ๋์ ๋๋ฏธ๋ ธ๊ฐ ์ฐ๋ฌ์ง๋ฉด(ํธ๋์ญ์ ์๋ฃ) ๋ค์ ๋๋ฏธ๋ ธ๋ฅผ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค. ๋๋ฏธ๋ ธ๊ฐ ์ฐ๋ฌ์ง์ง ์์ผ๋ฉด(ํธ๋์ญ์ ์คํจ) ์ด๋ฏธ ์ฐ๋ฌ์ง ๋๋ฏธ๋ ธ๋ฅผ ์กฐ์ฌ์ค๋ฝ๊ฒ ๋ค์ ๋ฐ์ด ์ฌ๋ ค์ผ ํฉ๋๋ค(๋ณด์ ํธ๋์ญ์ ).
Saga ํจํด์ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์?
๋ค์์ Saga ํจํด์ด ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ์ ํ์์ ์ธ ์ด์ ์ ๋๋ค.
- ๋ถ์ฐ ํธ๋์ญ์ : ๋ณต์กํ๊ณ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์ ๋ฐํ ์ ์๋ ๋ถ์ฐ 2๋จ๊ณ ์ปค๋ฐ(2PC) ํ๋กํ ์ฝ์ ์์กดํ์ง ์๊ณ ์ฌ๋ฌ ์๋น์ค์ ๊ฑธ์ณ ์๋ ํธ๋์ญ์ ์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
- ์ต์ข ์ผ๊ด์ฑ: ์๋น์ค ๊ฐ์ ์ต์ข ์ผ๊ด์ฑ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ๋ฐ์ดํฐ๊ฐ ๋ชจ๋ ์๋น์ค์์ ์ฆ์ ์ผ์นํ์ง ์์ ์ ์์ง๋ง ๊ฒฐ๊ตญ ์ผ๊ด๋ ์ํ์ ๋๋ฌํฉ๋๋ค.
- ๋ด๊ฒฐํจ์ฑ: ๋ณด์ ํธ๋์ญ์ ์ ๊ตฌํํจ์ผ๋ก์จ Saga ํจํด์ ๋ด๊ฒฐํจ์ฑ์ ํฅ์์ํต๋๋ค. ์๋น์ค๊ฐ ์คํจํ๋ฉด ์์คํ ์ ์ด์ ํธ๋์ญ์ ์์ ๋ณ๊ฒฝ ์ฌํญ์ ์คํ ์ทจ์ํ์ฌ ์ ์์ ์ผ๋ก ๋ณต๊ตฌํ ์ ์์ต๋๋ค.
- ๋ถ๋ฆฌ: ์๋น์ค ๊ฐ์ ๋์จํ ๊ฒฐํฉ์ ์ด์งํฉ๋๋ค. ๊ฐ ์๋น์ค๋ ์์ฒด ๋ก์ปฌ ํธ๋์ญ์ ์ ๋ด๋นํ์ฌ ์๋น์ค ๊ฐ์ ์ข ์์ฑ์ ์ค์ ๋๋ค.
- ํ์ฅ์ฑ: ๊ฐ ์๋น์ค๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ํ์ฅํ ์ ์๋๋ก ํ์ฌ ํ์ฅ์ฑ์ ์ง์ํฉ๋๋ค.
Saga ํจํด ์ ํ
Saga ํจํด์ ๊ตฌํํ๋ ๋ ๊ฐ์ง ์ฃผ์ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
1. ์ฝ๋ ์ค๊ทธ๋ํผ ๊ธฐ๋ฐ Saga
์ฝ๋ ์ค๊ทธ๋ํผ ๊ธฐ๋ฐ Saga์์ ๊ฐ ์๋น์ค๋ ๋ค๋ฅธ ์๋น์ค์์ ๊ฒ์ํ ์ด๋ฒคํธ๋ฅผ ์์ ๋๊ธฐํ๊ณ ํด๋น ์ด๋ฒคํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์กฐ์น๋ฅผ ์ทจํ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. Saga๋ฅผ ๊ด๋ฆฌํ๋ ์ค์ ์ค์ผ์คํธ๋ ์ดํฐ๊ฐ ์์ต๋๋ค. ๋์ , ๊ฐ ์๋น์ค๋ ์ด๋ฒคํธ์ ๋ฐ์ํ๊ณ ์ ์ด๋ฒคํธ๋ฅผ ๊ฒ์ํ์ฌ Saga์ ์ฐธ์ฌํฉ๋๋ค.
์๋ ๋ฐฉ์:
- ์์ ์๋น์ค๋ ๋ก์ปฌ ํธ๋์ญ์ ์ ์ํํ๊ณ ์ด๋ฒคํธ๋ฅผ ๊ฒ์ํ์ฌ Saga๋ฅผ ์์ํฉ๋๋ค.
- ๋ค๋ฅธ ์๋น์ค๋ ์ด ์ด๋ฒคํธ๋ฅผ ๊ตฌ๋ ํ๊ณ ์ด๋ฅผ ์์ ํ๋ฉด ๋ก์ปฌ ํธ๋์ญ์ ์ ์ํํ๊ณ ์ ์ด๋ฒคํธ๋ฅผ ๊ฒ์ํฉ๋๋ค.
- ํธ๋์ญ์ ์ด ์คํจํ๋ฉด ํด๋น ์๋น์ค๊ฐ ๋ณด์ ์ด๋ฒคํธ๋ฅผ ๊ฒ์ํฉ๋๋ค.
- ๋ค๋ฅธ ์๋น์ค๋ ๋ณด์ ์ด๋ฒคํธ๋ฅผ ์์ ๋๊ธฐํ๊ณ ์ด์ ์์ ์ ์คํ ์ทจ์ํ๊ธฐ ์ํด ๋ณด์ ํธ๋์ญ์ ์ ์คํํฉ๋๋ค.
์์:
์ฃผ๋ฌธ ์๋น์ค, ๊ฒฐ์ ์๋น์ค ๋ฐ ์ฌ๊ณ ์๋น์ค์ ์ธ ๊ฐ์ง ์๋น์ค๊ฐ ๊ด๋ จ๋ ์ ์ ์๊ฑฐ๋ ์ฃผ๋ฌธ ์ฒ๋ฆฌ ํ๋ก์ธ์ค๋ฅผ ๊ณ ๋ คํ์ญ์์ค.
- ์ฃผ๋ฌธ ์๋น์ค: ์ ์ฃผ๋ฌธ์ ์์ ํ๊ณ `OrderCreated` ์ด๋ฒคํธ๋ฅผ ๊ฒ์ํฉ๋๋ค.
- ๊ฒฐ์ ์๋น์ค: `OrderCreated`๋ฅผ ๊ตฌ๋ ํ๊ณ ๊ฒฐ์ ๋ฅผ ์ฒ๋ฆฌํ๊ณ `PaymentProcessed` ์ด๋ฒคํธ๋ฅผ ๊ฒ์ํฉ๋๋ค.
- ์ฌ๊ณ ์๋น์ค: `PaymentProcessed`๋ฅผ ๊ตฌ๋ ํ๊ณ ์ฌ๊ณ ๋ฅผ ์์ฝํ๊ณ `InventoryReserved` ์ด๋ฒคํธ๋ฅผ ๊ฒ์ํฉ๋๋ค.
- ์ฌ๊ณ ์๋น์ค๊ฐ ์ฌ๊ณ ๋ฅผ ์์ฝํ์ง ๋ชปํ๋ฉด `InventoryReservationFailed` ์ด๋ฒคํธ๋ฅผ ๊ฒ์ํฉ๋๋ค.
- ๊ฒฐ์ ์๋น์ค: `InventoryReservationFailed`๋ฅผ ๊ตฌ๋ ํ๊ณ ๊ฒฐ์ ๋ฅผ ํ๋ถํ๊ณ `PaymentRefunded` ์ด๋ฒคํธ๋ฅผ ๊ฒ์ํฉ๋๋ค.
- ์ฃผ๋ฌธ ์๋น์ค: `PaymentRefunded`๋ฅผ ๊ตฌ๋ ํ๊ณ ์ฃผ๋ฌธ์ ์ทจ์ํฉ๋๋ค.
์ฅ์ :
- ๋จ์์ฑ: ์ฐธ๊ฐ์๊ฐ ๊ฑฐ์ ์๋ ๋จ์ํ Saga๋ฅผ ์ฝ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค.
- ๋์จํ ๊ฒฐํฉ: ์๋น์ค๋ ๋์จํ๊ฒ ๊ฒฐํฉ๋์ด ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐ์ ํ ์ ์์ต๋๋ค.
๋จ์ :
- ๋ณต์ก์ฑ: ์ฐธ๊ฐ์๊ฐ ๋ง์ ๋ณต์กํ Saga๋ฅผ ๊ด๋ฆฌํ๊ธฐ๊ฐ ์ด๋ ค์์ง๋๋ค.
- ์ถ์ : Saga์ ์งํ ์ํฉ์ ์ถ์ ํ๊ณ ๋ฌธ์ ๋ฅผ ๋๋ฒ๊ทธํ๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค.
- ์ํ ์ข ์์ฑ: ์๋น์ค ๊ฐ์ ์ํ ์ข ์์ฑ์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
2. ์ค์ผ์คํธ๋ ์ด์ ๊ธฐ๋ฐ Saga
์ค์ผ์คํธ๋ ์ด์ ๊ธฐ๋ฐ Saga์์ ์ค์ ์ค์ผ์คํธ๋ ์ดํฐ ์๋น์ค๋ Saga์ ์คํ์ ๊ด๋ฆฌํฉ๋๋ค. ์ค์ผ์คํธ๋ ์ดํฐ ์๋น์ค๋ ๊ฐ ์๋น์ค์ ๋ก์ปฌ ํธ๋์ญ์ ์ ์ํํด์ผ ํ ์๊ธฐ์ ํ์ํ ๊ฒฝ์ฐ ๋ณด์ ํธ๋์ญ์ ์ ์คํํด์ผ ํ ์๊ธฐ๋ฅผ ์๋ ค์ค๋๋ค.
์๋ ๋ฐฉ์:
- ์ค์ผ์คํธ๋ ์ดํฐ ์๋น์ค๋ Saga๋ฅผ ์์ํ๋ผ๋ ์์ฒญ์ ๋ฐ์ต๋๋ค.
- ๊ฐ ์๋น์ค์ ๋ก์ปฌ ํธ๋์ญ์ ์ ์ํํ๋๋ก ๋ช ๋ น์ ๋ณด๋ ๋๋ค.
- ์ค์ผ์คํธ๋ ์ดํฐ๋ ๊ฐ ํธ๋์ญ์ ์ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ๋ํฐ๋งํฉ๋๋ค.
- ๋ชจ๋ ํธ๋์ญ์ ์ด ์ฑ๊ณตํ๋ฉด Saga๊ฐ ์๋ฃ๋ฉ๋๋ค.
- ํธ๋์ญ์ ์ด ์คํจํ๋ฉด ์ค์ผ์คํธ๋ ์ดํฐ๋ ์ด์ ํธ๋์ญ์ ์ ์ํฅ์ ์คํ ์ทจ์ํ๊ธฐ ์ํด ์ ์ ํ ์๋น์ค์ ๋ณด์ ๋ช ๋ น์ ๋ณด๋ ๋๋ค.
์์:
๋์ผํ ์ ์ ์๊ฑฐ๋ ์ฃผ๋ฌธ ์ฒ๋ฆฌ ํ๋ก์ธ์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ค์ผ์คํธ๋ ์ดํฐ ์๋น์ค(Saga Orchestrator)๊ฐ ๋จ๊ณ๋ฅผ ์กฐ์ ํฉ๋๋ค.
- Saga Orchestrator: ์ ์ฃผ๋ฌธ ์์ฒญ์ ๋ฐ์ต๋๋ค.
- Saga Orchestrator: `ProcessOrder` ๋ช ๋ น์ ์ฃผ๋ฌธ ์๋น์ค๋ก ๋ณด๋ ๋๋ค.
- ์ฃผ๋ฌธ ์๋น์ค: ์ฃผ๋ฌธ์ ์ฒ๋ฆฌํ๊ณ ์ฑ๊ณต ๋๋ ์คํจ๋ฅผ Saga Orchestrator์ ์๋ฆฝ๋๋ค.
- Saga Orchestrator: `ProcessPayment` ๋ช ๋ น์ ๊ฒฐ์ ์๋น์ค๋ก ๋ณด๋ ๋๋ค.
- ๊ฒฐ์ ์๋น์ค: ๊ฒฐ์ ๋ฅผ ์ฒ๋ฆฌํ๊ณ ์ฑ๊ณต ๋๋ ์คํจ๋ฅผ Saga Orchestrator์ ์๋ฆฝ๋๋ค.
- Saga Orchestrator: `ReserveInventory` ๋ช ๋ น์ ์ฌ๊ณ ์๋น์ค๋ก ๋ณด๋ ๋๋ค.
- ์ฌ๊ณ ์๋น์ค: ์ฌ๊ณ ๋ฅผ ์์ฝํ๊ณ ์ฑ๊ณต ๋๋ ์คํจ๋ฅผ Saga Orchestrator์ ์๋ฆฝ๋๋ค.
- ์ฌ๊ณ ์๋น์ค๊ฐ ์คํจํ๋ฉด Saga Orchestrator์ ์๋ฆฝ๋๋ค.
- Saga Orchestrator: `RefundPayment` ๋ช ๋ น์ ๊ฒฐ์ ์๋น์ค๋ก ๋ณด๋ ๋๋ค.
- ๊ฒฐ์ ์๋น์ค: ๊ฒฐ์ ๋ฅผ ํ๋ถํ๊ณ Saga Orchestrator์ ์๋ฆฝ๋๋ค.
- Saga Orchestrator: `CancelOrder` ๋ช ๋ น์ ์ฃผ๋ฌธ ์๋น์ค๋ก ๋ณด๋ ๋๋ค.
- ์ฃผ๋ฌธ ์๋น์ค: ์ฃผ๋ฌธ์ ์ทจ์ํ๊ณ Saga Orchestrator์ ์๋ฆฝ๋๋ค.
์ฅ์ :
- ์ค์ ์ง์ค์ ๊ด๋ฆฌ: ์ฐธ๊ฐ์๊ฐ ๋ง์ ๋ณต์กํ Saga๋ฅผ ๋ ์ฝ๊ฒ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
- ๊ฐ์ ๋ ์ถ์ : Saga์ ์งํ ์ํฉ์ ์ถ์ ํ๊ณ ๋ฌธ์ ๋ฅผ ๋๋ฒ๊ทธํ๊ธฐ๊ฐ ๋ ์ฝ์ต๋๋ค.
- ์ข ์์ฑ ๊ฐ์: ์๋น์ค ๊ฐ์ ์ํ ์ข ์์ฑ์ ์ค์ ๋๋ค.
๋จ์ :
- ๋ณต์ก์ฑ ์ฆ๊ฐ: ์ค์ ์ค์ผ์คํธ๋ ์ดํฐ ์๋น์ค๊ฐ ํ์ํ๋ฏ๋ก ์ํคํ ์ฒ์ ๋ณต์ก์ฑ์ด ์ถ๊ฐ๋ฉ๋๋ค.
- ๋จ์ผ ์คํจ ์ง์ : ์ค์ผ์คํธ๋ ์ดํฐ ์๋น์ค๊ฐ ๋จ์ผ ์คํจ ์ง์ ์ด ๋ ์ ์์ต๋๋ค.
์ฝ๋ ์ค๊ทธ๋ํผ์ ์ค์ผ์คํธ๋ ์ด์ ์ค์์ ์ ํํ๊ธฐ
์ฝ๋ ์ค๊ทธ๋ํผ์ ์ค์ผ์คํธ๋ ์ด์ ์ค์์ ์ ํํ๋ ๊ฒ์ Saga์ ๋ณต์ก์ฑ๊ณผ ์ฐธ์ฌ ์๋น์ค ์์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. ๋ค์์ ์ผ๋ฐ์ ์ธ ์ง์นจ์ ๋๋ค.
- ์ฝ๋ ์ค๊ทธ๋ํผ: ์๋น์ค๊ฐ ๋น๊ต์ ๋ ๋ฆฝ์ ์ธ ์ฐธ๊ฐ์๊ฐ ์ ์ ๋จ์ํ Saga์ ์ ํฉํฉ๋๋ค. ๊ธฐ๋ณธ ๊ณ์ ์์ฑ ๋๋ ๊ฐ๋จํ ์ ์ ์๊ฑฐ๋ ๊ฑฐ๋์ ๊ฐ์ ์๋๋ฆฌ์ค์ ์ ํฉํฉ๋๋ค.
- ์ค์ผ์คํธ๋ ์ด์ : ์ฐธ๊ฐ์๊ฐ ๋ง๊ฑฐ๋ Saga ์คํ์ ๋ํ ์ค์ ์ง์ค์ ์ ์ด ๋ฐ ๊ฐ์์ฑ์ด ํ์ํ ๊ฒฝ์ฐ ๋ณต์กํ Saga์ ์ ํฉํฉ๋๋ค. ๋ณต์กํ ๊ธ์ต ๊ฑฐ๋, ๊ณต๊ธ๋ง ๊ด๋ฆฌ ๋๋ ๋ณต์กํ ์ข ์์ฑ ๋ฐ ๋กค๋ฐฑ ์๊ตฌ ์ฌํญ์ด ์๋ ๋ชจ๋ ํ๋ก์ธ์ค์ ์ด์์ ์ ๋๋ค.
Saga ํจํด ๊ตฌํ
Saga ํจํด์ ๊ตฌํํ๋ ค๋ฉด ์ ์คํ ๊ณํ๊ณผ ์ฌ๋ฌ ์์๋ฅผ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
1. Saga ๋จ๊ณ ์ ์
Saga๋ฅผ ๊ตฌ์ฑํ๋ ๊ฐ๋ณ ๋ก์ปฌ ํธ๋์ญ์ ์ ์๋ณํฉ๋๋ค. ๊ฐ ํธ๋์ญ์ ์ ๋ํด ๋ค์์ ์ ์ํฉ๋๋ค.
- ์๋น์ค: ํธ๋์ญ์ ์ ์ํํ๋ ์๋น์ค์ ๋๋ค.
- ์์ : ํธ๋์ญ์ ์์ ์ํํ ์์ ์ ๋๋ค.
- ๋ฐ์ดํฐ: ํธ๋์ญ์ ์ ์ํํ๋ ๋ฐ ํ์ํ ๋ฐ์ดํฐ์ ๋๋ค.
- ๋ณด์ ์์ : ํธ๋์ญ์ ์ ์ํฅ์ ์คํ ์ทจ์ํ๊ธฐ ์ํด ์ํํ ์์ ์ ๋๋ค.
2. ๊ตฌํ ์ ๊ทผ ๋ฐฉ์ ์ ํ
์ฝ๋ ์ค๊ทธ๋ํผ๋ฅผ ์ฌ์ฉํ ์ง ๋๋ ์ค์ผ์คํธ๋ ์ด์ ์ ์ฌ์ฉํ ์ง ๊ฒฐ์ ํฉ๋๋ค. Saga์ ๋ณต์ก์ฑ๊ณผ ์ค์ ์ง์ค์ ์ ์ด์ ๋ถ์ฐ๋ ์ฑ ์ ๊ฐ์ ํธ๋ ์ด๋ ์คํ๋ฅผ ๊ณ ๋ คํฉ๋๋ค.
3. ๋ณด์ ํธ๋์ญ์ ๊ตฌํ
๊ฐ ๋ก์ปฌ ํธ๋์ญ์ ์ ๋ํ ๋ณด์ ํธ๋์ญ์ ์ ๊ตฌํํฉ๋๋ค. ๋ณด์ ํธ๋์ญ์ ์ ์๋ ํธ๋์ญ์ ์ ์ํฅ์ ์คํ ์ทจ์ํ๊ณ ์์คํ ์ ์ผ๊ด๋ ์ํ๋ก ๋ณต์ํด์ผ ํฉ๋๋ค.
๋ณด์ ํธ๋์ญ์ ์ ๋ํ ์ค์ํ ๊ณ ๋ ค ์ฌํญ:
- ๋ฉฑ๋ฑ์ฑ: ๋ณด์ ํธ๋์ญ์ ์ ๋ฉฑ๋ฑ์ฑํด์ผ ํฉ๋๋ค. ์ฆ, ์๋ํ์ง ์์ ๋ถ์์ฉ์ ์ผ์ผํค์ง ์๊ณ ์ฌ๋ฌ ๋ฒ ์คํํ ์ ์์ต๋๋ค. ๋ณด์ ํธ๋์ญ์ ์ด ์ฒ์์ ์คํจํ๋ฉด ๋ค์ ์๋ํ ์ ์์ผ๋ฏ๋ก ๋งค์ฐ ์ค์ํฉ๋๋ค.
- ์์์ฑ: ์ด์์ ์ผ๋ก๋ ๋ณด์ ํธ๋์ญ์ ์ด ์์์ ์ด์ด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ถ์ฐ ํ๊ฒฝ์์ ์ง์ ํ ์์์ฑ์ ๋ฌ์ฑํ๋ ๊ฒ์ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ์์์ฑ์ ์ต์ ์ ๋คํ์ญ์์ค.
- ์ง์์ฑ: ์๋น์ค๊ฐ ์ถฉ๋ํ๋๋ผ๋ ๋ณด์ ํธ๋์ญ์ ์ ํจ๊ณผ๊ฐ ์ง์๋๋๋ก ํฉ๋๋ค.
4. ์คํจ ๋ฐ ์ฌ์๋ ์ฒ๋ฆฌ
์คํจ๋ฅผ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํด ๊ฐ๋ ฅํ ์ค๋ฅ ์ฒ๋ฆฌ ๋ฐ ์ฌ์๋ ๋ฉ์ปค๋์ฆ์ ๊ตฌํํฉ๋๋ค. ๋ค์๊ณผ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค.
- ์ง์ ๋ฐฑ์คํ: ์์คํ ๊ณผ๋ถํ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ง์ฐ ์๊ฐ์ ๋๋ ค ์คํจํ ํธ๋์ญ์ ์ ๋ค์ ์๋ํฉ๋๋ค.
- ํ๋ก ์ฐจ๋จ๊ธฐ: ์คํจํ๋ ์๋น์ค๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ํธ์ถํ์ฌ ์ฐ์ ์คํจ๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
- ๋ฐ๋ ๋ ํฐ ํ: ์คํจํ ๋ฉ์์ง๋ฅผ ๋์ค์ ๋ถ์ํ๊ณ ์ฌ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋ฐ๋ ๋ ํฐ ํ๋ก ๋ณด๋ ๋๋ค.
5. ๋ฉฑ๋ฑ์ฑ ๋ณด์ฅ
๋ชจ๋ ๋ก์ปฌ ํธ๋์ญ์ ๊ณผ ๋ณด์ ํธ๋์ญ์ ์ด ๋ฉฑ๋ฑ์ฑ์์ ํ์ธํฉ๋๋ค. ์ด๋ ์ฌ์๋๋ฅผ ์ฒ๋ฆฌํ๊ณ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค.
6. Saga ๋ชจ๋ํฐ๋ง ๋ฐ ์ถ์
Saga์ ์งํ ์ํฉ์ ์ถ์ ํ๊ณ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ์๋ณํ๊ธฐ ์ํด ๋ชจ๋ํฐ๋ง ๋ฐ ์ถ์ ์ ๊ตฌํํฉ๋๋ค. ์ฌ๋ฌ ์๋น์ค์์ ์ด๋ฒคํธ๋ฅผ ์ฐ๊ด์ํค๊ธฐ ์ํด ๋ถ์ฐ ์ถ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
Saga ํจํด ๊ตฌํ ๊ธฐ์
Saga ํจํด์ ๊ตฌํํ๋ ๋ฐ ๋์์ด ๋๋ ๋ช ๊ฐ์ง ๊ธฐ์ ์ด ์์ต๋๋ค.
- ๋ฉ์์ง ํ(RabbitMQ, Kafka): ์๋น์ค ๊ฐ์ ๋น๋๊ธฐ์ ํต์ ์ ์ฉ์ดํ๊ฒ ํ์ฌ ์ด๋ฒคํธ ๊ธฐ๋ฐ Saga๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
- ์ด๋ฒคํธ ์์ฑ: ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ๋ฅผ ์ผ๋ จ์ ์ด๋ฒคํธ๋ก ์ ์งํ์ฌ ์์ ํ ๊ฐ์ฌ ์ถ์ ์ ์ ๊ณตํ๊ณ ๋ณต๊ตฌ ๋ชฉ์ ์ผ๋ก ์ด๋ฒคํธ๋ฅผ ์ฌ์ํ ์ ์๋๋ก ํฉ๋๋ค.
- Saga ์ค์ผ์คํธ๋ ์ด์ ํ๋ ์์ํฌ: Apache Camel, Netflix Conductor ๋ฐ Temporal๊ณผ ๊ฐ์ ํ๋ ์์ํฌ๋ Saga๋ฅผ ๊ตฌ์ถํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํ ๋๊ตฌ์ ์ถ์ํ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ๋์ญ์ ๊ด๋ฆฌ์(๋ก์ปฌ ํธ๋์ญ์ ์ ๊ฒฝ์ฐ): ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค(์: PostgreSQL, MySQL) ๋ฐ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋จ์ผ ์๋น์ค ๋ด์์ ACID ์์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ํธ๋์ญ์ ๊ด๋ฆฌ์๋ฅผ ์ ๊ณตํฉ๋๋ค.
Saga ํจํด ์ฌ์ฉ์ ๊ณผ์
Saga ํจํด์ ์๋นํ ์ด์ ์ ์ ๊ณตํ์ง๋ง ํน์ ๊ณผ์ ๋ ์ ์ํฉ๋๋ค.
- ๋ณต์ก์ฑ: Saga ํจํด์ ๊ตฌํํ๋ ๊ฒ์ ํนํ ๋ณต์กํ ๋น์ฆ๋์ค ํ๋ก์ธ์ค์ ๊ฒฝ์ฐ ๋ณต์กํ ์ ์์ต๋๋ค.
- ์ต์ข ์ผ๊ด์ฑ: ์ต์ข ์ผ๊ด์ฑ์ ์ฒ๋ฆฌํ๋ ค๋ฉด ์ ์ฌ์ ์ธ ๊ฒฝํฉ ์กฐ๊ฑด๊ณผ ๋ฐ์ดํฐ ๋ถ์ผ์น๋ฅผ ์ ์คํ๊ฒ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
- ํ ์คํ : Saga๋ ๋ถ์ฐ๋ ํน์ฑ๊ณผ ์คํจ๋ฅผ ์๋ฎฌ๋ ์ด์ ํด์ผ ํ๋ฏ๋ก ํ ์คํธํ๊ธฐ๊ฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค.
- ๋๋ฒ๊น : Saga๋ฅผ ๋๋ฒ๊น ํ๋ ๊ฒ์ ํนํ ์ค์ ์ค์ผ์คํธ๋ ์ดํฐ๊ฐ ์๋ ์ฝ๋ ์ค๊ทธ๋ํผ ๊ธฐ๋ฐ ๊ตฌํ์์ ์ด๋ ค์ธ ์ ์์ต๋๋ค.
- ๋ฉฑ๋ฑ์ฑ: ํธ๋์ญ์ ๋ฐ ๋ณด์ ํธ๋์ญ์ ์ ๋ฉฑ๋ฑ์ฑ์ ๋ณด์ฅํ๋ ๊ฒ์ ์ค์ํ์ง๋ง ๊ตฌํํ๊ธฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค.
Saga ํจํด ๊ตฌํ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
๋ฌธ์ ๋ฅผ ์ํํ๊ณ Saga ํจํด์ ์ฑ๊ณต์ ์ผ๋ก ๊ตฌํํ๋ ค๋ฉด ๋ค์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ณ ๋ คํ์ญ์์ค.
- ์๊ท๋ชจ๋ก ์์: ๊ฐ๋จํ Saga๋ก ์์ํ์ฌ ๊ฒฝํ์ ์์ผ๋ฉด์ ์ ์ฐจ์ ์ผ๋ก ๋ณต์ก์ฑ์ ๋๋ฆฌ์ญ์์ค.
- ๋ช ํํ ๊ฒฝ๊ณ ์ ์: ๊ฐ ์๋น์ค์ ๊ฒฝ๊ณ๋ฅผ ๋ช ํํ๊ฒ ์ ์ํ๊ณ ๊ฐ ์๋น์ค๊ฐ ์์ฒด ๋ฐ์ดํฐ๋ฅผ ๋ด๋นํ๋๋ก ํฉ๋๋ค.
- ๋๋ฉ์ธ ์ด๋ฒคํธ ์ฌ์ฉ: ๋๋ฉ์ธ ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ์ฌ ์๋น์ค ๊ฐ์ ํต์ ํ๊ณ Saga ๋จ๊ณ๋ฅผ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค.
- ๋ณด์ ํธ๋์ญ์ ์ ์คํ๊ฒ ๊ตฌํ: ๋ณด์ ํธ๋์ญ์ ์ด ๋ฉฑ๋ฑ์ฑ, ์์์ฑ ๋ฐ ์ง์์ฑ์ด ์๋์ง ํ์ธํฉ๋๋ค.
- Saga ๋ชจ๋ํฐ๋ง ๋ฐ ์ถ์ : Saga์ ์งํ ์ํฉ์ ์ถ์ ํ๊ณ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ์๋ณํ๊ธฐ ์ํด ํฌ๊ด์ ์ธ ๋ชจ๋ํฐ๋ง ๋ฐ ์ถ์ ์ ๊ตฌํํฉ๋๋ค.
- ์คํจ๋ฅผ ์ํด ์ค๊ณ: ์คํจ๋ฅผ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์์คํ์ง ์๊ณ ์คํจ์์ ์์คํ ์ ๋ณต๊ตฌํ ์ ์๋๋ก ์์คํ ์ ์ค๊ณํฉ๋๋ค.
- ๋ชจ๋ ๊ฒ ๋ฌธ์ํ: Saga ์ค๊ณ, ๊ตฌํ ๋ฐ ํ ์คํธ ์ ์ฐจ๋ฅผ ์ฒ ์ ํ ๋ฌธ์ํํฉ๋๋ค.
Saga ํจํด์ ์ค์ ์ฌ๋ก
Saga ํจํด์ ๋ค์ํ ์ฐ์ ์์ ๋ณต์กํ ๋น์ฆ๋์ค ํ๋ก์ธ์ค์์ ๋ถ์ฐ ํธ๋์ญ์ ์ ๊ด๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๋ช ๊ฐ์ง ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ ์ ์๊ฑฐ๋: ์ฃผ๋ฌธ ์ฒ๋ฆฌ, ๊ฒฐ์ ์ฒ๋ฆฌ, ์ฌ๊ณ ๊ด๋ฆฌ ๋ฐ ๋ฐฐ์ก. ์๋ฅผ ๋ค์ด ๊ณ ๊ฐ์ด ์ฃผ๋ฌธํ๋ฉด Saga๋ ์ฌ๊ณ ์์ฝ, ๊ฒฐ์ ์ฒ๋ฆฌ ๋ฐ ๋ฐฐ์ก ์์ฑ ํ๋ก์ธ์ค๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. ๋จ๊ณ๊ฐ ์คํจํ๋ฉด(์: ์ฌ๊ณ ๋ถ์กฑ) Saga๋ ์์ฝ๋ ์ฌ๊ณ ๋ฅผ ํด์ ํ๊ณ ๊ฒฐ์ ๋ฅผ ํ๋ถํ์ฌ ๋ณด์ํฉ๋๋ค. ๊ธ๋ก๋ฒ ์ ์ ์๊ฑฐ๋ ๋๊ธฐ์ ์ธ Alibaba๋ ๋ฐฉ๋ํ ๋ง์ผํ๋ ์ด์ค์์ ์ฌ๋ฌ ๋ง์ดํฌ๋ก์๋น์ค์์ ๊ฑฐ๋ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด Saga ํจํด์ ๊ด๋ฒ์ํ๊ฒ ํ์ฉํฉ๋๋ค.
- ๊ธ์ต ์๋น์ค: ์๊ธ ์ด์ฒด, ๋์ถ ์ ์ฒญ ๋ฐ ์ ์ฉ ์นด๋ ๊ฑฐ๋. ๊ตญ๊ฒฝ ๊ฐ ์ก๊ธ์ ๊ณ ๋ คํด ๋ณด์ญ์์ค. Saga๋ ํ ๊ณ์ข์์ ์ฐจ๋ณ, ํตํ ๋ณํ, ๋ค๋ฅธ ๊ณ์ข๋ก์ ์ ๊ธ์ ์กฐ์ ํ ์ ์์ต๋๋ค. ํตํ ๋ณํ์ด ์คํจํ๋ฉด ๋ณด์ ํธ๋์ญ์ ์ด ์ฐจ๋ณ์ ๋ฐ์ ์ํค๊ณ ๋ถ์ผ์น๋ฅผ ๋ฐฉ์งํฉ๋๋ค. ๊ตญ์ ์ก๊ธ์ ์ ๋ฌธ์ผ๋ก ํ๋ ํํ ํฌ ํ์ฌ์ธ TransferWise(ํ์ฌ Wise)๋ Saga ํจํด์ ์ฌ์ฉํ์ฌ ์ ์ธ๊ณ ๋ค์ํ ์ํ ์์คํ ์์ ๊ฑฐ๋์ ์ ๋ขฐ์ฑ๊ณผ ์ผ๊ด์ฑ์ ๋ณด์ฅํฉ๋๋ค.
- ์๋ฃ: ํ์ ๋ฑ๋ก, ์์ฝ ์ผ์ ๋ฐ ์๋ฃ ๊ธฐ๋ก ์ ๋ฐ์ดํธ. ํ์๊ฐ ์ฝ์์ ๋ฑ๋กํ๋ฉด Saga๋ ์ ํ์ ๊ธฐ๋ก์ ์์ฑํ๊ณ ์ฝ์์ ์์ฝํ๊ณ ๊ด๋ จ ์๋ฃ ์ ๊ณต์์๊ฒ ์๋ฆฌ๋ ํ๋ก์ธ์ค๋ฅผ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ์์ฝ ์ผ์ ์ด ์คํจํ๋ฉด ๋ณด์ ํธ๋์ญ์ ์ด ์ฝ์์ ์ ๊ฑฐํ๊ณ ํ์์๊ฒ ์๋ฆฝ๋๋ค.
- ๊ณต๊ธ๋ง ๊ด๋ฆฌ: ์ฃผ๋ฌธ ์ฒ๋ฆฌ, ์ฐฝ๊ณ ๊ด๋ฆฌ ๋ฐ ๋ฐฐ์ก ์ผ์ . ์ฃผ๋ฌธ์ด ์ ์๋๋ฉด Saga๋ ์ฌ๊ณ ์์ฝ, ํญ๋ชฉ ํฌ์ฅ, ๋ฐฐ์ก ์์ฝ ๋ฐ ๊ณ ๊ฐ ์๋ฆผ์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋จ๊ณ ์ค ํ๋๋ผ๋ ์คํจํ๋ฉด ๋ณด์ ์์ ์ ์ฌ์ฉํ์ฌ ์ฃผ๋ฌธ์ ์ทจ์ํ๊ณ , ํญ๋ชฉ์ ์ฌ๊ณ ๋ก ๋ฐํํ๊ณ , ๊ณ ๊ฐ์๊ฒ ์ทจ์์ ๋ํด ์๋ฆด ์ ์์ต๋๋ค.
๊ฒฐ๋ก
Saga ํจํด์ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ์์ ๋ถ์ฐ ํธ๋์ญ์ ์ ๊ด๋ฆฌํ๊ธฐ ์ํ ๊ท์คํ ๋๊ตฌ์ ๋๋ค. ๋น์ฆ๋์ค ํธ๋์ญ์ ์ ์ผ๋ จ์ ๋ก์ปฌ ํธ๋์ญ์ ์ผ๋ก ๋๋๊ณ ๋ณด์ ํธ๋์ญ์ ์ ๊ตฌํํจ์ผ๋ก์จ ๋ถ์ฐ ํ๊ฒฝ์์ ๋ฐ์ดํฐ ์ผ๊ด์ฑ๊ณผ ๋ณต์๋ ฅ์ ๋ณด์ฅํ ์ ์์ต๋๋ค. Saga ํจํด์ ํน์ ๊ณผ์ ๋ฅผ ์ ์ํ์ง๋ง, ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๊ณ ์ ์ ํ ๊ธฐ์ ์ ์ฌ์ฉํ๋ฉด ์ด๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ๊ตฌํํ๊ณ ๊ฐ๋ ฅํ๊ณ ํ์ฅ ๊ฐ๋ฅํ๋ฉฐ ๋ด๊ฒฐํจ์ฑ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
๋ง์ดํฌ๋ก์๋น์ค๊ฐ ์ ์ ๋ ๋๋ฆฌ ๋ณด๊ธ๋จ์ ๋ฐ๋ผ Saga ํจํด์ ๋ณต์กํ ์์คํ ์์ ๋ถ์ฐ ํธ๋์ญ์ ์ ๊ด๋ฆฌํ๊ณ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๋ ๋ฐ ๊ณ์ํด์ ์ค์ํ ์ญํ ์ ํ ๊ฒ์ ๋๋ค. Saga ํจํด์ ์์ฉํ๋ ๊ฒ์ ์ค๋๋ ์ ๋น์ฆ๋์ค ํ๊ฒฝ์ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ ์ ์๋ ํ๋์ ์ด๊ณ ๋ณต์๋ ฅ์ด ๋ฐ์ด๋๋ฉฐ ํ์ฅ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๊ธฐ ์ํ ํต์ฌ ๋จ๊ณ์ ๋๋ค.