Service Decoupling์ ํตํ ํ์ฅ์ฑ ํ๋ณด ๋ฐ Event-Driven Architecture ์ต์ ์ ํ ๊ฐ์ด๋
Event-Driven Architecture: Uncle Explains Like You're Five ๐ฆ๐จโ๐ฆณ
AI ์์ฝ
Context
๋จ์ผ ์๋น์ค ๋ด ๋ชจ๋ ๋น์ฆ๋์ค ๋ก์ง์ ์ง์ ํธ์ถํ๋ Tight Coupling ๊ตฌ์กฐ๋ก ์ธํด ์ฝ๋ ๋ณต์ก๋๊ฐ ์ฆ๊ฐํ๋ Spaghetti Code ๋ฌธ์ ๋ฐ์. ๊ธฐ๋ฅ ์ถ๊ฐ ์๋ง๋ค ๊ธฐ์กด ์ฝ๋๋ฅผ ์์ ํด์ผ ํ๋ ์ ์ง๋ณด์ ํจ์จ ์ ํ ๋ฐ ์๋น์ค ๊ฐ ์์กด์ฑ์ผ๋ก ์ธํ ์์คํ ์ ์ฒด์ ๊ฐ์ฉ์ฑ ์ ํ๊ฐ ์ฃผ์ ํ๊ณ์ ์.
Technical Solution
- Publisher-Subscriber ํจํด ๋์ ์ ํตํ Order Service์ ํ์ ์ฒ๋ฆฌ ์๋น์ค ๊ฐ์ ๋ฌผ๋ฆฌ์ /๋ ผ๋ฆฌ์ Decoupling ๊ตฌํ
- Redis Pub/Sub์ ํ์ฉํ ๊ฒฝ๋ ๋ฉ์์ง ์ฒด๊ณ ๊ตฌ์ถ์ผ๋ก ์ค์๊ฐ ์๋ฆผ ๋ฐ Live Dashboard ์ ๋ฐ์ดํธ ์ฒ๋ฆฌ
- Message Persistence ๋ฐ Reliable Delivery ๋ณด์ฅ์ ์ํด RabbitMQ๋ฅผ ํตํ ์์ ํ(Job Queue) ๊ธฐ๋ฐ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ ์ค๊ณ
- Log-based Storage ๊ตฌ์กฐ์ Kafka๋ฅผ ์ฑํํ์ฌ ๋ฉ์์ง ์ด๋ ฅ ๊ด๋ฆฌ ๋ฐ ๋ค์ ์๋น์ค์ ๋ ๋ฆฝ์ ์ธ Event Consumption ํ๊ฒฝ ์ ๊ณต
- ๋น์ฆ๋์ค ์๊ตฌ์ฌํญ(๋ฐ์ดํฐ ์ ์ค ํ์ฉ ์ฌ๋ถ, ํ์คํ ๋ฆฌ ํ์์ฑ, ์ฒ๋ฆฌ๋)์ ๋ฐ๋ฅธ ๋ฉ์์ง ๋ธ๋ก์ปค ๊ณ์ธต์ ๋จ๊ณ์ ์ ํ ์ ๋ต ์ ์ฉ
์ค์ฒ ํฌ์ธํธ
- ๋จ์ ์ค์๊ฐ ์ ํ ๋ฐ ๋ฐ์ดํฐ ์ ์ค ํ์ฉ ์ Redis Pub/Sub ๊ฒํ - ๋ฉ์์ง ์ ๋ฌ ๋ณด์ฅ(Reliability) ๋ฐ ์ ๊ตํ ํ์์ด ํ์ํ ์์ ์ฒ๋ฆฌ ์ RabbitMQ ์ ์ฉ - ๋๊ท๋ชจ ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ ๊ตฌ์ถ ๋ฐ ์ด๋ฒคํธ ์ฌ์(Replay) ๊ธฐ๋ฅ ํ์ ์ Kafka ๋์ - ์ ๊ท ๊ธฐ๋ฅ ์ถ๊ฐ ์ ๊ธฐ์กด ์๋น์ค ์ฝ๋ ์์ ์์ด Subscriber๋ง ์ถ๊ฐ ๊ฐ๋ฅํ ๊ตฌ์กฐ์ธ์ง ๊ฒํ