--- category: Unified tags: [auto-consolidated, technical-documentation] title: [[Event-Driven Architecture (EDA)]] last_updated: 2026-05-02 --- # [[Event-Driven Architecture (EDA)]] ## ๐Ÿ“Œ Brief Summary ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜(EDA)๋Š” ์‹œ์Šคํ…œ ๋‚ด์—์„œ ์˜๋ฏธ ์žˆ๋Š” ์ƒํƒœ ๋ณ€ํ™”(์ด๋ฒคํŠธ)์˜ ์ƒ์„ฑ, ๊ฐ์ง€, ์†Œ๋น„ ๋ฐ ๋ฐ˜์‘์„ ์ค‘์‹ฌ์œผ๋กœ ๊ตฌ์„ฑ๋œ ๋น„๋™๊ธฐ์‹ ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜ ํŒจ๋Ÿฌ๋‹ค์ž„์ด๋‹ค[1, 2]. ์ด๋ฒคํŠธ ์ƒ์‚ฐ์ž์™€ ์†Œ๋น„์ž๊ฐ€ ์ง์ ‘์ ์ธ ์š”์ฒญ์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ์ด๋ฒคํŠธ ์ฑ„๋„์„ ํ†ตํ•ด ์†Œํ†ตํ•˜๋ฏ€๋กœ, ๊ตฌ์„ฑ ์š”์†Œ ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๊ฐ€ ๋งค์šฐ ๋‚ฎ๊ฒŒ ์œ ์ง€๋œ๋‹ค[1, 3, 4]. ์ด ์•„ํ‚คํ…์ฒ˜๋Š” ๊ณ ๋„์˜ ํ™•์žฅ์„ฑ, ๋‚ด๊ฒฐํ•จ์„ฑ ๋ฐ ์‘๋‹ต์„ฑ์„ ์ œ๊ณตํ•˜์—ฌ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ, IoT ์›Œํฌ๋กœ๋“œ ๋ฐ ๋ณต์žกํ•˜๊ณ  ๋™์ ์ธ ์‹œ์Šคํ…œ์— ํŠนํžˆ ์ ํ•ฉํ•˜๋‹ค[4-6]. --- Event-Driven Architecture (EDA)๋Š” ์‹œ์Šคํ…œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ด๋ฒคํŠธ(Event)์˜ ์ƒ์„ฑ๊ณผ ์†Œ๋น„๋ฅผ ํ†ตํ•ด ๋น„๋™๊ธฐ์ ์œผ๋กœ ํ†ต์‹ ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜ ํŒจ๋Ÿฌ๋‹ค์ž„์ž…๋‹ˆ๋‹ค [1]. ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜๋Š” ๋Œ€์‹ , ๋ฒ„ํŠผ ํด๋ฆญ์ด๋‚˜ ์„ผ์„œ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ, ์ƒˆ๋กœ์šด ์ฃผ๋ฌธ ๋ฐœ์ƒ๊ณผ ๊ฐ™์€ ์ด๋ฒคํŠธ์— ๋ฐ˜์‘ํ•˜์—ฌ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค [1]. ์ด ์ ‘๊ทผ ๋ฐฉ์‹์€ ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ์ง์ ‘์ ์ธ ์ง€์‹์„ ์š”๊ตฌํ•˜์ง€ ์•Š์•„ ๋А์Šจํ•œ ๊ฒฐํ•ฉ(Loose coupling)์„ ์ด‰์ง„ํ•˜๋ฉฐ, ์˜ˆ์ธก ๋ถˆ๊ฐ€๋Šฅํ•œ ์›Œํฌํ”Œ๋กœ์šฐ์™€ ๋†’์€ ๋ถ€ํ•˜๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํƒ„๋ ฅ์ ์ด๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์‹œ์Šคํ…œ ๊ตฌ์ถ•์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค [1]. ## ๐Ÿ“– Core Content ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜๋Š” ์‹œ์Šคํ…œ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ๋น„๋™๊ธฐ์  ํ๋ฆ„์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ์™€ ํ† ํด๋กœ์ง€๋ฅผ ํ™œ์šฉํ•œ๋‹ค. * **์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ** * **์ด๋ฒคํŠธ ์ƒ์‚ฐ์ž(Event Producers):** ํŠน์ • ๋™์ž‘์ด๋‚˜ ์ƒํƒœ ๋ณ€ํ™”๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ด๋ฒคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ฐ์ง€ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค[3, 7]. * **์ด๋ฒคํŠธ ์ฑ„๋„(Event Channels):** ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋‚˜ ํ(์˜ˆ: Kafka, RabbitMQ)๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ƒ์‚ฐ์ž๋กœ๋ถ€ํ„ฐ ์†Œ๋น„์ž์—๊ฒŒ ์ด๋ฒคํŠธ๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ „์†กํ•˜๋Š” ํŒŒ์ดํ”„๋ผ์ธ ์—ญํ• ์„ ํ•œ๋‹ค[7, 8]. * **์ด๋ฒคํŠธ ์†Œ๋น„์ž(Event Consumers) / ์ฒ˜๋ฆฌ๊ธฐ(Processors):** ์ „๋‹ฌ๋œ ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•˜์—ฌ ํŠน์ • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค[3, 7]. ์ƒ์‚ฐ์ž๋Š” ๋ˆ„๊ฐ€ ์ด๋ฒคํŠธ๋ฅผ ์†Œ๋น„ํ•˜๋Š”์ง€ ์•Œ ํ•„์š”๊ฐ€ ์—†๋‹ค[9]. * **์ฃผ์š” ํ† ํด๋กœ์ง€(Topologies)** * **๋ธŒ๋กœ์ปค ํ† ํด๋กœ์ง€(Broker Topology):** ์ค‘์•™์˜ ์กฐ์ •์ž ์—†์ด ๊ตฌ์„ฑ ์š”์†Œ๋“ค์ด ์ด๋ฒคํŠธ๋ฅผ ์‹œ์Šคํ…œ ์ „์ฒด์— ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธํ•˜๋Š” ๋ฐฉ์‹(Choreography)์ด๋‹ค[10, 11]. ํ๋ฆ„์ด ๋‹จ์ˆœํ•˜๊ณ  ์ฒ˜๋ฆฌ๋Ÿ‰์ด ๋†’์„ ๋•Œ ์œ ๋ฆฌํ•˜๋ฉฐ, ํ™•์žฅ์„ฑ๊ณผ ๊ฒฐํ•ฉ๋„ ๊ฐ์†Œ์— ์ตœ์ ํ™”๋˜์–ด ์žˆ์œผ๋‚˜ ์ค‘์•™ ์ œ์–ด๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์ „์ฒด ํŠธ๋žœ์žญ์…˜์„ ์ถ”์ ํ•˜๊ฑฐ๋‚˜ ์˜ค๋ฅ˜๋ฅผ ๋ณต๊ตฌํ•˜๊ธฐ๋Š” ์–ด๋ ต๋‹ค[10, 12]. * **๋ฉ”๋””์—์ดํ„ฐ ํ† ํด๋กœ์ง€(Mediator Topology):** ์ด๋ฒคํŠธ ๋ฉ”๋””์—์ดํ„ฐ๋ผ๋Š” ์ค‘์•™ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์กด์žฌํ•˜์—ฌ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„์˜ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์กฐ์ •ํ•˜๊ณ  ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜(Orchestration)ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค[10, 11, 13]. ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค๋‚˜ ์—๋Ÿฌ ํ•ธ๋“ค๋ง์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ ํ•ฉํ•˜์ง€๋งŒ, ๋ฉ”๋””์—์ดํ„ฐ ์ž์ฒด๊ฐ€ ์„ฑ๋Šฅ์˜ ๋ณ‘๋ชฉ(Bottleneck)์ด๋‚˜ ๋‹จ์ผ ์žฅ์• ์ (Single Point of Failure)์ด ๋  ์œ„ํ—˜์ด ์žˆ๋‹ค[10, 11]. * **์ด๋ฒคํŠธ ํŽ˜์ด๋กœ๋“œ ๊ตฌ์กฐ ์ „๋žต** * **๋ชจ๋“  ์†์„ฑ ํฌํ•จ:** ์†Œ๋น„์ž๊ฐ€ ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ์กฐํšŒํ•  ํ•„์š” ์—†๋„๋ก ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค. ๋น ๋ฅด์ง€๋งŒ ํŽ˜์ด๋กœ๋“œ ํฌ๊ธฐ๊ฐ€ ์ปค์ ธ ๋Œ€์—ญํญ ์†Œ๋น„๊ฐ€ ๋Š˜์–ด๋‚˜๊ณ , ์—ฌ๋Ÿฌ ๋ณต์ œ๋ณธ์œผ๋กœ ์ธํ•œ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค[14, 15]. * **ํ‚ค(Key)/ID๋งŒ ํฌํ•จ:** ์ตœ์†Œํ•œ์˜ ์‹๋ณ„์ž๋งŒ ํฌํ•จํ•˜๋ฉฐ ์†Œ๋น„์ž๊ฐ€ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ง์ ‘ ์กฐํšŒํ•œ๋‹ค. ์ผ๊ด€์„ฑ ์œ ์ง€๋Š” ์šฉ์ดํ•˜์ง€๋งŒ ๋ฐ์ดํ„ฐ ์†Œ์Šค ์กฐํšŒ๊ฐ€ ๋นˆ๋ฒˆํ•ด์ ธ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค[14, 15]. * **์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ์Šคํƒ€์ผ** * **๋‹จ์ˆœ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ(Simple Event Processing):** ๋‹จ์ผ ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ ์ฆ‰๊ฐ์ ์ธ ํ›„์† ์กฐ์น˜๋ฅผ ์œ ๋„ํ•œ๋‹ค[16]. * **์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆผ ์ฒ˜๋ฆฌ(Event Stream Processing):** ์ˆ˜๋งŽ์€ ์ด๋ฒคํŠธ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ŠคํŠธ๋ฆฌ๋ฐํ•˜์—ฌ ์ฃผ๋ชฉํ•  ๋งŒํ•œ ์ •๋ณด๋ฅผ ๊ฑธ๋Ÿฌ๋‚ธ๋‹ค[17]. * **๋ณตํ•ฉ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ(Complex Event Processing, CEP):** ์žฅ์‹œ๊ฐ„์— ๊ฑธ์นœ ๋‹ค์–‘ํ•œ ์ด๋ฒคํŠธ ๊ฐ„์˜ ํŒจํ„ด์„ ๋ถ„์„ํ•˜์—ฌ ์ด์ƒ ์ง•ํ›„๋‚˜ ๊ธฐํšŒ ๋“ฑ ๋ณตํ•ฉ์ ์ธ ์ƒํ™ฉ์„ ์ถ”๋ก ํ•œ๋‹ค[18]. --- **๋น„๋™๊ธฐ ํ†ต์‹ ๊ณผ ๋А์Šจํ•œ ๊ฒฐํ•ฉ** * ์‹œ์Šคํ…œ ๊ตฌํ˜„์€ ์ฃผ๋กœ ์ƒ์‚ฐ์ž(Producer)๊ฐ€ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค(Message Broker)์— ์ด๋ฒคํŠธ๋ฅผ ๋ฐœํ–‰(Publish)ํ•˜๋ฉด, ๋ธŒ๋กœ์ปค๊ฐ€ ์ด๋ฅผ ๊ด€์‹ฌ ์žˆ๋Š” ๋ชจ๋“  ์†Œ๋น„์ž(Consumer)์—๊ฒŒ ๋ผ์šฐํŒ…ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค [2, 3]. * ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ ๋•๋ถ„์— ์ปดํฌ๋„ŒํŠธ๋“ค์€ ์„œ๋กœ์˜ ๋‚ด๋ถ€๋ฅผ ์•Œ ํ•„์š” ์—†์ด ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐœ๋ฐœ, ๋ฐฐํฌ ๋ฐ ํ™•์žฅ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [1]. **์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ** * ์•„ํ‚คํ…์ฒ˜ ๋‹ค์ด์–ด๊ทธ๋žจ์—์„œ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ์€ **์ด๋ฒคํŠธ ์ƒ์‚ฐ์ž(Event Producers)**, **์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค(Event Broker, ์˜ˆ: Kafka)**, **์ด๋ฒคํŠธ ์†Œ๋น„์ž(Event Consumers)**, **์ด๋ฒคํŠธ ์ €์žฅ์†Œ(Event Store)**, ๊ทธ๋ฆฌ๊ณ  ์‹คํŒจํ•œ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ **๋ฐ๋“œ ๋ ˆํ„ฐ ํ(Dead Letter Queue, DLQ)** ๋“ฑ์˜ ์ปดํฌ๋„ŒํŠธ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค [3]. * ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์€ "์ƒ์‚ฐ์ž์˜ ์ด๋ฒคํŠธ ๋ฐœํ–‰ โ†’ ๋ธŒ๋กœ์ปค์˜ ๋ผ์šฐํŒ… โ†’ ์†Œ๋น„์ž์˜ ๋…๋ฆฝ์  ์ฒ˜๋ฆฌ โ†’ ์‹คํŒจ ์‹œ DLQ๋กœ ์ด๋™"์˜ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์นฉ๋‹ˆ๋‹ค [3]. **์‹ค๋ฌด ์ ์šฉ ์‚ฌ๋ก€** * ์‹ค์‹œ๊ฐ„ ์ฃผ์‹ ๊ฑฐ๋ž˜ ์‹œ์Šคํ…œ (์ฃผ์‹ ๊ฐ€๊ฒฉ ๋ณ€๋™์— ๋”ฐ๋ผ ๋Œ€์‹œ๋ณด๋“œ ์—…๋ฐ์ดํŠธ ๋ฐ ์ž๋™ ๊ฑฐ๋ž˜ ํŠธ๋ฆฌ๊ฑฐ), ์ค‘์•™ ์กฐ์ •์ž ์—†๋Š” IoT ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ (์„ผ์„œ ๋ฐ์ดํ„ฐ ๋ฐœํ–‰ ๋ฐ ๋ถ„์„), ๊ทธ๋ฆฌ๊ณ  ์ „์ž์ƒ๊ฑฐ๋ž˜ ์ฒดํฌ์•„์›ƒ๊ณผ ๊ฐ™์€ ๋‹ค๋‹จ๊ณ„ ํ”„๋กœ์„ธ์Šค์—์„œ ์ง์ ‘์ ์ธ API ํ˜ธ์ถœ์„ ๋Œ€์ฒดํ•˜๋Š” **๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜(Microservices Orchestration)**์— ์ฃผ๋กœ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค [2]. ## โš–๏ธ Trade-offs & Caveats ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜๋Š” ๊ณ ๋„์˜ ํ™•์žฅ์„ฑ๊ณผ ๋น„๊ฒฐํ•ฉ์„ฑ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ๋ถ„์‚ฐ ์‹œ์Šคํ…œ ํŠน์œ ์˜ ๋ณต์žก์„ฑ์œผ๋กœ ์ธํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ•œ๊ณ„์™€ ๋ฐ˜๋Œ€ ๊ธ‰๋ถ€๊ฐ€ ๋”ฐ๋ฅธ๋‹ค. * **์ตœ์ข… ์ผ๊ด€์„ฑ(Eventual Consistency) ๊ฐ์ˆ˜:** ์ƒ์‚ฐ์ž์™€ ์†Œ๋น„์ž๊ฐ€ ๋น„๋™๊ธฐ ์ฑ„๋„๋กœ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, ๋ฐ์ดํ„ฐ๊ฐ€ ์ „์ฒด ์‹œ์Šคํ…œ์— ๋™๊ธฐํ™”๋˜๋Š” ๋ฐ ์ง€์—ฐ์ด ๋ฐœ์ƒํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์‹œ์Šคํ…œ์€ ์ˆœ๊ฐ„์ ์œผ๋กœ ๋ฐ์ดํ„ฐ์˜ ๋ถˆ์ผ์น˜ ์ƒํƒœ๋ฅผ ํ—ˆ์šฉํ•ด์•ผ ํ•˜๋ฉฐ, ์•„ํ‚คํ…ํŠธ๋Š” ์†Œ๋น„์ž๊ฐ€ ๊ณผ๊ฑฐ์˜(stale) ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๊ฐ€๋Šฅ์„ฑ์„ ๊ณ ๋ คํ•ด ์„ค๊ณ„ํ•ด์•ผ ํ•œ๋‹ค[19, 20]. * **๋ณต์žกํ•œ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ:** ๋น„๋™๊ธฐ ํ™˜๊ฒฝ์—์„œ๋Š” ์š”์ฒญ-์‘๋‹ต ๋ชจ๋ธ์ฒ˜๋Ÿผ ์ฆ‰๊ฐ์ ์ธ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊ฐ€ ์–ด๋ ต๋‹ค. ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ ๋ณ„๋„์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ๊ธฐ๋‚˜ ๋ฐ๋“œ ๋ ˆํ„ฐ ํ(DLQ)๋ฅผ ๊ตฌ์ถ•ํ•ด์•ผ ํ•˜๋ฉฐ, ๋ณต์ˆ˜์˜ ์„œ๋น„์Šค์— ๊ฑธ์นœ ํŠธ๋žœ์žญ์…˜์ด ์‹คํŒจํ•  ๊ฒฝ์šฐ ์ด๋ฅผ ์ทจ์†Œํ•˜๊ธฐ ์œ„ํ•ด ๋ณด์ƒ ํŠธ๋žœ์žญ์…˜(Compensating Transaction)์„ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค[20]. * **๊ด€์ธก์„ฑ(Observability) ๋ฐ ๋””๋ฒ„๊น…์˜ ์–ด๋ ค์›€:** ๊ณต์œ ๋œ ํ˜ธ์ถœ ์Šคํƒ(Call stack)์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ์ผ ๋น„์ฆˆ๋‹ˆ์Šค ํŠธ๋žœ์žญ์…˜์„ ์ถ”์ ํ•˜๊ธฐ ์–ด๋ ต๋‹ค. ์ด๋ฅผ ๊ทน๋ณตํ•˜๋ ค๋ฉด ๋ชจ๋“  ์ด๋ฒคํŠธ์— ์ƒ๊ด€๊ด€๊ณ„ ID(Correlation ID)๋ฅผ ํฌํ•จ์‹œ์ผœ ์‹œ์Šคํ…œ ์ „์ฒด์˜ ๋กœ๊ทธ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋ถ„์‚ฐ ํŠธ๋ ˆ์ด์‹ฑ์„ ๋„์ž…ํ•ด์•ผ ํ•œ๋‹ค[21]. * **์ˆœ์„œ ๋ณด์žฅ ๋ฐ ๋ฉฑ๋“ฑ์„ฑ ๋ฌธ์ œ:** ์„ฑ๋Šฅ๊ณผ ํ™•์žฅ์„ฑ์„ ์œ„ํ•ด ๋™์ผํ•œ ์ฒ˜๋ฆฌ๊ธฐ์˜ ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋™์‹œ์— ์‹คํ–‰๋  ๊ฒฝ์šฐ, ์ด๋ฒคํŠธ์˜ ์ฒ˜๋ฆฌ ์ˆœ์„œ๊ฐ€ ๋’ค์„ž์ผ ์ˆ˜ ์žˆ๋‹ค. ์ด๋กœ ์ธํ•œ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ๋กœ์ง์„ ๋ฉฑ๋“ฑ์„ฑ(Idempotent, ์—ฌ๋Ÿฌ ๋ฒˆ ์ฒ˜๋ฆฌํ•ด๋„ ๊ฒฐ๊ณผ๊ฐ€ ๋™์ผํ•จ) ์žˆ๊ฒŒ ๊ตฌํ˜„ํ•˜๊ฑฐ๋‚˜ ์ˆœ์„œ๋ฅผ ๊ฐ•์ œํ•˜๋Š” ์ถ”๊ฐ€์ ์ธ ์„ค๊ณ„๊ฐ€ ํ•„์ˆ˜์ ์ด๋‹ค[20]. * **์Šคํ‚ค๋งˆ ์ง„ํ™”(Schema Evolution) ๊ด€๋ฆฌ:** ์ƒ์‚ฐ์ž์™€ ์†Œ๋น„์ž๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ๋ฐฐํฌ๋˜๋ฏ€๋กœ, ์ƒ์‚ฐ์ž๊ฐ€ ์ด๋ฒคํŠธ์˜ ๊ตฌ์กฐ(์Šคํ‚ค๋งˆ)๋ฅผ ๋ณ€๊ฒฝํ•  ๊ฒฝ์šฐ ์ด๋ฅผ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ตฌ๋ฒ„์ „ ์†Œ๋น„์ž์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์ดˆ๊ธฐ์— ๋ช…ํ™•ํ•œ ์Šคํ‚ค๋งˆ ๋ฒ„์ „ ๊ด€๋ฆฌ ์ „๋žต์ด ์ˆ˜๋ฆฝ๋˜์–ด์•ผ ํ•œ๋‹ค[21]. --- * **๊ตฌํ˜„ ๋ฐ ์šด์˜์˜ ๋†’์€ ๋ณต์žก์„ฑ:** ๋น„๋™๊ธฐ์‹ ํŠน์„ฑ๊ณผ ์ด๋ฒคํŠธ ์ˆœ์„œ(Ordering) ๋ณด์žฅ ๋ฌธ์ œ๋กœ ์ธํ•ด ๊ตฌํ˜„ ๋ณต์žก์„ฑ์ด ๋งค์šฐ ๋†’์Šต๋‹ˆ๋‹ค [4]. ๋˜ํ•œ, ๋ธŒ๋กœ์ปค ์ธํ”„๋ผ, ์ด๋ฒคํŠธ ์žฌ์ƒ(Replay)/์ €์žฅ์†Œ, ๊ทธ๋ฆฌ๊ณ  ๋ถ„์‚ฐ ์ถ”์ (Tracing) ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด ๋†’์€ ๋ฆฌ์†Œ์Šค์™€ ์ „๋ฌธ์„ฑ์ด ์š”๊ตฌ๋ฉ๋‹ˆ๋‹ค [4]. * **๋ฉฑ๋“ฑ์„ฑ(Idempotency) ๋ณด์žฅ ํ•„์ˆ˜:** ์•ˆ์ •์ ์ด๊ณ  ๊ฒฐํ•จ ํ—ˆ์šฉ(Fault-tolerant)์ด ๊ฐ€๋Šฅํ•œ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๋ ค๋ฉด, ์ด๋ฒคํŠธ ์†Œ๋น„์ž(ํ•ธ๋“ค๋Ÿฌ)๊ฐ€ ๋™์ผํ•œ ์ด๋ฒคํŠธ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์ฒ˜๋ฆฌํ•˜๋”๋ผ๋„ ์˜ค๋ฅ˜๋‚˜ ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ๋ฉฑ๋“ฑ์„ฑ์„ ๊ฐ–์ถ”๊ฒŒ ์„ค๊ณ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [4, 5]. * **์—๋Ÿฌ ๊ฒฉ๋ฆฌ๋ฅผ ์œ„ํ•œ DLQ ๊ตฌํ˜„:** ์‹œ์Šคํ…œ ๋‚ด์˜ ๋‹จ์ผ ์‹คํŒจ ๋ฉ”์‹œ์ง€๊ฐ€ ์ „์ฒด ์‹œ์Šคํ…œ์˜ ๋ณ‘๋ชฉ์ด๋‚˜ ์ฐจ๋‹จ์„ ์œ ๋ฐœํ•˜์ง€ ์•Š๋„๋ก, ์—ฌ๋Ÿฌ ๋ฒˆ์˜ ์žฌ์‹œ๋„ ํ›„์—๋„ ์ฒ˜๋ฆฌ์— ์‹คํŒจํ•œ ์ด๋ฒคํŠธ๋ฅผ ํฌ์ฐฉํ•˜๊ณ  ๊ฒฉ๋ฆฌํ•˜๋Š” **๋ฐ๋“œ ๋ ˆํ„ฐ ํ(DLQ)**๋ฅผ ๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•œ ์ˆ˜๋™ ๊ฐœ์ž…๊ณผ ์‚ฌํ›„ ๋ถ„์„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค [3, 5]. ## ๐Ÿ”— Knowledge Connections ### Related Concepts #### [ํ† ํด๋กœ์ง€ ๋ฐ ์„ค๊ณ„ ๊ตฌ์กฐ] - [[Broker Topology]] - ์—ฐ๊ฒฐ ์ด์œ : EDA์˜ ์ด๋ฒคํŠธ ํ๋ฆ„์„ ์ œ์–ดํ•˜๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ ์ค‘ ํ•˜๋‚˜์ด๋‹ค. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ค‘์•™ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ์—†์ด ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ์™€ ์ž์œจ์ ์ธ ๊ตฌ๋…์„ ํ†ตํ•ด ์‹œ์Šคํ…œ์ด ์„ฑ๋Šฅ๊ณผ ํ™•์žฅ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ๋ฐฉ์‹ ๋ฐ ๊ทธ์— ๋”ฐ๋ฅธ ํ•œ๊ณ„์ [10, 11, 22]. - [[Mediator Topology]] - ์—ฐ๊ฒฐ ์ด์œ : ๋ณต์žกํ•œ ์ด๋ฒคํŠธ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ค‘์•™์—์„œ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•œ EDA์˜ ๋Œ€์•ˆ์  ๊ตฌ์กฐ์ด๋‹ค. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ค‘์•™ ์ง‘์ค‘์‹ ํ์™€ ๋ฉ”๋””์—์ดํ„ฐ๋ฅผ ํ†ตํ•ด ์˜ค๋ฅ˜ ๋ณต๊ตฌ์™€ ์กฐ๊ฑด๋ถ€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•[10, 11, 13, 23]. #### [์•„ํ‚คํ…์ฒ˜ ๋ฐ ์‹œ์Šคํ…œ ํŒจํ„ด] - [[Microservices Architecture]] - ์—ฐ๊ฒฐ ์ด์œ : EDA์™€ ๊ฒฐํ•ฉํ•˜์—ฌ ๋Œ€๊ทœ๋ชจ ๋ถ„์‚ฐ ํ™˜๊ฒฝ์—์„œ ๊ฐ๊ฐ์˜ ์„œ๋น„์Šค๊ฐ€ ๋น„๋™๊ธฐ์ ์œผ๋กœ ํ†ต์‹ ํ•˜๋„๋ก ๊ตฌ์„ฑํ•  ๋•Œ ์ž์ฃผ ์‚ฌ์šฉ๋œ๋‹ค. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ฐœ๋ณ„ ์„œ๋น„์Šค๊ฐ€ ์–ด๋–ป๊ฒŒ ๋…๋ฆฝ์ ์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ๋„, ์ด๋ฒคํŠธ๋ฅผ ํ†ตํ•ด ์‹œ์Šคํ…œ ์ „๋ฐ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ฉํ•˜๊ณ  ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š”์ง€[24, 25]. - [[Complex Event Processing (CEP)]] - ์—ฐ๊ฒฐ ์ด์œ : EDA ์‹œ์Šคํ…œ์ด ๊ณ ๋„ํ™”๋  ๋•Œ ์ ์šฉ๋˜๋Š” ๋Œ€ํ‘œ์ ์ธ ์ด๋ฒคํŠธ ๋ถ„์„ ๋ฐ ์ฒ˜๋ฆฌ ๊ธฐ๋ฒ•์ด๋‹ค. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์‹œ๊ณต๊ฐ„์  ์ธ๊ณผ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง„ ๋‹ค์–‘ํ•œ ๋‹จ์ˆœ ์ด๋ฒคํŠธ๋ฅผ ์œตํ•ฉํ•˜์—ฌ ์ด์ƒ ์ง•ํ›„, ์œ„ํ˜‘ ๋˜๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๊ธฐํšŒ๋กœ ์ถ”๋ก ํ•ด ๋‚ด๋Š” ์›๋ฆฌ[18]. #### [๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๋ฐ ์ผ๊ด€์„ฑ ๋ฉ”์ปค๋‹ˆ์ฆ˜] - [[Eventual Consistency]] - ์—ฐ๊ฒฐ ์ด์œ : EDA์—์„œ ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ๋น„๋™๊ธฐ์  ๊ฒฐํ•ฉ ํ•ด์ œ๋กœ ์ธํ•ด ํ•„์—ฐ์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ๋ฐ์ดํ„ฐ ํŠน์„ฑ์ด๋‹ค. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ฆ‰๊ฐ์ ์ธ ์ผ๊ด€์„ฑ(Strong Consistency)์„ ํฌ๊ธฐํ•˜๋Š” ๋Œ€์‹  ์‹œ์Šคํ…œ ๊ฐ€์šฉ์„ฑ(Availability)๊ณผ ํ™•์žฅ์„ฑ์„ ์–ป๊ฒŒ ๋˜๋Š” ๋ถ„์‚ฐ ์ปดํ“จํŒ…์˜ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„ ์›๋ฆฌ[20]. - [[Event Sourcing]] - ์—ฐ๊ฒฐ ์ด์œ : ์ƒํƒœ์˜ ์ตœ์ข… ๊ฒฐ๊ณผ๋งŒ ์ €์žฅํ•˜๋Š” ๋Œ€์‹  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ ๋ณ€ํ™”(์ด๋ฒคํŠธ) ์ „์ฒด๋ฅผ ๋ถˆ๋ณ€์˜ ๋กœ๊ทธ๋กœ ์ €์žฅํ•˜๋Š” ํŒจํ„ด์œผ๋กœ, EDA์™€ ๊ฐ•ํ•œ ์‹œ๋„ˆ์ง€๋ฅผ ๋‚ธ๋‹ค. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ณผ๊ฑฐ ์ด๋ฒคํŠธ ์žฌ์‹คํ–‰(Replay)์„ ํ†ตํ•œ ์‹œ์Šคํ…œ ์ƒํƒœ ๋ณต์›, ์™„๋ฒฝํ•œ ๊ฐ์‚ฌ(Audit) ์ถ”์ , ๋น„์ฆˆ๋‹ˆ์Šค ์œ ์—ฐ์„ฑ ํ–ฅ์ƒ ๊ธฐ๋ฒ•[26, 27]. ### Deeper Research Questions - ๋Œ€๊ทœ๋ชจ ๋ถ„์‚ฐ EDA ์‹œ์Šคํ…œ์—์„œ ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆผ์˜ ์ˆœ์„œ ๋ณด์žฅ(Ordering)๊ณผ '์ •ํ™•ํžˆ ํ•œ ๋ฒˆ ์ฒ˜๋ฆฌ(Exactly-once processing)'๋ฅผ ๊ธฐ์ˆ ์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ์ตœ์ ํ™”ํ•˜์—ฌ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? - ์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค ํ† ํด๋กœ์ง€์™€ ๋ฉ”๋””์—์ดํ„ฐ ํ† ํด๋กœ์ง€๋ฅผ ํ˜ผํ•ฉํ•œ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ, ๊ฐ ํ† ํด๋กœ์ง€๋ฅผ ์ ์šฉํ•  ๊ฒฝ๊ณ„(Bounded Context)๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์ตœ์ ์˜ ๊ธฐ์ค€์€ ๋ฌด์—‡์ธ๊ฐ€? - EDA์—์„œ ์ด๋ฒคํŠธ ํŽ˜์ด๋กœ๋“œ์— ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฐฉ์‹๊ณผ ํ‚ค(Key)๋งŒ ํฌํ•จํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•  ๋•Œ, ๋Œ€์šฉ๋Ÿ‰ ํŠธ๋ž˜ํ”ฝ ํ™˜๊ฒฝ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์„ฑ๋Šฅ(๋Œ€์—ญํญ ์†Œ๋น„) ๋ฐ ์ผ๊ด€์„ฑ ์ฐจ์ด์˜ ์‹ค์ œ ์‚ฌ๋ก€๋Š” ์–ด๋– ํ•œ๊ฐ€? - ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๊ณผ์ • ์ค‘ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ๋“œ ๋ ˆํ„ฐ ํ(DLQ)์™€ ๋ณด์ƒ ํŠธ๋žœ์žญ์…˜(Compensating Transaction)์„ ๊ฒฐํ•ฉํ•œ ์—๋Ÿฌ ๋ณต๊ตฌ ํŒŒ์ดํ”„๋ผ์ธ ์„ค๊ณ„ ์ „๋žต์€ ๋ฌด์—‡์ธ๊ฐ€? - ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ์—์„œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ค‘๋‹จ ์—†์ด ์—…๋ฐ์ดํŠธ๋˜๊ธฐ ์œ„ํ•ด, ์ด๋ฒคํŠธ ์Šคํ‚ค๋งˆ์˜ ์ง„ํ™”(Schema Evolution)์™€ ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ์ „๋žต์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š”๊ฐ€? ### Practical Application Contexts - **Implementation:** ๋น„์ฆˆ๋‹ˆ์Šค ์ด๋ฒคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ˆ˜์‹ ํ•˜๊ธฐ ์œ„ํ•ด Kafka, RabbitMQ ๋“ฑ๊ณผ ๊ฐ™์€ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค ๋˜๋Š” ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆฌ๋ฐ ํ”Œ๋žซํผ์„ ์‹œ์Šคํ…œ ๊ฐ„์˜ ํ†ต์‹  ์ฑ„๋„๋กœ ๊ตฌ์ถ•ํ•œ๋‹ค[7, 8]. - **System Design:** ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž์ถ”์–ด ์ค‘์•™์ง‘์ค‘์  ์›Œํฌํ”Œ๋กœ์šฐ ์ œ์–ด๊ฐ€ ํ•„์š”ํ•˜๋ฉด ๋ฉ”๋””์—์ดํ„ฐ ํŒจํ„ด์„, ๊ทน๋‹จ์ ์ธ ํ™•์žฅ์„ฑ๊ณผ ๋น ๋ฅธ ์‘๋‹ต์ด ํ•„์š”ํ•˜๋ฉด ๋ธŒ๋กœ์ปค ํŒจํ„ด์„ ์ฑ„ํƒํ•˜๋ฉฐ, ์‹œ์Šคํ…œ์˜ ๋ถ€ํ•˜๋ฅผ ์กฐ์ ˆํ•˜๊ธฐ ์œ„ํ•ด ์ ์ ˆํ•œ ํŽ˜์ด๋กœ๋“œ ์„ค๊ณ„(Keys vs All attributes)๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค[10, 14, 28]. - **Operation / Maintenance:** ๊ฐœ๋ณ„ ์ด๋ฒคํŠธ๋งˆ๋‹ค Correlation ID๋ฅผ ํ•„์ˆ˜์ ์œผ๋กœ ํฌํ•จ์‹œ์ผœ ๋ถ„์‚ฐ ํŠธ๋ ˆ์ด์‹ฑ(Distributed Tracing) ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•จ์œผ๋กœ์จ, ๋น„๋™๊ธฐ ํ˜ธ์ถœ๋กœ ํฉ์–ด์ง„ ์‹œ์Šคํ…œ ๋‚ด์˜ ๋ฌธ์ œ ๋ฐœ์ƒ ์ง€์ ์„ ํšจ์œจ์ ์œผ๋กœ ์‹๋ณ„ํ•˜๊ณ  ๋””๋ฒ„๊น…ํ•œ๋‹ค[21]. - **Learning Path:** ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹œ์Šคํ…œ ๊ฐ„์˜ ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง• ๋ฐ ํ/์ŠคํŠธ๋ฆผ์˜ ์ฐจ์ด๋ฅผ ์ดํ•ดํ•œ ํ›„, ์ตœ์ข… ์ผ๊ด€์„ฑ(Eventual Consistency)์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜ ์„ค๊ณ„(Saga ํŒจํ„ด ๋“ฑ) ๋ฐ ์—๋Ÿฌ ๋ณต์› ์ „๋žต์œผ๋กœ ์ง€์‹์„ ํ™•์žฅํ•œ๋‹ค[20, 29, 30]. - **My Project Relevance:** ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐฉ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋‚˜ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์‹œ์Šคํ…œ(์˜ˆ: IoT ์„ผ์„œ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘, ์ฃผ์‹ ๊ฑฐ๋ž˜ ํ”Œ๋žซํผ, ๋Œ€๊ทœ๋ชจ ์ด์ปค๋จธ์Šค ๋“ฑ) ํ˜น์€ ๋ชจ๋†€๋ฆฌ์‹ ์‹œ์Šคํ…œ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐ„์˜ ํ†ต์‹  ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”์–ด์•ผ ํ•  ๋•Œ ๊ฐ€์žฅ ํ•ต์‹ฌ์ ์ธ ์„ค๊ณ„ ์ „๋žต์œผ๋กœ ๊ฒ€ํ† ๋œ๋‹ค[5, 7, 8, 31]. ### Adjacent Topics - [[Service-Oriented Architecture (SOA)]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ์„œ๋น„์Šค๋ฅผ ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ํ˜ธ์ถœํ•œ๋‹ค๋Š” ์ ์€ ์œ ์‚ฌํ•˜๋‚˜, EDA์˜ ๋น„๋™๊ธฐ ํŠธ๋ฆฌ๊ฑฐ ๋ฐฉ์‹๊ณผ ๋‹ฌ๋ฆฌ ๋™๊ธฐ์‹ ์š”์ฒญ-์‘๋‹ต(Request-Response) ํŒจํ„ด์„ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜๋กœ์„œ ๋ถ„์‚ฐ ํ†ต์‹ ์˜ ์„ค๊ณ„ ์ฐจ์ด๋ฅผ ๋น„๊ต ๋ถ„์„ํ•œ๋‹ค[32, 33]. - [[Space-Based Architecture]] - ํ™•์žฅ ๋ฐฉํ–ฅ: EDA์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ณ ํŠธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌ ๋ฐ ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์•„ํ‚คํ…์ฒ˜๋กœ, ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ณ‘๋ชฉ์„ ์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ ๊ทธ๋ฆฌ๋“œ(In-memory Data Grid)๋กœ ๋Œ€์ฒดํ•˜์—ฌ ํ™•์žฅ์„ฑ์„ ํ™•๋ณดํ•˜๋Š” ์›๋ฆฌ๋ฅผ ํ™•์žฅ ํ•™์Šตํ•œ๋‹ค[34-36]. --- *Last updated: 2026-05-02* --- ### Related Concepts #### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] - [[Microservices Architecture]] - ์—ฐ๊ฒฐ ์ด์œ : ๋Œ€๊ทœ๋ชจ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜์—์„œ ์„œ๋น„์Šค ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ๋‹ค๋‹จ๊ณ„ ํ”„๋กœ์„ธ์Šค(์˜ˆ: ์ „์ž์ƒ๊ฑฐ๋ž˜ ์ฃผ๋ฌธ)๋ฅผ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ํ•˜๊ธฐ ์œ„ํ•ด EDA๊ฐ€ ํ•ต์‹ฌ ํ†ต์‹  ํŒจํ„ด์œผ๋กœ ์ฑ„ํƒ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค [2, 6]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ฑฐ๋Œ€ํ•œ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์ฝ์„ ๋•Œ ๊ฐœ๋ณ„ ์„œ๋น„์Šค๋“ค์ด ์–ด๋–ป๊ฒŒ ๋…๋ฆฝ์ ์ธ ๋น„์ฆˆ๋‹ˆ์Šค ์ปจํ…์ŠคํŠธ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ์ „์ฒด ์‹œ์Šคํ…œ์˜ ํ†ตํ•ฉ๋œ ๋™์ž‘์„ ๋งŒ๋“ค์–ด๋‚ด๋Š”์ง€ ๊ตฌ์กฐ์  ์˜๋„๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [2, 7, 8]. - [[Message Broker]] - ์—ฐ๊ฒฐ ์ด์œ : Apache Kafka๋‚˜ RabbitMQ์™€ ๊ฐ™์€ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋Š” EDA์—์„œ ์ด๋ฒคํŠธ ๋ผ์šฐํŒ…, ์ง€์†์„ฑ, ์ „์†ก ๋ณด์žฅ์„ ๊ด€๋ฆฌํ•˜๋Š” ํ•„์ˆ˜ ์ธํ”„๋ผ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค [3, 5]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ฝ”๋“œ๋ฒ ์ด์Šค ํƒ์ƒ‰ ์‹œ ์ง์ ‘์ ์ธ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ์—†๋Š” ์ƒํ™ฉ์—์„œ, ํŠน์ • ๋ชจ๋“ˆ์ด ๋ฐœํ–‰ํ•œ ๋ฉ”์‹œ์ง€๊ฐ€ ๋ธŒ๋กœ์ปค๋ฅผ ๊ฑฐ์ณ ์–ด๋–ค ์ฝ”๋“œ๋กœ ์ „๋‹ฌ๋˜๋Š”์ง€ ๋Ÿฐํƒ€์ž„ ์—ฐ๊ฒฐ๊ณ ๋ฆฌ๋ฅผ ํ•ด์„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [3, 5]. #### [์ฝ”๋“œ ๋ถ„์„/๋””๋ฒ„๊น… ๊ธฐ๋ฒ•] - [[Execution and Data Flow Tracing]] - ์—ฐ๊ฒฐ ์ด์œ : ๋น„๋™๊ธฐ ์ž‘์—…๊ณผ ๋ฉ”์‹œ์ง€ ํ์— ์˜ํ•ด ์ œ์–ด ํ๋ฆ„์ด ๋ณ€๊ฒฝ๋˜๋Š” EDA์—์„œ๋Š” ์ •์ ์ธ ์ฝ”๋“œ ์ฝ๊ธฐ๋งŒ์œผ๋กœ๋Š” ๋…ผ๋ฆฌ์  ํ๋ฆ„์„ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ค์›Œ ์‹ค์ œ ๋Ÿฐํƒ€์ž„ ์‹คํ–‰ ๊ฒฝ๋กœ๋ฅผ ์—ญ์ถ”์ ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค [9, 10]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋””๋ฒ„๊ฑฐ์˜ ์ค‘๋‹จ์ (Breakpoints)์ด๋‚˜ ๋ถ„์‚ฐ ๋กœ๊น…์„ ํ™œ์šฉํ•˜์—ฌ ์ƒ์‚ฐ์ž๋ถ€ํ„ฐ ์†Œ๋น„์ž๊นŒ์ง€์˜ ๋ณต์žกํ•œ ๋น„๋™๊ธฐ ์ž‘์—… ํ๋ฆ„๊ณผ ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜(Data Flow) ๊ณผ์ •์„ ๋ช…ํ™•ํžˆ ์ถ”์ ํ•˜๋Š” ๋ถ„์„ ์—ญ๋Ÿ‰์„ ํ‚ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [10, 11]. - [[Dead-Letter Queues (DLQ)]] - ์—ฐ๊ฒฐ ์ด์œ : ์‹คํŒจํ•œ ์ด๋ฒคํŠธ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์œผ๋กœ, ์ฝ”๋“œ ๋‚ด์˜ ๋น„๋™๊ธฐ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ์™€ ๋ณต๊ตฌ ๋กœ์ง์ด ์ง‘์ค‘๋œ ์˜์—ญ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค [3, 5]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ณต์žกํ•œ ์‹œ์Šคํ…œ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ ์žฅ์• ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ฒฉ๋ฆฌํ•˜๊ณ  ์•ˆ์ •์„ฑ์„ ์œ ์ง€ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์—๋Ÿฌ ํ•ธ๋“ค๋ง ์„ค๊ณ„ ์›์น™์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [3, 5]. ### Deeper Research Questions - ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ ํ™˜๊ฒฝ์—์„œ ์ƒ์‚ฐ์ž์™€ ์†Œ๋น„์ž ๊ฐ„์˜ ์ง์ ‘์ ์ธ ํ˜ธ์ถœ(Call Stack) ๊ด€๊ณ„๊ฐ€ ์—†์„ ๋•Œ, ์†Œ์Šค ์ฝ”๋“œ๋งŒ์„ ์ฝ์–ด๋‚ด์–ด ์ƒํ–ฅ์‹(Bottom-Up)์œผ๋กœ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ€์žฅ ํšจ์œจ์ ์ธ ์ •์  ๋ถ„์„ ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? - ๋‹จ์ผ ์ด๋ฒคํŠธ๋ฅผ ์—ฌ๋Ÿฌ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๊ฐ€ ๋™์‹œ์— ์†Œ๋น„(Consume)ํ•  ๋•Œ, ํŠน์ • ์„œ๋น„์Šค์˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์ฝ”๋“œ์—๋งŒ ๋ฉฑ๋“ฑ์„ฑ(Idempotency) ๋ณด์žฅ ๋กœ์ง์ด ๋ˆ„๋ฝ๋œ ๊ฒฝ์šฐ ์ด๋ฅผ ์†Œ์Šค ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋‹จ๊ณ„์—์„œ ์‚ฌ์ „์— ์‹๋ณ„ํ•˜๋Š” ์ „๋žต์€ ๋ฌด์—‡์ธ๊ฐ€? - EDA๋ฅผ ์ฑ„ํƒํ•œ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฒ ์ด์Šค๋กœ ์˜จ๋ณด๋”ฉํ•˜๋Š” ์ƒˆ๋กœ์šด ๊ฐœ๋ฐœ์ž๊ฐ€ ๋น„๋™๊ธฐ ํ(Queue)๋‚˜ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์›Œ์ปค ๋“ฑ์œผ๋กœ ํŒŒํŽธํ™”๋œ ์‹ค์ œ ์ œ์–ด ํ๋ฆ„(Control Flow)์„ ๋น ๋ฅด๊ฒŒ ๋งตํ•‘ํ•˜๊ณ  ์‹œ๊ฐํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? - ์‹œ์Šคํ…œ์ด ๋ฐœ์ „ํ•จ์— ๋”ฐ๋ผ ์ด๋ฒคํŠธ์˜ ๊ตฌ์กฐ๋‚˜ ์Šคํ‚ค๋งˆ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ(Event Versioning), ๊ตฌ๋ฒ„์ „๊ณผ ์‹ ๋ฒ„์ „ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์—ญํ˜ธํ™˜์„ฑ ์žˆ๊ฒŒ ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌ์กฐํ™”ํ•ด์•ผ ํ•˜๋Š”๊ฐ€? - EDA์—์„œ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ์‹คํŒจ ์‹œ DLQ(Dead-Letter Queue)๋กœ ๋ณด๋‚ด์ง€๊ธฐ ์ „, ์ฝ”๋“œ ๋ ˆ๋ฒจ์—์„œ ์žฌ์‹œ๋„(Retry) ๋ฐ ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค(Circuit Breaker) ํŒจํ„ด์€ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ๋˜๋ฉฐ ๋ถ€์ˆ˜ ํšจ๊ณผ(Side-effect)๋ฅผ ์–ด๋–ป๊ฒŒ ์ œ์–ดํ•˜๋Š”๊ฐ€? ### Practical Application Contexts - **Implementation:** ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•˜๊ณ  ์ˆ˜์‹ ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ณ , ํ•ธ๋“ค๋Ÿฌ์— ๋ฉฑ๋“ฑ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ๋กœ์ง๊ณผ ์žฌ์‹œ๋„(Retry) ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํฌํ•จํ•˜์—ฌ ๊ฒฌ๊ณ ํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค [5]. - **System Design:** ํŠธ๋ž˜ํ”ฝ ๋ณ€๋™์ด ์‹ฌํ•˜๊ฑฐ๋‚˜ ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ(์˜ˆ: IoT ์„ผ์„œ, ์ฃผ์‹ ๊ฑฐ๋ž˜)์ด ํ•„์š”ํ•œ ํ™˜๊ฒฝ์—์„œ ์ง์ ‘ ํ˜ธ์ถœ ๊ธฐ๋ฐ˜์˜ ๋ชจ๋†€๋ฆฌ์‹ ์„ค๊ณ„ ๋Œ€์‹ , ๋А์Šจํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋œ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ฐ€์ง„ ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค [1, 2]. - **Operation / Maintenance:** ๋ธŒ๋กœ์ปค ์ธํ”„๋ผ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ๋ฐ๋“œ ๋ ˆํ„ฐ ํ(DLQ)์— ์Œ“์ด๋Š” ์‹คํŒจ ์ด๋ฒคํŠธ๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ถ„์„ํ•˜์—ฌ ๋น„๋™๊ธฐ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์˜ ๋…ผ๋ฆฌ์  ๋ฒ„๊ทธ๋‚˜ ํƒ€์ž„์•„์›ƒ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค [5]. - **Learning Path:** ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค์˜ ๊ฐœ๋…๊ณผ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์„ ์„ ํ–‰ ํ•™์Šตํ•œ ํ›„, ๋ถ„์‚ฐ ์ถ”์ (Tracing) ๊ธฐ์ˆ ๊ณผ ์ด๋ฒคํŠธ ์Šคํ† ๋ฐ(Event Storming) ์›Œํฌ์ˆ์„ ํ†ตํ•œ ๋„๋ฉ”์ธ ์ด๋ฒคํŠธ ์‹๋ณ„ ๋ฐฉ๋ฒ•์„ ์ตํžˆ๋Š” ๊ณผ์ •์œผ๋กœ ๋‚˜์•„๊ฐ‘๋‹ˆ๋‹ค [4, 12]. - **My Project Relevance:** ๋ชจ๋†€๋ฆฌ์‹ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ์ „ํ™˜(Refactoring)ํ•˜๊ฑฐ๋‚˜, ๊ธด ์ง€์—ฐ ์‹œ๊ฐ„์ด ํ•„์š”ํ•œ ์ž‘์—…(์•Œ๋ฆผ ์ „์†ก, ๊ฒฐ์ œ ์Šน์ธ ๋Œ€๊ธฐ)์„ ๋™๊ธฐ ๋กœ์ง์—์„œ ๋ถ„๋ฆฌํ•˜์—ฌ ์‘๋‹ต์„ฑ์„ ์ตœ์ ํ™”ํ•ด์•ผ ํ•  ๋•Œ ์ด ํŒจํ„ด๊ณผ ๋ถ„์„ ์ง€์‹์„ ์ฆ‰๊ฐ์ ์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [1, 2, 6]. ### Adjacent Topics - [[Domain-Driven Design (DDD)]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋ถ„์„ํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ฒคํŠธ ์Šคํ† ๋ฐ(Event Storming)์„ ์ง„ํ–‰ํ•˜๊ณ , ๋„๋ฉ”์ธ ์ด๋ฒคํŠธ(Domain Events)๋ฅผ ๋„์ถœํ•˜์—ฌ EDA์˜ ํ†ต์‹  ์„ค๊ณ„ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ผ๋Š” ๋ฐฉ๋ฒ•๋ก ์œผ๋กœ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค [12, 13]. - [[Cloud-Native Architecture]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ด๋ฒคํŠธ๋ฅผ ๋น„๋™๊ธฐ๋กœ ์†Œ๋น„ํ•˜๋Š” ๋…๋ฆฝ์ ์ธ ์ปดํฌ๋„ŒํŠธ๋“ค์ด Docker๋‚˜ Kubernetes์™€ ๊ฐ™์€ ์ปจํ…Œ์ด๋„ˆ ๋ฐ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ํ™˜๊ฒฝ์—์„œ ์–ด๋–ป๊ฒŒ ๋ฌด์ƒํƒœ(Stateless)๋กœ ํƒ„๋ ฅ์  ํ™•์žฅ(Autoscaling)์„ ๋‹ฌ์„ฑํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์ธํ”„๋ผ ์ง€์‹์œผ๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค [14-16]. --- *Last updated: 2026-05-02*