[๊ธฐ์ ์ํฐํด ๋ฆฌ๋ทฐ] CodeOpinion - McDonald’s Journey to Event-Driven Architecture
ํด๋น ๊ธ์ ๊ฐ๋ฐ, ๊ธฐ์ ๊ด๋ จ ์ํฐํด์ด๋ ๋ธ๋ก๊ทธ ๊ธ ํน์ ์ ํ๋ธ ์์์ ๋ด์ฉ์ ์ ๋ฆฌํ๊ฑฐ๋ ํ๊ธฐ๋ฅผ ์ ๋ ๊ธ์ ๋๋ค.
๋ฆฌ๋ทฐํ ๊ธ: 'CodeOpnion' ์ 'McDonald’s Journey to Event-Driven Architecture'
์ฃผ์ ์ ๊ฐ๋จ ์์ฝ
- ๋งฅ๋๋ ๋๋ EDA ๋ฅผ ๊ตฌ์ฑํ๊ณ ์๋ค
- AWS ํ๊ฒฝ ์์์ MSK (managed streaming for kafka) ๋ฅผ ์ฌ์ฉํ๋ค
- ๊ธ์ด์ด๋ ๋งฅ๋๋ ๋ ๊ธฐ์ ๋ธ๋ก๊ทธ๋ฅผ ํตํด์ ์ต๋ํ ๋ ธํ์ฐ ๋ช๊ฐ์ง๋ฅผ ์ ๋ฆฌํจ
- Schema Registry
- event ์ schema definition ์ ๊ด๋ฆฌ
- event ๋ ๋จ์ผ ์ง์ค ๊ณต๊ธ์์ผ๋ก์จ ์ด๋ฒคํธ ์คํค๋ง์ ์ฃผ์ธ์ ํ๋์ฌ์ผ ํ๋ค
- ์ด๋ ๊ฒ ํจ์ผ๋ก (data quality issue) ๋ฅผ ํด๊ฒฐ
- producer ์ consumer ๋ schema registry ๋ฅผ ํตํด์ ์ด๋ฒคํธ์ payload ์ version ์ ๊ด๋ฆฌ
- producer ๋ ์ด๋ฒคํธ ์คํค๋ง์ registry ์ ์ปค์คํ SDK ๋ฅผ ํตํด์ ์ ๊ทผํด์ validation
- consumer ๋ ์ญ์ ์ด๋ฒคํธ ์คํค๋ง์ registry ์ ์ปค์คํ sdk ๋ฅผ ํตํด์ ์ ๊ทผํด์ validation
- event ์ schema definition ์ ๊ด๋ฆฌ
- Validation
- ๋ง์ฝ producer ๊ฐ publish ์ ์คํจํ๋ค๋ฉด?
- DLT (dead letter topic) ๋ก ์คํจ๋ ๋ฉ์์ง๋ฅผ ์ ์กํ๋ค
- DLQ ํน์ผ DLT ์ ๋น ์ง ๋ฉ์์ง๋ฅผ ๋ค์ ์ ์ ๋นํด์ ๋ค์ topic ์ ์ ์ publish ํด์ผํจ
- ๋ง์ฝ producer ๊ฐ publish ์ ์คํจํ๋ค๋ฉด?
- Reliable Publishing
- ์ด๋ฒคํธ์ ๋ํ publish ๊ฐ ์คํจํ๋ค๋ฉด dynamoDB ์ ํด๋น ์ด๋ฒคํธ๋ฅผ ์ ์ฅํจ
- ๋๋ค๋ฅผ ์ด์ฉํ์ฌ ์ด๋ฒคํธ ๋ฐํ์ retry ํ ์ ์์
- outbox ํจํด๋ฅผ ์ด์ฉํ๋ ๊ฒ๋ ํ๋์ ๋ฐฉ๋ฒ
- ์ด๋ฒคํธ์ ๋ํ publish ๊ฐ ์คํจํ๋ค๋ฉด dynamoDB ์ ํด๋น ์ด๋ฒคํธ๋ฅผ ์ ์ฅํจ
๋ฆฌ๋ทฐ์ ๋์ ํด์
์ด ๊ธ์ ์ฝ๊ณ ์ง๋ ๊ณผ๊ฑฐ์ ์์ ๋ค์ด ๋ช๊ฐ์ง ๋ ์ค๋ฅธ ๊ฒ์ด ์๋ค.
outbox table ๊ฐ๋ ์ ํ์ฉํ event streaming platform ์ ๋ง๋ค ๋, ์ด์ ๊ฐ์ ๊ณ ๋ฏผ๋ค์ ํ์๋ค.
ํด๋น ํ๋ซํผ์ ์ฌ์ฉํ๋ ํด๋ผ์ด์ธํธ๋ค์ ์ด๋ฒคํธ ๋ฒ์ ์ ๋ํด์ ์ ๊ฒฝ์จ์ผ ํ๊ณ , ์ด๋ฒคํธ ํ์ ๊ณผ definition ์ ๋ํด์๋ ๊ณ ๋ฏผํ์ด์ผ ํ๋ค
์ฌ๊ธฐ์ ํ๊ฐ์ง ์ ๊ธฐํ ์ ์ ๋งฅ๋๋ ๋๋ ๋ฉ์์ง ๋ฐํ์ ์คํจํ ๊ฒฝ์ฐ, dynamoDB ๋ฅผ ์ด์ฉํ๋ค๋ ์ ์ด๋ค.
์ ๊ตณ์ด dynamoDB ๋ฅผ ์ฌ์ฉํ ๊น?
๋ด๊ฐ ์ฐพ์๋ณธ ๊ฐ์ฅ ํฐ ์ด์ ๋
- fully managed service by aws -> lambda ์ ์ฐ๋์ด ์ฝ๋ค?
์ผ ๊ฒ์ด๋ค.
์ด์ธ์๋ EDA ์ ๊ด๋ จ๋ ๋ด์ฉ์ ๋ ์์ธํ ์๊ณ ์ถ๋ค๋ฉด ์ ๋ค ๋ฒจ๋ฉ์ด์ ์ด๋ฒคํธ ๊ธฐ๋ฐ ๋ง์ดํฌ๋ก์๋น์ค ๊ตฌ์ถ ์ฑ ์ด ๋ง์ ๋์์ด ๋ ๊ฒ ๊ฐ๋ค