ํ”ผ๋“œ๋กœ ๋Œ์•„๊ฐ€๊ธฐ
Event-Driven Architecture: Uncle Explains Like You're Five ๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿฆณ
Dev.toDev.to
Backend

Service Decoupling์„ ํ†ตํ•œ ํ™•์žฅ์„ฑ ํ™•๋ณด ๋ฐ Event-Driven Architecture ์ตœ์  ์„ ํƒ ๊ฐ€์ด๋“œ

Event-Driven Architecture: Uncle Explains Like You're Five ๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿฆณ

surajrkhonde2026๋…„ 6์›” 14์ผ16๋ถ„beginner

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๋งŒ ์ถ”๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ์ธ์ง€ ๊ฒ€ํ† 

์›๋ฌธ ์ฝ๊ธฐ