ํผ๋๋ก ๋์๊ฐ๊ธฐ
Dev.toBackend
์๋ฌธ ์ฝ๊ธฐ
Event-driven ์ํคํ ์ฒ์ ๋ฐ์ดํฐ ์ ํฉ์ฑ ๋ณด์ฅ ๋ฐ Structured Concurrency ํจ๋ฌ๋ค์ ์ ํ
๐ฅ Tech Talks Weekly #105
AI ์์ฝ
Context
Fintech ๋ฐ Healthcare ๋ฑ ๊ท์ ์ฐ์ ๋ด Cloud-native ํ๊ฒฝ์์ Event loss ๋๋ ์ค๋ณต ๋ฐ์์ ๋ฐ๋ฅธ ๋ฐ์ดํฐ ๋ถ์ผ์น ๋ฆฌ์คํฌ ์กด์ฌ. ๊ธฐ์กด ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ์ ๋ณต์กํ ๋ฆฌ์์ค ๋์์ ํ๋ก์ธ์ค ๊ด๋ฆฌ ํ๊ณ๋ก ์ธํ ์์คํ ๋ถ์์ ์ฑ ์ฌํ.
Technical Solution
- Inbox ๋ฐ Outbox ํจํด ๋์ ์ ํตํ Event ์ค๋ณต ๋ฐฉ์ง ๋ฐ ์์์ ๋ฉ์์ง ๋ฐํ ๋ณด์ฅ
- Lean Events์ Fat Events์ ๊ตฌ๋ถ ๋ฐ Command์ Event์ ๋ช ํํ ๋ถ๋ฆฌ๋ฅผ ํตํ ๋๋ฉ์ธ ๊ฒฝ๊ณ ์ ์ด
- Event Sourcing ์์ด๋ ์ ํฉ์ฑ์ ์ ์งํ๋ ๊ฐ๋ฒผ์ด ์ํ ๊ด๋ฆฌ ๊ตฌ์กฐ ์ค๊ณ
- Structured Concurrency ๋์ ์ผ๋ก Task์ ์์, ์ข ๋ฃ, Scope๋ฅผ ๋ช ์ํ์ฌ ๊ณ์ธต์ ๊ตฌ์กฐ ํ์ฑ
- Task ์คํจ ์ ์ฐ๊ด๋ ๋ชจ๋ ํ์ Task๋ฅผ ์๋์ผ๋ก ์ ๋ฆฌํ๋ Graceful Cancellation ๋ฉ์ปค๋์ฆ ๊ตฌํ
- Event Contract ์ ์๋ฅผ ํตํ ๋๋ฉ์ธ ๊ฐ ์ธํฐํ์ด์ค ์ผ๊ด์ฑ ์ ์ง ๋ฐ ์์ ๋ณด์ฅ ์ ๋ต ์๋ฆฝ
์ค์ฒ ํฌ์ธํธ
- ๋ถ์ฐ ์์คํ ๋ด ๋ฉ์์ง ๋ฐํ ์ Outbox ํจํด์ ํตํ DB ํธ๋์ญ์ ๊ณผ ๋ฉ์์ง ํ์ ์์์ฑ ํ๋ณด ์ฌ๋ถ ๊ฒํ - ๋น๋๊ธฐ Task ์ค๊ณ ์ Structured Concurrency๋ฅผ ์ ์ฉํ์ฌ ๋ฆฌ์์ค ๋์ ๋ฐฉ์ง ๋ฐ ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ ์ฒด๊ณ ๊ตฌ์ถ - Event-driven ์ค๊ณ ์ ๋จ์ ๋ฐ์ดํฐ ์ ๋ฌ(Event)๊ณผ ์ํ ๋ณ๊ฒฝ ์์ฒญ(Command)์ ์ญํ ๋ถ๋ฆฌ ์ ์ฉ