Home > Architecture > ๐Ÿ—๏ธ[Architecture] ์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค(Event Broker)๋ž€ ๋ฌด์—‡์ผ๊นŒ?

๐Ÿ—๏ธ[Architecture] ์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค(Event Broker)๋ž€ ๋ฌด์—‡์ผ๊นŒ?
Architecture Software Architecture Distributed System

๐Ÿ—๏ธ[Architecture] ์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค(Event Broker)๋ž€ ๋ฌด์—‡์ผ๊นŒ?

๐Ÿ“Œ Intro.

  • โ†˜๏ธŽ ์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค(Event Broker)๋Š” ์‹œ์Šคํ…œ์ด๋‚˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‚ฐ์— ์ด๋ฒคํŠธ(Event)๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ „๋‹ฌํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์ค‘๊ฐœ์ž ์—ญํ• ์„ ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด.
    • โ†˜๏ธŽ ์ฃผ๋กœ ์ด๋ฒคํŠธ ์ค‘์‹ฌ ์•„ํ‚คํ…์ฒ˜(Event-Driven Architecture, EDA)์—์„œ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋น„๋™๊ธฐ์‹ ํ†ต์‹ ๊ณผ ์‹œ์Šคํ…œ๊ฐ„์˜ ๋Š์Šจํ•œ ๊ฒฐํ•ฉ(Loose Coupling)์„ ์ง€์›ํ•จ.

โœ…1๏ธโƒฃ ์ด๋ฒคํŠธ(Event)๋ž€?

  • โ†˜๏ธŽ ์ด๋ฒคํŠธ(Event)๋Š” ์‹œ์Šคํ…œ ๋‚ด์—์„œ ๋ฐœ์ƒํ•œ ํŠน์ • ์ƒํ™ฉ์ด๋‚˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์˜๋ฏธํ•จ.
  • โ†˜๏ธŽ ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž๊ฐ€ ์ฃผ๋ฌธ์„ ์ƒ์„ฑํ–ˆ์„ ๋•Œ(Order Created), ์ƒํ’ˆ ์žฌ๊ณ ๊ฐ€ ๋ถ€์กฑํ•  ๋•Œ(Stock Depleted) ๋“ฑ์ด ์ด๋ฒคํŠธ(Event)์ž„.

โœ…2๏ธโƒฃ ์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค์˜ ์—ญํ• .

  • 1. ์ด๋ฒคํŠธ ์ˆ˜์ง‘(Event Ingestion)
    • โ†˜๏ธŽ ๋‹ค์–‘ํ•œ ์†Œ์Šค(์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ์„œ๋น„์Šค IoT ์žฅ์น˜ ๋“ฑ)๋กœ ๋ถ€ํ„ฐ ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์ง‘ํ•จ.
  • 2. ์ด๋ฒคํŠธ ๋ผ์šฐํŒ…(Event Routing)
    • โ†˜๏ธŽ ํŠน์ • ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ๋Œ€์ƒ(๊ตฌ์กฑ์ž, ์„œ๋น„์Šค)์—๊ฒŒ ์ด๋ฒคํŠธ๋ฅผ ์ „๋‹ฌํ•จ.
  • 3. ์ด๋ฒคํŠธ ํ์ž‰(Event Queuing)
    • โ†˜๏ธŽ ์ด๋ฒคํŠธ๋ฅผ ์ž„์‹œ๋กœ ์ €์žฅํ•˜์—ฌ ์ด๋ฒคํŠธ ์†์‹ค์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • 4. ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ(Asynchronous Processing)
    • โ†˜๏ธŽ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœํ–‰ํ•œ ์‹œ์Šคํ…œ๊ณผ ์†Œ๋น„ํ•˜๋Š” ์‹œ์Šคํ…œ์ด ๋…๋ฆฝ์ ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
  • 5. ํ™•์žฅ์„ฑ(Scalability)
    • โ†˜๏ธŽ ๋งŽ์€ ์–‘์˜ ์ด๋ฒคํŠธ๋ฅผ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • 6. ๋‚ด๊ตฌ์„ฑ(Durability)
    • โ†˜๏ธŽ ์ด๋ฒคํŠธ๊ฐ€ ์†์‹ค๋˜์ง€ ์•Š๋„๋ก ์•ˆ์ „ํ•˜๊ฒŒ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

โœ…3๏ธโƒฃ ์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค์˜ ๋™์ž‘ ๋ฐฉ์‹.

  • 1. ์ด๋ฒคํŠธ ๋ฐœํ–‰(Publish)
    • โ†˜๏ธŽ ์ด๋ฒคํŠธ ์ƒ์‚ฐ์ž(Producer)๊ฐ€ ์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค์— ์ด๋ฒคํŠธ๋ฅผ ๋ฐœํ–‰ํ•จ.
  • 2. ์ด๋ฒคํŠธ ์ €์žฅ(Store)
    • โ†˜๏ธŽ ์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค๋Š” ๋ฐ›์€ ์ด๋ฒคํŠธ๋ฅผ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ์ผ์‹œ์ ์œผ๋กœ ๋ณด๊ด€ํ•จ.
  • 3. ์ด๋ฒคํŠธ ๋ผ์šฐํŒ…(Routing)
    • โ†˜๏ธŽ ์ €์žฅ๋œ ์ด๋ฒคํŠธ๋ฅผ ๊ทœ์น™์— ๋”ฐ๋ผ ํŠน์ • ๊ตฌ๋…์ž(Consumer)์—๊ฒŒ ์ „๋‹ฌํ•จ.
  • 4. ์ด๋ฒคํŠธ ์†Œ๋น„(Consume)
    • โ†˜๏ธŽ ์ด๋ฒคํŠธ ์†Œ๋น„์ž(Consumer)๊ฐ€ ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•จ.

โœ…4๏ธโƒฃ ์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค(Event Broker) vs ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค(Message Broker)

๊ตฌ๋ถ„ ์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค(Event Broker) ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค(Message Broker)
์ฃผ์š” ๊ฐœ๋… ์ด๋ฒคํŠธ(Event)๋ฅผ ์ „๋‹ฌ ๋ฉ”์‹œ์ง€(Message)๋ฅผ ์ „๋‹ฌ
๋ฐœ์ƒ ์‹œ์  ์‹œ์Šคํ…œ์—์„œ ์ƒํƒœ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•  ๋•Œ ์‹œ์Šคํ…œ ๊ฐ„ ํ†ต์‹ ์ด ํ•„์š”ํ•  ๋•Œ
๋ชจ๋ธ ์ฃผ๋กœ Pub/Sub (ํผ๋ธ”๋ฆฌ์‹œ-์„œ๋ธŒ์Šคํฌ๋ผ์ด๋ธŒ) ์ฃผ๋กœ P2P (ํฌ์ธํŠธ-ํˆฌ-ํฌ์ธํŠธ)
์˜ˆ์‹œ Apache Kafka, AWS EventBridge RabbitMQ, AWS SQS
์ฃผ์š” ์‚ฌ์šฉ ์‚ฌ๋ก€ ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆผ ์ฒ˜๋ฆฌ, ์‹ค์‹œ๊ฐ„ ๋ถ„์„ ๋น„๋™๊ธฐ ์ž‘์—… ์ฒ˜๋ฆฌ, ํ ๊ธฐ๋ฐ˜ ํ†ต์‹ 

โœ…5๏ธโƒฃ ์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค์˜ ์ฃผ์š” ํŠน์ง•.

  • 1. Publisher-Subscriber ํŒจํ„ด(Pub/Sub)
    • โ†˜๏ธŽ ์ด๋ฒคํŠธ ๋ฐœํ–‰์ž๋Š” ์ด๋ฒคํŠธ๋ฅผ ๋ธŒ๋กœ์ปค์— ์ „๋‹ฌํ•˜๊ณ , ๊ตฌ๋…์ž๋Š” ๊ด€์‹ฌ ์žˆ๋Š” ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•จ.
  • 2. ๋น„๋™๊ธฐ ํ†ต์‹ 
    • โ†˜๏ธŽ ์ด๋ฒคํŠธ๊ฐ€ ๋ธŒ๋กœ์ปค๋ฅผ ํ†ตํ•ด ์ „๋‹ฌ๋˜๋ฏ€๋กœ ์‹œ์Šคํ…œ ๊ฐ„ ๋™๊ธฐํ™”๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Œ.
  • 3. ๋Š์Šจํ•œ ๊ฒฐํ•ฉ(Loose Coupling)
    • โ†˜๏ธŽ ์ƒ์‚ฐ์ž์™€ ์†Œ๋น„์ž๋Š” ์„œ๋กœ ์ง์ ‘ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š๊ณ  ๋ธŒ๋กœ์ปค๋ฅผ ํ†ตํ•ด ํ†ต์‹ ํ•จ.
  • 4. ์ด๋ฒคํŠธ ์†Œ์‹ฑ(Event Sourcing)
    • โ†˜๏ธŽ ๋ชจ๋“  ์ด๋ฒคํŠธ๋ฅผ ๊ธฐ๋กํ•˜๊ณ  ํ•„์š”ํ•  ๋•Œ ์žฌ์ƒํ•  ์ˆ˜ ์žˆ์Œ.
  • 5. ํ™•์žฅ์„ฑ ๋ฐ ์‹ ๋ขฐ์„ฑ
    • โ†˜๏ธŽ ์ˆ˜๋ฐฑ๋งŒ ๊ฐœ์˜ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ณ , ์ด๋ฒคํŠธ ์†์‹ค์„ ๋ฐฉ์ง€ํ•จ.

โœ…6๏ธโƒฃ ์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€.

  • 1. ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ.
    • โ†˜๏ธŽ ์‹ค์‹œ๊ฐ„ ๊ฑฐ๋ž˜, ์‚ฌ์šฉ์ž ํ™œ๋™ ๋กœ๊ทธ ์ฒ˜๋ฆฌ.
  • 2. ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜.
    • โ†˜๏ธŽ ์„œ๋กœ ๋…๋ฆฝ๋œ ์„œ๋น„์Šค ๊ฐ„์˜ ์ด๋ฒคํŠธ ์ „๋‹ฌ.
  • 3. IoT ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ.
    • โ†˜๏ธŽ IoT ์žฅ์น˜๋กœ๋ถ€ํ„ฐ ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ ๋ฐ ๋ถ„์„.
  • 4. ์•Œ๋ฆผ ์‹œ์Šคํ…œ(Notification System).
    • โ†˜๏ธŽ ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ฆผ ์ „์†ก.
  • 5. ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ(Data Pipeline).
    • โ†˜๏ธŽ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋‹จ๊ณ„ ๊ฐ„ ์ด๋ฒคํŠธ ์ „๋‹ฌ.

โœ…7๏ธโƒฃ ๋Œ€ํ‘œ์ ์ธ ์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค ๋„๊ตฌ.

์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค ์ฃผ์š” ํŠน์ง•
Apache Kafka ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ, ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰
AWS EventBridge AWS ์„œ๋น„์Šค ๊ฐ„ ์ด๋ฒคํŠธ ํ†ตํ•ฉ
Google Cloud Pub/Sub ์‹ค์‹œ๊ฐ„ ๋ฉ”์‹œ์ง• ๋ฐ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ
Azure Event Hubs ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ๋ฐ ๋ถ„์„
RabbitMQ ์ด๋ฒคํŠธ ๋ฐ ๋ฉ”์‹œ์ง€ ํ ์ง€์›

โœ…8๏ธโƒฃ ์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์˜ ๊ณ ๋ ค์‚ฌํ•ญ.

  • 1. ์ฒ˜๋ฆฌ๋Ÿ‰(Throughput):
    • โ†˜๏ธŽ ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์ด๋ฒคํŠธ๋ฅผ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?
  • 2. ์ง€์—ฐ ์‹œ๊ฐ„(Latency):
    • โ†˜๏ธŽ ์ด๋ฒคํŠธ๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋น ๋ฅด๊ฒŒ ์ „๋‹ฌ๋˜๋Š”๊ฐ€?
  • 3. ์‹ ๋ขฐ์„ฑ(Reliability):
    • โ†˜๏ธŽ ์ด๋ฒคํŠธ๊ฐ€ ์†์‹ค๋˜์ง€ ์•Š๋Š”๊ฐ€?
  • 4. ํ™•์žฅ์„ฑ(Scalability):
    • โ†˜๏ธŽ ์ฆ๊ฐ€ํ•˜๋Š” ์ด๋ฒคํŠธ ์ˆ˜๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?
  • 5. ๋ณด์•ˆ(Security):
    • โ†˜๏ธŽ ์ด๋ฒคํŠธ ๋ฐ์ดํ„ฐ๋Š” ์•ˆ์ „ํ•˜๊ฒŒ ๋ณดํ˜ธ๋˜๋Š”๊ฐ€?

โœ…9๏ธโƒฃ ์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค ๋„์ž…์˜ ์ด์ .

  • 1. ์‹œ์Šคํ…œ ๊ฐ„ ๋Š์Šจํ•œ ๊ฒฐํ•ฉ.
  • 2. ํ™•์žฅ์„ฑ ๋ฐ ์œ ์—ฐ์„ฑ.
  • 3. ๊ณ ๊ฐ€์šฉ์„ฑ(High Availability)
  • 4. ๋น„๋™๊ธฐ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ
  • 5, ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋ฐ ์ฒ˜๋ฆฌ

๐Ÿš€ ๊ฒฐ๋ก 

  • ์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค(Event Broker)๋Š” ์‹œ์Šคํ…œ ๊ฐ„ ์ด๋ฒคํŠธ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ „๋‹ฌํ•˜๊ณ  ๋ผ์šฐํŒ…ํ•˜๋Š” ์ค‘์•™ ํ—ˆ๋ธŒ ์—ญํ• ์„ ํ•จ.
  • Apache Kafka, AWS EventBridge, Google Cloud Pub/Sub ๋“ฑ์ด ๋Œ€ํ‘œ์ ์ธ ์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค.
  • ์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค๋ฅผ ๋„์ž…ํ•จ์œผ๋กœ์จ ํ™•์žฅ์„ฑ, ์œ ์—ฐ์„ฑ, ์‹ ๋ขฐ์„ฑ์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ์Œ.

๐Ÿ”‘ ํ•ต์‹ฌ ์š”์•ฝ

  • ์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค๋ž€? : ์ด๋ฒคํŠธ ์ค‘์‹ฌ ํ†ต์‹ ์„ ์ค‘์žฌํ•˜๋Š” ์‹œ์Šคํ…œ.
  • ์ฃผ์š” ํŠน์ง• : ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ, ํ™•์žฅ์„ฑ, ์‹ ๋ขฐ์„ฑ.
  • ์‚ฌ์šฉ ์‚ฌ๋ก€ : ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ, ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค ํ†ต์‹ .