KIMHYEYUN 2023. 12. 12. 21:29
๋ฐ˜์‘ํ˜•

EDA(Event Driven Architecture)?

๋ถ„์‚ฐ๋œ ์‹œ์Šคํ…œ์—์„œ ์ด๋ฒคํŠธ๋ฅผ ์ƒ์„ฑ(๋ฐœํ–‰)ํ•˜๊ณ , ๋ฐœํ–‰๋œ ์ด๋ฒคํŠธ๋ฅผ ์ „์†กํ•˜๋Š” ๊ตฌ์กฐ๋กœ ์ˆ˜์‹ ์ž๋Š” ๊ทธ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์˜ ์•„ํ‚คํ…์ฒ˜
๋ถ„์‚ฐ ์•„ํ‚คํ…์ฒ˜ ํ™˜๊ฒฝ์—์„œ ์ƒํ˜ธ ๊ฐ„ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ธฐ ์œ„ํ•ด ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•˜๋Š” ํŒจํ„ด์œผ๋กœ ์ฃผ๋กœ Message Broker(Kafka, RabbitMQ)์™€ ๊ฒฐํ•ฉํ•˜์—ฌ ๊ตฌ์„ฑ๋œ๋‹ค.

๊ตฌ์„ฑ ์š”์†Œ

  1. Event Generator(Publisher, Producer, Creater)
    ํ‘œ์ค€ํ™”๋œ ํ˜•์‹์˜ ์ด๋ฒคํŠธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ƒ์„ฑ๋œ ์ด๋ฒคํŠธ๋Š” Event Channel๋กœ ์ „์†ก๋œ๋‹ค.
  2. Event Channel(Bus)
    Event Generator์—์„œ Event Processing Engine์œผ๋กœ ์ˆ˜์ง‘๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „ํŒŒํ•˜๋Š” ๋งค์ปค๋‹ˆ์ฆ˜
    ์ฆ‰, ์ด๋ฒคํŠธ๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š” ์‹œ์Šคํ…œ๊นŒ์ง€ ์ „์†กํ•˜๋Š” ์—ญํ• 
  3. Event Processing Engine (Cunsumer, Processor)
    ์ˆ˜์‹ ํ•œ ์ด๋ฒคํŠธ๋ฅผ ์‹๋ณ„/์ฒ˜๋ฆฌํ•˜๋Š” ์—ญํ• 
    ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ์ƒˆ๋กœ์šด ์ด๋ฒคํŠธ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. Customer๋Š” ์ด๋ฒคํŠธ์˜ ์†ก์‹ ์ž์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์•Œ ํ•„์š”๊ฐ€ ์—†๋‹ค.

๋™์ž‘ ๋ฐฉ์‹

  1. Message ์ƒ์„ฑ(Publisher/Subscribe)
    • ๋ฉ”์„ธ์ง€ ์ข…๋ฅ˜, ๋ฉ”์„ธ์ง€๊ฐ€ ์‹คํ–‰ํ•  ํŒŒ๋ผ๋ฏธํ„ฐ
    • ์ด๋ฒคํŠธ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด Subscriber(์ˆ˜์‹ ์ž)์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.
    • ์ด๋ฒคํŠธ๋Š” ๋ฐ˜๋ณต๋˜์–ด ์ „๋‹ฌ๋˜์ง€ ์•Š์œผ๋ฉฐ, ์ˆ˜์‹ ์ž๋Š” ์†ก์‹ ์ž์˜ ์ •๋ณด๋ฅผ ์•Œ ํ•„์š”๊ฐ€ ์—†๋‹ค.
  2. Event Source
    • Event Processor์—๊ฒŒ ์ด๋ฒคํŠธ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
    • Event Source๋Š” 1๊ฐœ ์ด์ƒ์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, 1๊ฐœ ์ด์ƒ์˜ Event Processor์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.
  3. Event Processor
    • ์ˆ˜์‹ ๋œ ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ Action์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์—ญํ• ์ด๋‹ค.
    • ๋‹จ์ผ ์ด๋ฒคํŠธ์— ๋Œ€ํ•˜์—ฌ ํƒ€์ž„ ์Šคํƒฌํ”„๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค๊ฑฐ๋‚˜, ํŒŒ์ƒ ์ด๋ฒคํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๋“ฑ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  4. Event Consumer
    • ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค. ์‹ค์งˆ์ ์ธ Biz Logic์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์žฅ๋‹จ์ 

์žฅ์ 

  1. Loosely Coupling
    ๋ถ„์‚ฐ ์‹œ์Šคํ…œ๊ฐ„ ๋А์Šจํ•œ ๊ฒฐํ•ฉ๋„๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
  2. ๋ถ„์‚ฐ๋œ ์‹œ์Šคํ…œ๊ฐ„ ์˜์กด์„ฑ ๋ฐฐ์ œ
    ์•ฝ์†๋œ Message๋ฅผ ํ†ตํ•ด ํ†ต์‹ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์˜ ์ •๋ณด๋ฅผ ์•Œ ํ•„์š”๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์‹œ์Šคํ…œ ๊ฐ„ ์˜์กด์„ฑ์ด ๋ฐฐ์ œ๋œ๋‹ค.
  3. ํ™•์žฅ์„ฑ, ํƒ„๋ ฅ์„ฑ(์œ ๋™์„ฑ) ํ–ฅ์ƒ

๋‹จ์ 

  1. Broker Dependency
    ์‹œ์Šคํ…œ ๊ฐ„ ์˜์กด๋„๋Š” ๋‚ฎ์•„์ง€์ง€๋งŒ ๋ฉ”์„ธ์ง€ ๋ธŒ๋กœ์ปค์— ๋Œ€ํ•œ ์˜์กด์„ฑ์ด ๋ฐœ์ƒํ•œ๋‹ค.
    ๋งŒ์•ฝ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค์˜ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํฐ ์žฅ์• ๋กœ ๋ฌด์กฐ๊ฑด ์ด์–ด์ง„๋‹ค.
  2. Transaction ๋‹จ์œ„ ๋ถ„๋ฆฌ
    ์žฅ์• ๋‚˜ ์ด์Šˆ ๋ฐœ์ƒ ์‹œ Retry/Rollback์— ๋Œ€ํ•œ ๊ณ ๋ ค๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
  3. ์‹œ์Šคํ…œ Flow ํŒŒ์•…์ด ์–ด๋ ต๋‹ค.
  4. ๋””๋ฒ„๊น…์ด ์–ด๋ ต๋‹ค.
728x90
๋ฐ˜์‘ํ˜•