--- category: Unified tags: [auto-consolidated, technical-documentation] title: [[Event-Driven Architecture]] last_updated: 2026-05-02 --- # [[Event-Driven Architecture]] ## ๐Ÿ“Œ Brief Summary Event-Driven Architecture(EDA)๋Š” ์‹œ์Šคํ…œ ๊ตฌ์„ฑ ์š”์†Œ๋“ค์ด ์ง์ ‘์ ์ธ ์š”์ฒญ์ด ์•„๋‹Œ ๋น„๋™๊ธฐ์ ์ธ ์ด๋ฒคํŠธ(์ƒํƒœ์˜ ์˜๋ฏธ ์žˆ๋Š” ๋ณ€ํ™”๋‚˜ ์ž‘์—…)์˜ ์ƒ์„ฑ, ๊ฐ์ง€ ๋ฐ ๋ฐ˜์‘์„ ํ†ตํ•ด ํ†ต์‹ ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์ž…๋‹ˆ๋‹ค [1-3]. ์ด ์•„ํ‚คํ…์ฒ˜๋Š” ์ด๋ฒคํŠธ ์ƒ์‚ฐ์ž, ์†Œ๋น„์ž, ๊ทธ๋ฆฌ๊ณ  ์ด๋ฒคํŠธ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์ฑ„๋„๋กœ ๊ตฌ์„ฑ๋˜์–ด ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๊ทน๋„๋กœ ๋‚ฎ์ถฅ๋‹ˆ๋‹ค [4-6]. ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋†’์€ ํ™•์žฅ์„ฑ, ๋‚ด๊ฒฐํ•จ์„ฑ ๋ฐ ์‹ค์‹œ๊ฐ„ ์‘๋‹ต์„ฑ์„ ์ œ๊ณตํ•˜์—ฌ IoT, ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ, ๋Œ€๊ทœ๋ชจ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์‹œ์Šคํ…œ ๋“ฑ์— ๋„๋ฆฌ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค [4, 7, 8]. --- > "๋ง ๊ฑธ์ง€ ๋งˆ, ๊ทธ๋ƒฅ ๊ณต์ง€์‚ฌํ•ญ์„ ํ™•์ธํ•ด." ์ƒํƒœ ๋ณ€ํ™”(์ด๋ฒคํŠธ)๋ฅผ ๋ฐœํ–‰ํ•˜๊ณ  ๊ตฌ๋…ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์‹œ์Šคํ…œ์„ ๊ตฌ์„ฑํ•˜์—ฌ, ์„œ๋น„์Šค ๊ฐ„์˜ ์ง์ ‘์ ์ธ ํ˜ธ์ถœ์„ ์—†์• ๊ณ  ์œ ์—ฐํ•œ ํ™•์žฅ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ์„ค๊ณ„๋‹ค. --- **์ด๋ฒคํŠธ ์ฃผ๋„ ์•„ํ‚คํ…์ฒ˜(Event-Driven Architecture, EDA)**๋Š” ์‹œ์Šคํ…œ์˜ ์ƒํƒœ ๋ณ€ํ™”(Event)๋ฅผ ๊ฐ์ง€ํ•˜๊ณ , ์ด๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ „ํŒŒํ•˜์—ฌ ๊ด€๋ จ ์ปดํฌ๋„ŒํŠธ๋“ค์ด ๋ฐ˜์‘ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ์„ค๊ณ„ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์„œ๋น„์Šค ๊ฐ„์˜ ์ง์ ‘์ ์ธ ํ˜ธ์ถœ(Request-Response) ๋Œ€์‹  ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋ฅผ ํ†ตํ•œ **๋ฐœํ–‰-๊ตฌ๋…(Publish-Subscribe)** ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ, ์‹œ์Šคํ…œ ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌ์— ์ ํ•ฉํ•œ ํƒ„๋ ฅ์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ํ™•๋ณดํ•ฉ๋‹ˆ๋‹ค. --- --- > ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜(EDA)๋Š” ์‚ฌ์šฉ์ž์˜ ํด๋ฆญ, ๊ธˆ์œต ํŠธ๋žœ์žญ์…˜, ์„ผ์„œ ํŒ๋…๊ณผ ๊ฐ™์€ '์ด๋ฒคํŠธ'์˜ ์ƒ์„ฑ๊ณผ ์†Œ๋น„๋ฅผ ํ†ตํ•ด ์‹œ์Šคํ…œ ๊ตฌ์„ฑ ์š”์†Œ๋“ค์ด ๋น„๋™๊ธฐ์ ์œผ๋กœ ํ†ต์‹ ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„ ํŒจ๋Ÿฌ๋‹ค์ž„์ž…๋‹ˆ๋‹ค [1, 2]. ์ „ํ†ต์ ์ธ ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ๋‚˜ ์ง์ ‘์ ์ธ API ํ˜ธ์ถœ ๋ฐฉ์‹๊ณผ ๋‹ฌ๋ฆฌ, ๋ฐ์ดํ„ฐ๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ์ฆ‰์‹œ ๋ฐ˜์‘ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜์—ฌ ์‹œ์Šคํ…œ ๊ฐ„์˜ ๋А์Šจํ•œ ๊ฒฐํ•ฉ(Loose coupling)์„ ์ด‰์ง„ํ•ฉ๋‹ˆ๋‹ค [1-3]. ์ด๋ฅผ ํ†ตํ•ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐœ๋ฐœ, ๋ฐฐํฌ ๋ฐ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์˜ˆ์ธก ๋ถˆ๊ฐ€๋Šฅํ•œ ๋†’์€ ๋ถ€ํ•˜์™€ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๊ฐ€ ์š”๊ตฌ๋˜๋Š” ํ˜„๋Œ€์˜ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์— ํ•„์ˆ˜์ ์ธ ์•„ํ‚คํ…์ฒ˜๋กœ ํ‰๊ฐ€๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค [2]. --- ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜(Event-Driven Architecture, EDA)๋Š” ์‹œ์Šคํ…œ ์ปดํฌ๋„ŒํŠธ๋“ค์ด ์„œ๋กœ ์ง์ ‘ ํ˜ธ์ถœํ•˜๋Š” ๋Œ€์‹  ์ด๋ฒคํŠธ์˜ ์ƒ์„ฑ(Production)๊ณผ ์†Œ๋น„(Consumption)๋ฅผ ํ†ตํ•ด ๋น„๋™๊ธฐ์ ์œผ๋กœ ํ†ต์‹ ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ์‹œ์Šคํ…œ ์„ค๊ณ„ ํŒจ๋Ÿฌ๋‹ค์ž„์ด๋‹ค [1]. ์ด ๊ตฌ์กฐ์—์„œ๋Š” ๋ฒ„ํŠผ ํด๋ฆญ, ์„ผ์„œ ๊ฐ’ ๋ณ€๊ฒฝ, ์ƒˆ๋กœ์šด ์ฃผ๋ฌธ ๋“ฑ๊ณผ ๊ฐ™์€ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, ํ•ด๋‹น ์ด๋ฒคํŠธ์— ๊ด€์‹ฌ ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ๋“ค๋งŒ์ด ๋ฐ˜์‘ํ•˜์—ฌ ๊ฐ์ž์˜ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•œ๋‹ค [1]. ์ด๋ฅผ ํ†ตํ•ด ๊ตฌ์„ฑ ์š”์†Œ ๊ฐ„์˜ ๋А์Šจํ•œ ๊ฒฐํ•ฉ(Loose coupling)์„ ์ด‰์ง„ํ•˜๋ฉฐ, ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์™€ ์˜ˆ์ธก ๋ถˆ๊ฐ€๋Šฅํ•œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์œ ์—ฐํ•˜๊ณ  ๋…๋ฆฝ์ ์œผ๋กœ ์Šค์ผ€์ผ๋งํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค [1, 2]. ## ๐Ÿ“– Core Content ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜๋Š” ์ฃผ๋กœ ๋‹ค์Œ์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ์™€ ์„ค๊ณ„ ๋ฐฉ์‹์œผ๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. * **ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ (Core Components):** * **Event Producers (์ด๋ฒคํŠธ ์ƒ์‚ฐ์ž):** ์‚ฌ์šฉ์ž ํด๋ฆญ์ด๋‚˜ ์„ผ์„œ ๋ฐ์ดํ„ฐ ํฌ์ฐฉ ๋“ฑ ํŠน์ • ๋™์ž‘์ด๋‚˜ ์ƒํƒœ ๋ณ€ํ™”๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ด๋ฒคํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค [4, 9]. * **Event Consumers (์ด๋ฒคํŠธ ์†Œ๋น„์ž/Sinks):** ๋ฐœ์ƒํ•œ ์ด๋ฒคํŠธ์— ๋ฐ˜์‘ํ•˜์—ฌ ํŠน์ • ์ž‘์—…์ด๋‚˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ƒ์‚ฐ์ž๋Š” ์†Œ๋น„์ž์˜ ์กด์žฌ๋‚˜ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์„ ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค [4, 9]. * **Event Channels (์ด๋ฒคํŠธ ์ฑ„๋„):** ์ƒ์‚ฐ์ž์™€ ์†Œ๋น„์ž ์‚ฌ์ด์—์„œ ์ด๋ฒคํŠธ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฒฝ๋กœ๋กœ, ๋ณดํ†ต Kafka, RabbitMQ์™€ ๊ฐ™์€ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋‚˜ ํ๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค [4, 10]. * **Event Processors (์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๊ธฐ):** ์ด๋ฒคํŠธ๋ฅผ ์†Œ๋น„์ž์— ๋„๋‹ฌํ•˜๊ธฐ ์ „์— ํ•„ํ„ฐ๋ง, ๋ณ€ํ™˜ ๋˜๋Š” ๋ผ์šฐํŒ…ํ•˜๋Š” ์ค‘๊ฐ„ ๊ตฌ์„ฑ ์š”์†Œ์ž…๋‹ˆ๋‹ค [4]. * **์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ์Šคํƒ€์ผ (Event Processing Styles):** * **๋‹จ์ˆœ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ (Simple event processing):** ํŠน์ • ์กฐ๊ฑด์˜ ๋ณ€ํ™”์— ์ง์ ‘์ ์œผ๋กœ ๊ด€๋ จ๋œ ์ด๋ฒคํŠธ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ํ›„์† ์ž‘์—…์„ ์œ ๋„ํ•ฉ๋‹ˆ๋‹ค [11]. * **์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆผ ์ฒ˜๋ฆฌ (Event stream processing):** ์ผ๋ฐ˜์ ์ด๊ณ  ์˜๋ฏธ ์žˆ๋Š” ์ด๋ฒคํŠธ๋“ค์„ ๊ตฌ๋…์ž์—๊ฒŒ ์ŠคํŠธ๋ฆฌ๋ฐํ•˜์—ฌ ์‹ค์‹œ๊ฐ„ ์ •๋ณด ํ๋ฆ„์„ ์ฃผ๋„ํ•ฉ๋‹ˆ๋‹ค [12]. * **๋ณตํ•ฉ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ (Complex event processing, CEP):** ์žฅ๊ธฐ๊ฐ„์— ๊ฑธ์ณ ๋ฐœ์ƒํ•˜๋Š” ์—ฌ๋Ÿฌ ์ด๋ฒคํŠธ์˜ ์ธ๊ณผ์ , ์‹œ๊ฐ„์ , ๊ณต๊ฐ„์  ํŒจํ„ด์„ ๋ถ„์„ํ•˜์—ฌ ์ด์ƒ ์ง•ํ›„๋‚˜ ์œ„ํ˜‘, ๊ธฐํšŒ ๋“ฑ์„ ๊ฐ์ง€ํ•ฉ๋‹ˆ๋‹ค [13, 14]. * **์ฃผ์š” ํ† ํด๋กœ์ง€ (Topologies):** * **Broker Topology (๋ธŒ๋กœ์ปค ํ† ํด๋กœ์ง€):** ์ค‘์•™ ์กฐ์ •์ž ์—†์ด ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์‹œ์Šคํ…œ ์ „์ฒด๋‚˜ ํŠน์ • ์ฑ„๋„๋กœ ์ด๋ฒคํŠธ๋ฅผ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค [15, 16]. ์ด๋ฅธ๋ฐ” 'Dumb pipe' ์—ญํ• ์„ ํ•˜๋ฉฐ, ํ™•์žฅ์ด ์šฉ์ดํ•˜๊ณ  ๊ฒฐํ•ฉ๋„๊ฐ€ ๊ทนํžˆ ๋‚ฎ์•„ ์‘๋‹ต์„ฑ๊ณผ ๋‚ด๊ฒฐํ•จ์„ฑ์ด ๋›ฐ์–ด๋‚˜์ง€๋งŒ ๋ถ„์‚ฐ๋œ ํ๋ฆ„์„ ํŒŒ์•…ํ•˜๊ธฐ๋Š” ์–ด๋ ต์Šต๋‹ˆ๋‹ค [15, 17]. * **Mediator Topology (๋ฉ”๋””์—์ดํ„ฐ ํ† ํด๋กœ์ง€):** ์ค‘์•™์˜ ์ด๋ฒคํŠธ ๋ฉ”๋””์—์ดํ„ฐ(์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ)๊ฐ€ ์ด๋ฒคํŠธ์˜ ํ๋ฆ„, ์—๋Ÿฌ ์ฒ˜๋ฆฌ, ๋ณต๊ตฌ ๋“ฑ์„ ์ œ์–ดํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค [15, 18, 19]. 'Smart pipe'๋กœ์„œ ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค๋‚˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ์— ์œ ๋ฆฌํ•˜์ง€๋งŒ, ๋ฉ”๋””์—์ดํ„ฐ๊ฐ€ ๋ณ‘๋ชฉ ํ˜„์ƒ์ด๋‚˜ ๋‹จ์ผ ์žฅ์• ์ (Single Point of Failure)์ด ๋  ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค [15, 17]. * **์ด๋ฒคํŠธ ๊ตฌ์กฐ ๋ฐ ํŽ˜์ด๋กœ๋“œ ์ „๋žต (Event Structure & Payload):** ์ด๋ฒคํŠธ ํŽ˜์ด๋กœ๋“œ(๋ณธ๋ฌธ)๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ๋Š” ๋ชจ๋“  ํ•„์š” ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ• ์ง€(๋„คํŠธ์›Œํฌ ๋Œ€์—ญํญ์ด ์ปค์ง€์ง€๋งŒ ์ฆ‰๊ฐ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ), ํ˜น์€ ์ฐธ์กฐ ํ‚ค(Key/ID)๋งŒ ํฌํ•จํ•˜์—ฌ ์†Œ๋น„์ž๊ฐ€ ๋ณ„๋„ ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ์กฐํšŒํ•˜๊ฒŒ ํ• ์ง€(๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์€ ๋†’์œผ๋‚˜ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Œ)๋ฅผ ๊ฒฐ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [20, 21]. --- - **Components**: - **Event Producer**: ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ์ด๋ฒคํŠธ๋ฅผ ๋ฐœํ–‰ํ•จ. - **Event Bus / Broker**: ๋ฐœํ–‰๋œ ์ด๋ฒคํŠธ๋ฅผ ์ „๋‹ฌํ•จ (Kafka, RabbitMQ ๋“ฑ). - **Event Consumer**: ํ•„์š”ํ•œ ์ด๋ฒคํŠธ๋ฅผ ๊ตฌ๋…ํ•˜์—ฌ ๋กœ์ง์„ ์‹คํ–‰ํ•จ. - **Benefits**: - **Decoupling**: ์ƒ์‚ฐ์ž๋Š” ์†Œ๋น„์ž๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€ ์•Œ ํ•„์š”๊ฐ€ ์—†๋‹ค. - **[[Scalability|Scalability]]**: ํŠธ๋ž˜ํ”ฝ ๊ธ‰์ฆ ์‹œ ๋ฉ”์‹œ์ง€ ํ๋ฅผ ํ†ตํ•ด ๋ถ€ํ•˜๋ฅผ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. - **Responsiveness**: ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ํ†ตํ•ด ์ฆ‰๊ฐ์ ์ธ ์‚ฌ์šฉ์ž ํ”ผ๋“œ๋ฐฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. --- ### 1. ํ•ต์‹ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜: ๋น„๋™๊ธฐ ํ†ต์‹  * **์ด๋ฒคํŠธ ์ƒ์‚ฐ์ž(Producer):** ์ƒํƒœ ๋ณ€ํ™”๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ด๋ฒคํŠธ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค์— ๋ฐœํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋ˆ„๊ฐ€ ์ด ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›์„์ง€ ์•Œ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. * **๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค(Message Broker):** ๋ฐœํ–‰๋œ ์ด๋ฒคํŠธ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ด€์‹ฌ ์žˆ๋Š” ์†Œ๋น„์ž์—๊ฒŒ ๋ผ์šฐํŒ…ํ•ฉ๋‹ˆ๋‹ค. (์˜ˆ: Apache Kafka, RabbitMQ, AWS EventBridge) * **์ด๋ฒคํŠธ ์†Œ๋น„์ž(Consumer):** ์ž์‹ ์—๊ฒŒ ํ•„์š”ํ•œ ์ด๋ฒคํŠธ๋ฅผ ๊ตฌ๋…ํ•˜์—ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ƒ์‚ฐ์ž์˜ ์ƒํƒœ๋‚˜ ์œ„์น˜๋ฅผ ์•Œ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ### 2. ์ฃผ์š” ์„ค๊ณ„ ํŒจํ„ด * **๋ฐœํ–‰-๊ตฌ๋… (Pub-Sub):** ์ผ๋Œ€๋‹ค ํ†ต์‹ ์œผ๋กœ, ํ•˜๋‚˜์˜ ์ด๋ฒคํŠธ๊ฐ€ ์—ฌ๋Ÿฌ ์†Œ๋น„์ž์—๊ฒŒ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. * **์ด๋ฒคํŠธ ์†Œ์‹ฑ (Event Sourcing):** ์‹œ์Šคํ…œ์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๋Š” ๋Œ€์‹ , ๋ฐœ์ƒํ•œ ๋ชจ๋“  ์ด๋ฒคํŠธ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์ €์žฅํ•˜์—ฌ ์ƒํƒœ๋ฅผ ์žฌ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. * **CQRS:** ๋ช…๋ น(์ƒํƒœ ๋ณ€๊ฒฝ)๊ณผ ์กฐํšŒ(์ƒํƒœ ๋ฐ˜ํ™˜)๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ , ๋น„๋™๊ธฐ ์ด๋ฒคํŠธ๋ฅผ ํ†ตํ•ด ๋‘ ๋ชจ๋ธ ๊ฐ„์˜ ๋™๊ธฐํ™”๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ### 3. ์‹ค์ „ ๊ณ ๋ ค ์‚ฌํ•ญ * **๋ฉฑ๋“ฑ์„ฑ (Idempotency):** ๋™์ผํ•œ ์ด๋ฒคํŠธ๊ฐ€ ์ค‘๋ณต ์ „๋‹ฌ๋˜๋”๋ผ๋„ ๊ฒฐ๊ณผ๊ฐ€ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. * **์ˆœ์„œ ๋ณด์žฅ (Ordering):** ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, ๋ธŒ๋กœ์ปค์˜ ํŒŒํ‹ฐ์…”๋‹ ์ „๋žต์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. * **์ตœ์ข… ์ผ๊ด€์„ฑ (Eventual Consistency):** ๋ถ„์‚ฐ ์‹œ์Šคํ…œ ํŠน์„ฑ์ƒ ๋ฐ์ดํ„ฐ๊ฐ€ ์ฆ‰์‹œ ์ผ์น˜ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ์„ ์ „์ œ๋กœ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค. --- --- - **์ž‘๋™ ์›๋ฆฌ ๋ฐ ํ†ต์‹  ๋ฐฉ์‹:** ์‹œ์Šคํ…œ์˜ ํ•œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜๋Š” ๋Œ€์‹ , ์ด๋ฒคํŠธ ์ƒ์‚ฐ์ž๊ฐ€ ์ด๋ฒคํŠธ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค(Message Broker)๋กœ ๋ฐœํ–‰(publish)ํ•˜๋ฉด ์ด๋ฅผ ๊ด€์‹ฌ ์žˆ๋Š” ์†Œ๋น„์ž(consumer)์—๊ฒŒ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋ผ์šฐํŒ…ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค [2, 3]. - **ํ•ต์‹ฌ ์ด์ :** - **๋А์Šจํ•œ ๊ฒฐํ•ฉ ๋ฐ ๋…๋ฆฝ์„ฑ:** ์ปดํฌ๋„ŒํŠธ๋“ค์ด ์„œ๋กœ ์ง์ ‘์ ์ธ ์ง€์‹์„ ๊ฐ€์งˆ ํ•„์š” ์—†์ด ์ž์‹ ์ด ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์†Œ๋น„ํ•˜๋Š” ์ด๋ฒคํŠธ๋งŒ ์•Œ๋ฉด ๋˜๋ฏ€๋กœ ๊ฒฐํ•ฉ๋„๊ฐ€ ๋‚ฎ์•„์ง‘๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐ ์„œ๋น„์Šค๋ฅผ ์™„์ „ํžˆ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐœ๋ฐœ, ๋ฐฐํฌ ๋ฐ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [2]. - **์‹ค์‹œ๊ฐ„ ํ†ต์ฐฐ๋ ฅ ๋ฐ ๋ฐ˜์‘์„ฑ:** ๋ฐ์ดํ„ฐ๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ์ฆ‰์‹œ ์ฒ˜๋ฆฌ(Real-time Data Streaming)ํ•˜์—ฌ ์ €์ง€์—ฐ(Low-latency)์œผ๋กœ ์ฆ‰๊ฐ์ ์ธ ํ†ต์ฐฐ๋ ฅ์„ ์ œ๊ณตํ•˜๋ฉฐ, ๋น„์ฆˆ๋‹ˆ์Šค๊ฐ€ ๊ตฌ์‹ ์ •๋ณด์— ์˜์กดํ•˜์—ฌ ๊ฒฝ์Ÿ๋ ฅ์„ ์žƒ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค [1, 4, 5]. - **ํšจ๊ณผ์ ์ธ ๊ตฌํ˜„์„ ์œ„ํ•œ ์ตœ์ƒ์œ„ ๊ด€ํ–‰ (Actionable Implementation Tips):** - **๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค ์‚ฌ์šฉ:** Apache Kafka, RabbitMQ, AWS Kinesis/SNS/SQS ๋“ฑ ์ „์šฉ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ด๋ฒคํŠธ ๋ผ์šฐํŒ…, ์ง€์†์„ฑ ๋ฐ ์ „๋‹ฌ์„ ๋ณด์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [1, 3, 6]. - **๋ฉฑ๋“ฑ์„ฑ(Idempotency) ์†Œ๋น„์ž์˜ ์„ค๊ณ„:** ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ ๋™์ผํ•œ ์ด๋ฒคํŠธ๊ฐ€ ์—ฌ๋Ÿฌ ๋ฒˆ ์ฒ˜๋ฆฌ๋˜๋”๋ผ๋„ ์˜ค๋ฅ˜๋‚˜ ๋ฐ์ดํ„ฐ ์ค‘๋ณต์„ ์ผ์œผํ‚ค์ง€ ์•Š๋„๋ก ์ด๋ฒคํŠธ ์†Œ๋น„์ž(ํ•ธ๋“ค๋Ÿฌ)๋ฅผ ๋ฉฑ๋“ฑ์„ฑ์„ ๊ฐ€์ง€๊ฒŒ ๊ตฌ์ถ•ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [5-7]. - **DLQs (Dead-Letter Queues) ๊ตฌํ˜„:** ์—ฌ๋Ÿฌ ๋ฒˆ์˜ ์žฌ์‹œ๋„ ํ›„์—๋„ ์ฒ˜๋ฆฌ๋˜์ง€ ๋ชปํ•œ ์‹คํŒจ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณ„๋„์˜ ํ(DLQ)๋กœ ๊ฒฉ๋ฆฌํ•จ์œผ๋กœ์จ, ๋‹จ์ผ ์‹คํŒจ ๋ฉ”์‹œ์ง€๊ฐ€ ์ „์ฒด ์‹œ์Šคํ…œ์„ ์ฐจ๋‹จํ•˜๋Š” ๊ฒƒ์„ ๋ง‰๊ณ  ๋‚˜์ค‘์— ์›์ธ ๋ถ„์„์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [6, 7]. - **์Šคํ‚ค๋งˆ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ([[Schema|Schema]] Registry) ๋„์ž…:** ์ƒ์‚ฐ์ž์™€ ์†Œ๋น„์ž ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๊ณ„์•ฝ์„ ๊ฐ•์ œํ•˜์—ฌ ์‹œ์Šคํ…œ ์ „๋ฐ˜์— ๊ตฌ์กฐ ๋ถˆ์ผ์น˜๋‚˜ ํ’ˆ์งˆ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ์‚ฌ์ „์— ๋ฐฉ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [7]. - **์†Œ๋น„์ž ์ง€์—ฐ (Consumer Lag) ๋ชจ๋‹ˆํ„ฐ๋ง:** ์†Œ๋น„์ž๊ฐ€ ์ƒ์‚ฐ๋œ ๋ฐ์ดํ„ฐ ๋ณผ๋ฅจ์„ ๋”ฐ๋ผ๊ฐ€์ง€ ๋ชปํ•ด ๋ฐœ์ƒํ•˜๋Š” ์ง€์—ฐ ํ˜„์ƒ์„ ์ง€์†์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜์—ฌ ๋ณ‘๋ชฉ๊ณผ ๋ฐ์ดํ„ฐ์˜ ์ง„๋ถ€ํ™”๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค [7]. - **์ฃผ์š” ํ™œ์šฉ ์‚ฌ๋ก€:** ํ•€ํ…Œํฌ์˜ ์‚ฌ๊ธฐ ํƒ์ง€(Fraud detection) ๋ฐ ์‹ค์‹œ๊ฐ„ ์ฃผ์‹ ๊ฑฐ๋ž˜, ์ด์ปค๋จธ์Šค์˜ ์‹ค์‹œ๊ฐ„ ์žฌ๊ณ  ๊ด€๋ฆฌ ๋ฐ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜(๊ฒฐ์ œ ํ”„๋กœ์„ธ์Šค ๋“ฑ), IoT ๊ธฐ๊ธฐ ๋ชจ๋‹ˆํ„ฐ๋ง ๋“ฑ ์ฆ‰๊ฐ์ ์ธ ๋ฐ˜์‘์ด ํ•„์š”ํ•œ ๊ณ ๋ถ€ํ•˜ ์‹œ์Šคํ…œ ์ „๋ฐ˜์— ํญ๋„“๊ฒŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค [1, 3-5]. --- * **ํ•ต์‹ฌ ์ž‘๋™ ์›๋ฆฌ:** ์ด๋ฒคํŠธ ์ƒ์‚ฐ์ž(Producer)๊ฐ€ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค(Message Broker)๋กœ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœํ–‰ํ•˜๋ฉด, ๋ธŒ๋กœ์ปค๊ฐ€ ์ด๋ฅผ ๊ด€์‹ฌ ์žˆ๋Š” ๋ชจ๋“  ์†Œ๋น„์ž(Consumers)์—๊ฒŒ ๋ผ์šฐํŒ…ํ•˜์—ฌ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋„๋ก ํ•œ๋‹ค [1, 3]. * **์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ:** ์•„ํ‚คํ…์ฒ˜๋Š” ์ด๋ฒคํŠธ ์ƒ์‚ฐ์ž, ์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค(์˜ˆ: Apache Kafka, RabbitMQ), ์ด๋ฒคํŠธ ์†Œ๋น„์ž, ์ด๋ฒคํŠธ ์ €์žฅ์†Œ(Event Store), ๊ทธ๋ฆฌ๊ณ  ์ฒ˜๋ฆฌ์— ์‹คํŒจํ•œ ์ด๋ฒคํŠธ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๊ฒฉ๋ฆฌํ•˜๋Š” ๋ฐ๋“œ ๋ ˆํ„ฐ ํ(Dead Letter Queue, DLQ)๋กœ ๊ตฌ์„ฑ๋œ๋‹ค [4, 5]. * **์ฃผ์š” ํ™œ์šฉ ์‚ฌ๋ก€:** * **์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ:** ์ฃผ์‹ ๊ฐ€๊ฒฉ ๋ณ€๋™์ด๋ผ๋Š” ์ด๋ฒคํŠธ์— ์—ฌ๋Ÿฌ ์‹œ์Šคํ…œ์ด ๋™์‹œ์— ๋ฐ˜์‘ํ•˜์—ฌ ๋Œ€์‹œ๋ณด๋“œ ์—…๋ฐ์ดํŠธ, ์ž๋™ ๊ฑฐ๋ž˜, ์•Œ๋žŒ ์ „์†ก์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฃผ์‹ ๊ฑฐ๋ž˜ ์‹œ์Šคํ…œ [3]. * **IoT ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ:** ์ค‘์•™ ์ฝ”๋””๋„ค์ดํ„ฐ ์—†์ด ์„ผ์„œ ๋„คํŠธ์›Œํฌ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฐ์ดํ„ฐ ์ด๋ฒคํŠธ๋ฅผ ์†Œ๋น„ํ•˜์—ฌ ๋ถ„์„ํ•˜๊ฑฐ๋‚˜ ์•Œ๋žŒ์„ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” ํ™˜๊ฒฝ [3]. * **๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜:** ์ด์ปค๋จธ์Šค ๊ฒฐ์ œ ์‹œ ๋ณต์žกํ•œ ์ง์ ‘ API ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  '์ฃผ๋ฌธ ์™„๋ฃŒ', '๊ฒฐ์ œ ์ฒ˜๋ฆฌ๋จ' ๋“ฑ์˜ ์ด๋ฒคํŠธ๋ฅผ ์—ฐ์†์ ์œผ๋กœ ๋ฐœ์ƒ์‹œ์ผœ ์žฌ๊ณ ๋‚˜ ๋ฐฐ์†ก ์„œ๋น„์Šค๊ฐ€ ๋ฐ˜์‘ํ•˜๊ฒŒ ํ•˜๋Š” ๋ฐฉ์‹ [3]. * **๊ตฌํ˜„ ๋ชจ๋ฒ” ์‚ฌ๋ก€:** * ์ด๋ฒคํŠธ์˜ ๋ผ์šฐํŒ…, ์ง€์†์„ฑ, ์ „์†ก ๋ณด์žฅ์„ ์ฒ ์ €ํžˆ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ „์šฉ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค ๋˜๋Š” ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค(AWS SNS/SQS ๋“ฑ)๋ฅผ ํ™œ์šฉํ•ด์•ผ ํ•œ๋‹ค [4]. * ์˜ค๋ฅ˜๋‚˜ ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋™์ผํ•œ ์ด๋ฒคํŠธ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์ฒ˜๋ฆฌํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋ฉฑ๋“ฑ์„ฑ(Idempotency) ์žˆ๊ฒŒ ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค [4]. * ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ํ™˜๊ฒฝ์˜ ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด AsyncAPI์™€ ๊ฐ™์€ API ์‚ฌ์–‘ ์–ธ์–ด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ์ „๋žต์ด ์œ ํšจํ•˜๋‹ค [6]. ## โš–๏ธ Trade-offs & Caveats ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜๋Š” ๋†’์€ ํ™•์žฅ์„ฑ๊ณผ ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋šœ๋ ทํ•œ ์ œ์•ฝ๊ณผ ๊ณ ๋ ค ์‚ฌํ•ญ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. * **์ตœ์ข… ์ผ๊ด€์„ฑ (Eventual Consistency):** ๋น„๋™๊ธฐ์  ํŠน์„ฑ์œผ๋กœ ์ธํ•ด ์ƒ์‚ฐ์ž์™€ ์†Œ๋น„์ž ๊ฐ„์˜ ์ƒํƒœ๊ฐ€ ์ฆ‰๊ฐ์ ์œผ๋กœ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ์‹œ๊ฐ„์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค [22, 23]. ํŠน์ • ์ž‘์—…์—์„œ๋Š” ์ด๋Ÿฌํ•œ ์ง€์—ฐ์„ ํ—ˆ์šฉํ•˜๋„๋ก ์‹œ์Šคํ…œ๊ณผ ์ฝ๊ธฐ ์ž‘์—…์„ ์„ค๊ณ„ํ•ด์•ผ ํ•˜์ง€๋งŒ, ์€ํ–‰ ๊ฑฐ๋ž˜์™€ ๊ฐ™์€ ๊ฐ•๋ ฅํ•œ ์ผ๊ด€์„ฑ(Strong consistency)์ด ํ•„์š”ํ•œ ์‹œ์Šคํ…œ์—๋Š” ๋ถ€์ ํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [23, 24]. * **๋””๋ฒ„๊น… ๋ฐ ๊ด€์ธก์„ฑ์˜ ๋ณต์žก์„ฑ:** ๋‹จ์ผ ๋น„์ฆˆ๋‹ˆ์Šค ํŠธ๋žœ์žญ์…˜์ด ๋‹ค์ˆ˜์˜ ๋…๋ฆฝ์ ์ธ ์ƒ์‚ฐ์ž, ์ฑ„๋„, ์†Œ๋น„์ž๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๊ฑฐ์น˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝœ ์Šคํƒ์„ ์ถ”์ ํ•˜๊ธฐ๊ฐ€ ๋งค์šฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค [25]. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋“  ์ด๋ฒคํŠธ์— Correlation ID๋ฅผ ํฌํ•จํ•˜์—ฌ ๋กœ๊ทธ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์‚ฌ์ „ ์„ค๊ณ„๊ฐ€ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค [25]. * **์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ๋ฐ์ดํ„ฐ ์œ ์‹ค ์œ„ํ—˜:** ๋™๊ธฐ์‹ ๋ฐฉ์‹๊ณผ ๋‹ฌ๋ฆฌ ๋น„๋™๊ธฐ ํ™˜๊ฒฝ์—์„œ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋Š” ๊นŒ๋‹ค๋กญ์Šต๋‹ˆ๋‹ค [23]. ์ฒ˜๋ฆฌ ์ค‘ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‹ค์šด๋˜๋ฉด ์ด๋ฒคํŠธ๊ฐ€ ์œ ์‹ค๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์žฌ์ „์†ก ๋งค์ปค๋‹ˆ์ฆ˜, ์ „์šฉ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ํ”„๋กœ์„ธ์„œ, ๋ฐ๋“œ ๋ ˆํ„ฐ ํ(Dead-Letter Queue), ์ฒ˜๋ฆฌ ํ™•์ธ ์ „๊นŒ์ง€ ํ์— ์œ ์ง€ํ•˜๋Š” ๋ฐฉ์‹(Client acknowledge mode) ๋“ฑ์„ ๋„์ž…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [23]. ์—ฌ๋Ÿฌ ์„œ๋น„์Šค์— ๊ฑธ์นœ ํŠธ๋žœ์žญ์…˜ ์‹คํŒจ ์‹œ์—๋Š” ๋ณด์ƒ ํŠธ๋žœ์žญ์…˜(Compensating Transaction)์„ ํ†ตํ•ด ์™„๋ฃŒ๋œ ๋‹จ๊ณ„๋ฅผ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋กค๋ฐฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [23]. * **๊ตฌ์กฐ์  ์˜ค๋ฒ„ํ—ค๋“œ ๋ฐ ๋น„์šฉ:** ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค(Kafka ๋“ฑ)์˜ ๊ด€๋ฆฌ ๋ฐ ํด๋ผ์šฐ๋“œ ์ธํ”„๋ผ ์œ ์ง€ ๋น„์šฉ์ด ์ถ”๊ฐ€๋˜๋ฉฐ, ๋‹จ์ˆœํ•œ CRUD ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ์šฉํ•  ๊ฒฝ์šฐ ์˜ค๋ฒ„์—”์ง€๋‹ˆ์–ด๋ง(Over-engineering)์˜ ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค [22, 26]. * **์ด๋ฒคํŠธ ์ˆœ์„œ ๋ฐ ์ค‘๋ณต ์ฒ˜๋ฆฌ:** ์ˆ˜๋งŽ์€ ์†Œ๋น„์ž๊ฐ€ ๋ณ‘๋ ฌ๋กœ ๋™์ž‘ํ•  ๋•Œ ์ด๋ฒคํŠธ๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ์ค‘๋ณต ์ฒ˜๋ฆฌ๋  ์œ„ํ—˜์ด ์žˆ์œผ๋ฏ€๋กœ, ๋ฉฑ๋“ฑ์„ฑ(Idempotent)์„ ๊ฐ–์ถ˜ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ๋กœ์ง ๊ตฌํ˜„์ด ์š”๊ตฌ๋ฉ๋‹ˆ๋‹ค [23]. --- - ์ด๋ฒคํŠธ ์ฃผ๋„๋Š” ์‹œ์Šคํ…œ ํ๋ฆ„์„ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ ๋‹ค(Where did this event come from?). ๋˜ํ•œ '๊ฒฐ๊ณผ์  ์ผ๊ด€์„ฑ(Eventual Consistency)'์„ ์ˆ˜์šฉํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ๊ธˆ์œต ๊ฑฐ๋ž˜์ฒ˜๋Ÿผ ์›์ž์„ฑ์ด ์ค‘์š”ํ•œ ์ž‘์—…์—๋Š” ์„ค๊ณ„ ๋‚œ์ด๋„๊ฐ€ ๊ธ‰์ƒ์Šนํ•œ๋‹ค. ๋ถ„์‚ฐ ์ถ”์ (Distributed Tracing) ๋„๊ตฌ ์—†์ด๋Š” ์žฌ์•™์ด ๋  ์ˆ˜ ์žˆ๋‹ค. --- ### โœ… Benefits * **๋А์Šจํ•œ ๊ฒฐํ•ฉ (Loose Coupling):** ์„œ๋น„์Šค ๊ฐ„ ์˜์กด์„ฑ์ด ์ œ๊ฑฐ๋˜์–ด ๋…๋ฆฝ์ ์ธ ๋ฐฐํฌ์™€ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. * **๋†’์€ ํ™•์žฅ์„ฑ:** ์†Œ๋น„์ž(Worker)๋ฅผ ๋Š˜๋ ค ์ฒ˜๋ฆฌ๋Ÿ‰์„ ์‰ฝ๊ฒŒ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. * **๋‚ด๊ฒฐํ•จ์„ฑ:** ํŠน์ • ์†Œ๋น„์ž๊ฐ€ ๋‹ค์šด๋˜๋”๋ผ๋„ ๋ธŒ๋กœ์ปค๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๊ด€ํ•˜๋ฏ€๋กœ ๋ฐ์ดํ„ฐ ์œ ์‹ค์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ### โš ๏ธ Challenges * **๋””๋ฒ„๊น… ๋ฐ ์ถ”์ :** ๋ถ„์‚ฐ๋œ ๋น„๋™๊ธฐ ํ๋ฆ„์œผ๋กœ ์ธํ•ด ์žฅ์•  ๋ฐœ์ƒ ์‹œ ์ „์ฒด ์‹คํ–‰ ๊ฒฝ๋กœ๋ฅผ ์ถ”์ ํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. * **์šด์˜ ๋ณต์žก์„ฑ:** ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค ์ธํ”„๋ผ ๊ด€๋ฆฌ์— ์ถ”๊ฐ€ ๋น„์šฉ๊ณผ ์ „๋ฌธ ์ง€์‹์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. * **๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ:** ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜ ๊ตฌํ˜„์ด ๊นŒ๋‹ค๋กœ์šฐ๋ฉฐ, ์ตœ์ข… ์ผ๊ด€์„ฑ ๋ชจ๋ธ์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. --- --- - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** Programming & Language ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. --- * **๋†’์€ ๊ตฌํ˜„ ๋ฐ ์šด์˜ ๋ณต์žก๋„:** ๋น„๋™๊ธฐ์„ฑ(Asynchronous complexity)๊ณผ ์ด๋ฒคํŠธ์˜ ์‹คํ–‰ ์ˆœ์„œ(Ordering)๋ฅผ ๋‹ค๋ฃจ์–ด์•ผ ํ•˜๋ฏ€๋กœ ์„ค๊ณ„๊ฐ€ ๋ณต์žกํ•˜๋ฉฐ, ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค, ์ถ”์  ์‹œ์Šคํ…œ, ์ด๋ฒคํŠธ ์žฌ์ƒ ๋ฐ ์ €์žฅ ์ธํ”„๋ผ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ๋†’์€ ์ˆ˜์ค€์˜ ์ž์›์ด ์š”๊ตฌ๋œ๋‹ค [2]. * **๋””๋ฒ„๊น…๊ณผ ์˜ค๋ฅ˜ ์ถ”์ ์˜ ์–ด๋ ค์›€:** ๋‹จ์ผ ์žฅ์• ๊ฐ€ ์ „์ฒด ์‹œ์Šคํ…œ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋„๋ก DLQ๋ฅผ ๊ตฌ์„ฑํ•˜์—ฌ ์‹คํŒจํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฒฉ๋ฆฌํ•ด์•ผ ํ•˜๋ฉฐ [4, 5], ๋ถ„์‚ฐ๋œ ๋น„๋™๊ธฐ ์‹œ์Šคํ…œ์˜ ํŠน์„ฑ์ƒ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ํ˜ธ์ถœ ํ๋ฆ„์„ ํŒŒ์•…ํ•˜๊ธฐ ๊นŒ๋‹ค๋กญ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํฌ๊ด„์ ์ธ ์ถ”์ (Comprehensive tracing) ์ฒด๊ณ„์™€ ๋””๋ฒ„๊น… ๋„๊ตฌ์˜ ์ค‘๋‹จ์ (Breakpoints)์„ ํ†ตํ•œ ์‹ค์‹œ๊ฐ„ ๋ฉ”์‹œ์ง€ ํ ํ๋ฆ„ ๊ด€์ฐฐ์ด ํ•„์ˆ˜์ ์ด๋‹ค [2, 7]. ## ๐Ÿ”— Knowledge Connections ### Related Concepts #### [์•„ํ‚คํ…์ฒ˜ ํ† ํด๋กœ์ง€ (Architecture Topologies)] - [[Broker Topology]] - ์—ฐ๊ฒฐ ์ด์œ : ์ค‘์•™ ํ†ต์ œ ์—†์ด ์ด๋ฒคํŠธ ์ฑ„๋„์„ ํ†ตํ•ด ์ปดํฌ๋„ŒํŠธ๋“ค์ด ๋น„๋™๊ธฐ์ ์œผ๋กœ ํ†ต์‹ ํ•˜๋Š” EDA์˜ ํ•ต์‹ฌ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ค‘์•™ ์กฐ์ •์ž ์—†์ด ๋†’์€ ์„ฑ๋Šฅ, ๋ฐ˜์‘์„ฑ, ํ™•์žฅ์„ฑ์„ ๋‹ฌ์„ฑํ•˜๋Š” ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์˜ ๋™์ž‘ ์›๋ฆฌ [15, 27]. - [[Mediator Topology]] - ์—ฐ๊ฒฐ ์ด์œ : ๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค์˜ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜๊ณผ ์ œ์–ด๋ฅผ ์œ„ํ•ด ์ค‘์•™ ๋ฉ”๋””์—์ดํ„ฐ๋ฅผ ๋„์ž…ํ•˜๋Š” ๋Œ€์•ˆ์  ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ณต์žกํ•œ ์ด๋ฒคํŠธ ์›Œํฌํ”Œ๋กœ์šฐ ์ œ์–ด, ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜์˜ ์ƒํƒœ ๊ด€๋ฆฌ ๋ฐ ์˜ค๋ฅ˜ ๋ณต๊ตฌ ์ฒ˜๋ฆฌ ๋ฐฉ์‹ [15, 18]. #### [์‹œ์Šคํ…œ ํŠน์„ฑ ๋ฐ ์„ค๊ณ„ ์ œ์•ฝ (System Characteristics & Constraints)] - [[Eventual Consistency]] - ์—ฐ๊ฒฐ ์ด์œ : EDA ์‹œ์Šคํ…œ์ด ๊ฐ•ํ•œ ์ผ๊ด€์„ฑ์„ ํฌ๊ธฐํ•˜๊ณ  ๊ฐ€์šฉ์„ฑ๊ณผ ํŒŒํ‹ฐ์…˜ ํ—ˆ์šฉ์„ฑ์„ ์„ ํƒํ•จ์— ๋”ฐ๋ผ ํ•„์—ฐ์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™” ์ง€์—ฐ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐ„ ๋น„๋™๊ธฐ ํ†ต์‹  ์‹œ ๋ฐ์ดํ„ฐ ์ƒํƒœ ๋ถˆ์ผ์น˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ด์œ ์™€ ์ด๋ฅผ ์‹œ์Šคํ…œ์ ์œผ๋กœ ์ˆ˜์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• [22, 23]. - [[Complex Event Processing]] - ์—ฐ๊ฒฐ ์ด์œ : ๋‹จ์ˆœํ•œ ์ด๋ฒคํŠธ๋ฅผ ๋„˜์–ด ๋‹ค์–‘ํ•œ ์ด๋ฒคํŠธ์˜ ์‹œ๊ฐ„์ , ๊ณต๊ฐ„์  ์ƒํ˜ธ์ž‘์šฉ์„ ํ‰๊ฐ€ํ•˜์—ฌ ์˜๋ฏธ ์žˆ๋Š” ํŒจํ„ด์„ ์ฐพ์•„๋‚ด๋Š” ์ฒ˜๋ฆฌ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์—์„œ ์ด์ƒ ์ง•ํ›„๋‚˜ ์œ„ํ˜‘, ๋น„์ฆˆ๋‹ˆ์Šค ๊ธฐํšŒ๋ฅผ ๊ฐ์ง€ํ•˜๋Š” ๊ณ ๊ธ‰ ์ด๋ฒคํŠธ ํ•ด์„ ๊ธฐ๋ฒ• [13, 14]. #### [์ƒํ˜ธ ๋ณด์™„์  ์•„ํ‚คํ…์ฒ˜ ๋ฐ ํŒจํ„ด (Complementary Architectures & Patterns)] - [[Event Sourcing]] - ์—ฐ๊ฒฐ ์ด์œ : ๋ฐ์ดํ„ฐ์˜ ํ˜„์žฌ ์ƒํƒœ๋งŒ ์ €์žฅํ•˜๋Š” ๋Œ€์‹ , ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•œ ๋ชจ๋“  ์ด๋ฒคํŠธ๋ฅผ ๋ถˆ๋ณ€์˜ ๋กœ๊ทธ๋กœ ์ €์žฅํ•˜๋Š” ์„ค๊ณ„ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: CQRS์™€ ๊ฒฐํ•ฉํ•˜๊ฑฐ๋‚˜ EDA์˜ ๊ฐ์‚ฌ ํŠธ๋ ˆ์ผ, ์‹œ์Šคํ…œ ์ƒํƒœ ๋ณต์› ๊ธฐ๋Šฅ์„ ๊ฐ•ํ™”ํ•˜๋Š” ์›๋ฆฌ [28, 29]. ### Deeper Research Questions - EDA ํ™˜๊ฒฝ์—์„œ ์ตœ์ข… ์ผ๊ด€์„ฑ(Eventual Consistency)์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ์‹œ์Šคํ…œ์˜ ๋ถ€๋ถ„์  ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜ ๊ธฐ๊ฐ„ ๋™์•ˆ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์–ด๋–ป๊ฒŒ ๊ฐœ์„ ํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? - ๋น„์ฆˆ๋‹ˆ์Šค ์›Œํฌํ”Œ๋กœ์šฐ์˜ ๋ณต์žก์„ฑ์— ๋”ฐ๋ผ ๋ธŒ๋กœ์ปค ํ† ํด๋กœ์ง€์™€ ๋ฉ”๋””์—์ดํ„ฐ ํ† ํด๋กœ์ง€๋ฅผ ํ˜ผํ•ฉ(Hybrid)ํ•˜์—ฌ ์‚ฌ์šฉํ•  ๋•Œ์˜ ์„ค๊ณ„ ๊ธฐ์ค€๊ณผ ๊ธฐ์ˆ ์  ๊ฒฝ๊ณ„๋Š” ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•ด์•ผ ํ•˜๋Š”๊ฐ€? - ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐ„์˜ ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜ ์‹คํŒจ ์‹œ, EDA ๋ชจ๋ธ์—์„œ ๋ณด์ƒ ํŠธ๋žœ์žญ์…˜(Compensating Transaction)์ด๋‚˜ Saga ํŒจํ„ด์€ ์–ด๋–ป๊ฒŒ ์„ค๊ณ„๋˜๊ณ  ์ž‘๋™ํ•˜๋Š”๊ฐ€? - ์ด๋ฒคํŠธ ํŽ˜์ด๋กœ๋“œ์— ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฐฉ์‹๊ณผ ํ‚ค(Key)๊ฐ’๋งŒ ํฌํ•จํ•˜๋Š” ๋ฐฉ์‹ ๊ฐ„์˜ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„๊ฐ€ ๋„คํŠธ์›Œํฌ ๋Œ€์—ญํญ ๋ฐ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์— ๋ฏธ์น˜๋Š” ์žฅ๊ธฐ์  ์˜ํ–ฅ์€ ๋ฌด์—‡์ธ๊ฐ€? - ๋Œ€๋Ÿ‰์˜ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” IoT ํ™˜๊ฒฝ ๋“ฑ์—์„œ ๋ฐ์ดํ„ฐ ์†์‹ค(Data Loss)์„ ๋ฐฉ์ง€ํ•˜๊ณ  ์ด๋ฒคํŠธ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ŠคํŠธ๋ฆผ(Stream)๊ณผ ํ(Queue)๋Š” ๊ฐ๊ฐ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅด๊ฒŒ ์ตœ์ ํ™”๋˜์–ด ํ™œ์šฉ๋˜๋Š”๊ฐ€? ### Practical Application Contexts - **Implementation:** RabbitMQ๋‚˜ Apache Kafka์™€ ๊ฐ™์€ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ด๋ฒคํŠธ ์ฑ„๋„ ๋ฐ ํ/์ŠคํŠธ๋ฆผ์„ ๊ตฌ์„ฑํ•˜๊ณ , ์‹œ์Šคํ…œ ๊ฐ„ ํ†ต์‹ ์„ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค [4, 13, 30]. - **System Design:** ๋„๋ฉ”์ธ ์ด๋ฒคํŠธ์™€ ํ†ตํ•ฉ ์ด๋ฒคํŠธ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ (Bounded Context ๊ฒฝ๊ณ„ ๊ฐ„ ํ†ต์‹ ), ์ƒ์‚ฐ์ž์™€ ์†Œ๋น„์ž ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”์–ด(Loose coupling) ํ•œ ์„œ๋น„์Šค์˜ ์žฅ์• ๊ฐ€ ๋‹ค๋ฅธ ์„œ๋น„์Šค๋กœ ์ „ํŒŒ๋˜์ง€ ์•Š๋„๋ก ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค [31, 32]. - **Operation / Maintenance:** ๊ฐœ๋ณ„ ์ด๋ฒคํŠธ๋งˆ๋‹ค Correlation ID๋ฅผ ๋ถ€์—ฌํ•˜์—ฌ ๋น„๋™๊ธฐ ํ™˜๊ฒฝ ์ „๋ฐ˜์— ๊ฑธ์นœ ๋กœ๊ทธ ํŠธ๋ ˆ์ด์‹ฑ(๊ด€์ธก์„ฑ)์„ ํ™•๋ณดํ•˜๊ณ , ์‹คํŒจํ•œ ์ด๋ฒคํŠธ๋ฅผ Dead-Letter Queue (DLQ)๋กœ ๋ณด๋‚ด ์šด์˜์ž๊ฐ€ ํ›„์† ์กฐ์น˜๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค [23, 25]. - **Learning Path:** ๊ธฐ์กด์˜ CRUD ์ค‘์‹ฌ์ ์ด๊ณ  ๋™๊ธฐ์ ์ธ ์‚ฌ๊ณ ๋ฐฉ์‹(Request-Response)์—์„œ ๋ฒ—์–ด๋‚˜, ์‹œ์Šคํ…œ์˜ ๋ณ€ํ™”๋ฅผ ์ด๋ฒคํŠธ ๋‹จ์œ„๋กœ ์ƒ๊ฐํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ์ด๋ฒคํŠธ ์ฃผ๋„์  ์‚ฌ๊ณ ๋กœ ํŒจ๋Ÿฌ๋‹ค์ž„์„ ์ „ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [28]. - **My Project Relevance:** ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ ์„œ๋น„์Šค, ๋Œ€์šฉ๋Ÿ‰ ํŠธ๋ž˜ํ”ฝ์˜ ์ „์ž์ƒ๊ฑฐ๋ž˜ ์ฃผ๋ฌธ ์ฒ˜๋ฆฌ, ์ฃผ์‹ ๊ฑฐ๋ž˜ ํ”Œ๋žซํผ, ํ˜น์€ ์„ผ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ชจ์•„ ๋ถ„์„ํ•ด์•ผ ํ•˜๋Š” IoT ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ ์‹œ ์ ์šฉ์„ ์ ๊ทน ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [13, 24, 33]. ### Adjacent Topics - [[Microservices Architecture]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๊ฐ€ ์ƒํ˜ธ ๋…๋ฆฝ์ ์œผ๋กœ ํ™•์žฅ๋˜๊ณ  ๋ฐฐํฌ๋  ๋•Œ, EDA๊ฐ€ ๊ฐ ์„œ๋น„์Šค ๊ฐ„์˜ ํšจ์œจ์ ์ด๊ณ  ๊ฒฐํ•ฉ๋„ ๋‚ฎ์€ ๋น„๋™๊ธฐ ํ†ต์‹ ์„ ์–ด๋–ป๊ฒŒ ์ง€์›ํ•˜๋Š”์ง€ ๋น„๊ต ๋ฐ ํƒ๊ตฌ [23, 34, 35]. - [[Command Query Responsibility Segregation (CQRS)]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ ์ž‘์—…์„ ๋ถ„๋ฆฌํ•˜๋Š” ํŒจํ„ด์œผ๋กœ, EDA ๋ฐ ์ด๋ฒคํŠธ ์†Œ์‹ฑ(Event Sourcing)๊ณผ ์–ด๋–ป๊ฒŒ ์‹œ๋„ˆ์ง€๋ฅผ ๋‚ด์–ด ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์กฐํšŒ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๋Š”์ง€ ์กฐ์‚ฌ [36-38]. - [[Service-Oriented Architecture (SOA)]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ „ํ†ต์ ์ธ ์„œ๋น„์Šค ์ง€ํ–ฅ ์•„ํ‚คํ…์ฒ˜๊ฐ€ EDA์™€ ๊ฒฐํ•ฉ๋œ SOA 2.0์œผ๋กœ ์ง„ํ™”ํ•˜๋ฉฐ, ๊ธฐ์—… ํ™˜๊ฒฝ์—์„œ ์˜ˆ์ธก ๋ถˆ๊ฐ€๋Šฅํ•œ ์ธ๊ณผ ๊ด€๊ณ„ ํŒจํ„ด์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€ ํŒŒ์•… [39, 40]. --- *Last updated: 2026-05-02* --- - Related: [[Microservices-Architecture|Microservices-Architecture]] , Message-Queue-Design - Pattern: Observer-Pattern --- ### Related Concepts * [[Microservices_Architecture]]: ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐ„์˜ ํ†ต์‹ ์„ ์ตœ์ ํ™”ํ•˜๋Š” ํ•ต์‹ฌ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. * [[Message_Broker]]: EDA๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ์ธํ”„๋ผ์ŠคํŠธ๋Ÿญ์ฒ˜ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. * [[Saga_Pattern]]: ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค์— ๊ฑธ์นœ ํŠธ๋žœ์žญ์…˜์„ ์ด๋ฒคํŠธ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. * [[Dead_Letter_Queue]]: ์ฒ˜๋ฆฌ ์‹คํŒจํ•œ ์ด๋ฒคํŠธ๋ฅผ ๊ฒฉ๋ฆฌํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. ### Practical Application Contexts * **Real-time Processing:** ์ฃผ์‹ ๊ฑฐ๋ž˜, IoT ์„ผ์„œ ๋ฐ์ดํ„ฐ ๋“ฑ ์ฆ‰๊ฐ์ ์ธ ๋ฐ˜์‘์ด ํ•„์š”ํ•œ ์‹œ์Šคํ…œ์— ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค. * **Complex Workflows:** ์ „์ž์ƒ๊ฑฐ๋ž˜ ์ฃผ๋ฌธ-๊ฒฐ์ œ-๋ฐฐ์†ก์œผ๋กœ ์ด์–ด์ง€๋Š” ๊ธด ํ”„๋กœ์„ธ์Šค๋ฅผ ๋น„๋™๊ธฐ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. --- --- - **Related Topics:** Microservices Architecture, Real-time Data Streaming, Message Broker, Apache Kafka - **Projects/Contexts:** Real-Time Stock Trading, IoT Data [[Processing|Processing]], Microservices Orchestration - **Contradictions/Notes:** ์†Œ์Šค์— ๋”ฐ๋ฅด๋ฉด ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜๋Š” ๊ณ ๋„์˜ ๋ฐ˜์‘์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ๋ถ„์‚ฐ ์‹œ์Šคํ…œ ๋ฐ ์ŠคํŠธ๋ฆผ ์˜๋ฏธ๋ก ๊ณผ ๊ด€๋ จ๋œ ๋น„๋™๊ธฐ์  ๋ณต์žก์„ฑ๊ณผ ์‹คํ–‰ ์ˆœ์„œ ๊ด€๋ฆฌ์˜ ๋‚œ์ด๋„๊ฐ€ ๋†’์œผ๋ฉฐ ๋ธŒ๋กœ์ปค ๋“ฑ ์ธํ”„๋ผ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ์šด์˜ํ•˜๊ธฐ ์œ„ํ•œ ๋†’์€ ์ „๋ฌธ ์ง€์‹์ด ์š”๊ตฌ๋œ๋‹ค๋Š” ๋‹จ์ (Implementation Complexity: High)์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค [4, 5]. --- *Last updated: 2026-04-18* --- --- ### Related Concepts #### [๊ด€๊ณ„ ์œ ํ˜• A: ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ํŒจํ„ด] - [[๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜ (Microservices Architecture)]] - ์—ฐ๊ฒฐ ์ด์œ : ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐ„์˜ ์ง์ ‘์ ์ธ ์˜์กด์„ฑ์„ ์ค„์ด๊ณ , ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๊ฐ€ ๋งž๋ฌผ๋ ค ๋™์ž‘ํ•˜๋Š” ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์„ ๋น„๋™๊ธฐ์‹์œผ๋กœ ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š”๋‹ค [3, 8]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ์—์„œ ๊ฐ ๋„๋ฉ”์ธ ์„œ๋น„์Šค๋“ค์ด ์–ด๋–ป๊ฒŒ ๊ฐœ๋ณ„์ ์ธ ์ฝ”๋“œ๋ฒ ์ด์Šค์™€ ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ์„ ์œ ์ง€ํ•˜๋ฉฐ ํ™•์žฅ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š”์ง€ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค [8, 9]. - [[๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„ (Domain-Driven Design, DDD)]] - ์—ฐ๊ฒฐ ์ด์œ : ์ด๋ฒคํŠธ๋Š” ๋ณดํ†ต ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ค‘์š”ํ•œ ์˜๋ฏธ ์žˆ๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ(Domain Event)์—์„œ ๋„์ถœ๋˜๋ฏ€๋กœ, ์•„ํ‚คํ…์ฒ˜ ๊ฒฝ๊ณ„๋ฅผ ์‹๋ณ„ํ•  ๋•Œ DDD๋ฅผ ๋„๋ฆฌ ๋ณ‘ํ–‰ ํ™œ์šฉํ•œ๋‹ค [10, 11]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ณดํŽธ์ ์ธ ์–ธ์–ด(Ubiquitous Language)๋ฅผ ์‚ฌ์šฉํ•ด ๊ธฐ์ˆ ์  ๊ณ„์ธต์ด ์•„๋‹Œ ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ์— ๋”ฐ๋ผ ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ(Bounded Context)๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ์ „๋žต์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋‹ค [10, 12]. #### [๊ด€๊ณ„ ์œ ํ˜• B: ์ธํ”„๋ผ ๋ฐ ๋””๋ฒ„๊น… ๊ธฐ๋ฒ•] - [[๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค (Message Broker)]] - ์—ฐ๊ฒฐ ์ด์œ : ์ƒ์‚ฐ์ž๊ฐ€ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœํ–‰ํ•˜๊ณ  ์†Œ๋น„์ž๊ฐ€ ์ด๋ฅผ ์ˆ˜์‹ ํ•˜๊ธฐ ์œ„ํ•œ ์ค‘๊ฐ„ ๋งค๊ฐœ์ฒด๋กœ์„œ, ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ์˜ ๊ทผ๊ฐ„์„ ์ด๋ฃจ๋Š” ํ•„์ˆ˜ ์ธํ”„๋ผ์ด๋‹ค [3, 4]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: Kafka๋‚˜ RabbitMQ ๊ฐ™์€ ๋„๊ตฌ๋“ค์ด ์–ด๋–ป๊ฒŒ ์ด๋ฒคํŠธ์˜ ๋ผ์šฐํŒ…๊ณผ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•˜๊ณ  ๋ณด์žฅํ•˜๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค [4]. - [[๋ฐ๋“œ ๋ ˆํ„ฐ ํ (Dead-Letter Queues, DLQs)]] - ์—ฐ๊ฒฐ ์ด์œ : ์†Œ๋น„์ž๊ฐ€ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ์— ์—ฌ๋Ÿฌ ๋ฒˆ ์‹คํŒจํ–ˆ์„ ๋•Œ, ์ด ์ด๋ฒคํŠธ๋ฅผ ์ฃผ ํ๋ฆ„์—์„œ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ณด๊ด€ํ•˜๋Š” ๊ณต๊ฐ„์œผ๋กœ, ์‹œ์Šคํ…œ ์ „์ฒด์˜ ๋งˆ๋น„๋ฅผ ๋ง‰๋Š” ํ•ต์‹ฌ ์ œ์–ด ์žฅ์น˜์ด๋‹ค [4, 5]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ณต์žกํ•œ ๋น„๋™๊ธฐ ์ž‘์—… ์‹œ ๊ฒฐํ•จ ํ—ˆ์šฉ์„ฑ(Fault-tolerance)์„ ๊ตฌ์ถ•ํ•˜๊ณ , ๋‚˜์ค‘์— ์—๋Ÿฌ ์ƒํ™ฉ์„ ์—ญ์ถ”์ (Troubleshooting)ํ•˜๋Š” ๋ถ„์„ ์ง€์ ์„ ํ™•๋ณดํ•˜๋Š” ๋ฒ•์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋‹ค [4]. ### Deeper Research Questions - ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค(Kafka, RabbitMQ ๋“ฑ) ๊ฐ„์— ๋ผ์šฐํŒ… ๋ฉ”์ปค๋‹ˆ์ฆ˜๊ณผ ์ „์†ก ๋ณด์žฅ(Delivery Guarantees) ๋ฐฉ์‹์€ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅด๋ฉฐ, ์ƒํ™ฉ์— ๋งž์ถฐ ์–ด๋–ค ๋ธŒ๋กœ์ปค๋ฅผ ์„ ํƒํ•ด์•ผ ํ•˜๋Š”๊ฐ€? - ๋Œ€๊ทœ๋ชจ ๋น„๋™๊ธฐ ์ด๋ฒคํŠธ ์‹œ์Šคํ…œ์—์„œ ๋ฉฑ๋“ฑ์„ฑ(Idempotency)์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ์ž๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŠธ๋žœ์žญ์…˜ ๋‹จ์œ„ ํ˜น์€ ์ฝ”๋“œ ๋ ˆ๋ฒจ์—์„œ ์–ด๋– ํ•œ ์ œ์–ด ํŒจํ„ด์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€? - ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ์˜ ํŠน์„ฑ์ƒ ์ •์ ์ธ ์ฝ”๋“œ ์ฝ๊ธฐ๋กœ๋Š” ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ค์šด ๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด, ์ฝ”๋“œ๋ฒ ์ด์Šค ๋ถ„์„ ์‹œ ์–ด๋–ค ๋ถ„์‚ฐ ์ถ”์ (Distributed Tracing) ๋ฐ ์ค‘๋‹จ์  ๋””๋ฒ„๊น… ์ „๋žต์„ ํ™œ์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€? - ์ด๋ฒคํŠธ ์†Œ์‹ฑ(Event Sourcing) ๋ฐ CQRS ํŒจํ„ด์€ ๊ธฐ๋ณธ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜์˜ ํ•œ๊ณ„๋ฅผ ์–ด๋–ป๊ฒŒ ๊ทน๋ณตํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ ์กฐํšŒ ์„ฑ๋Šฅ์— ์–ด๋–ค ์ด์ ์„ ์ œ๊ณตํ•˜๋Š”๊ฐ€? - ๋น„๋™๊ธฐ ํ™˜๊ฒฝ์„ ์œ„ํ•œ AsyncAPI ๋ช…์„ธ์„œ๋Š” ์—ฌ๋Ÿฌ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐ„์˜ ํ†ต์‹  ์ปจํŠธ๋ž™ํŠธ๋ฅผ ์ •์˜ํ•  ๋•Œ ์–ด๋– ํ•œ ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ด๋Š”๊ฐ€? ### Practical Application Contexts - **Implementation:** ๋น„์ฆˆ๋‹ˆ์Šค ์ด๋ฒคํŠธ๋ฅผ ์ƒ์„ฑ/์†Œ๋น„ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•˜๋˜, ๋‹ค์ค‘ ์ฒ˜๋ฆฌ์— ์˜ํ•œ ์˜ค๋ฅ˜๊ฐ€ ์—†๋„๋ก ๋ฉฑ๋“ฑ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ํ•ธ๋“ค๋Ÿฌ ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๊ณ  DLQ๋กœ ์˜ˆ์™ธ๋ฅผ ์šฐํšŒ์‹œํ‚ค๋Š” ์ฝ”๋“œ๋ฅผ ์ ์šฉํ•œ๋‹ค [4]. - **System Design:** ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋„๋ฉ”์ธ ๊ฒฝ๊ณ„๋ณ„๋กœ ๋ถ„๋ฆฌํ•˜๊ณ  ๋™๊ธฐ์  API ํ˜ธ์ถœ์˜ ๊ฐ•ํ•œ ๊ฒฐํ•ฉ(Tight coupling) ๋Œ€์‹  ์ค‘์•™ ๋ธŒ๋กœ์ปค๋ฅผ ํ†ตํ•œ ๋น„๋™๊ธฐ ์ด๋ฒคํŠธ ํ†ต์‹  ๊ตฌ์กฐ๋ฅผ ์ฑ„ํƒํ•˜์—ฌ ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์Šค์ผ€์น˜ํ•œ๋‹ค [1, 4, 5]. - **Operation / Maintenance:** ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง€ ํ๋ฆ„์˜ ๋™์ ์ธ ์ƒํƒœ๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด ์‹œ์Šคํ…œ ๋กœ๊ทธ, ๋ถ„์‚ฐ ์ถ”์  ๋„๊ตฌ, IDE ๋””๋ฒ„๊ฑฐ์˜ ์ค‘๋‹จ์  ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•ด ์ƒํ–ฅ์‹ ๋ฐ ํ•˜ํ–ฅ์‹์œผ๋กœ ๋ณต์žกํ•œ ๊ฐ์ฒด ํ๋ฆ„์„ ์—ญ์ถ”์ ํ•˜๋ฉฐ ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค [2, 7]. - **Learning Path:** ๋ชจ๋†€๋ฆฌ์‹ ์‹œ์Šคํ…œ ๋ถ„์„์—์„œ ๋ถ„์‚ฐ ์•„ํ‚คํ…์ฒ˜ ๋ถ„์„ ์—ญ๋Ÿ‰์œผ๋กœ ๋ฐœ์ „์‹œํ‚ค๊ธฐ ์œ„ํ•œ ํ•™์Šต ๊ฒฝ๋กœ๋กœ, ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์™€ DDD๋ฅผ ํฌ๊ด„ํ•˜๋Š” ํ˜„๋Œ€์  ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜ ์›๋ฆฌ์™€ ํ•จ๊ป˜ ํ•™์Šตํ•œ๋‹ค [8, 10]. - **My Project Relevance:** ๊ฑฐ๋Œ€ํ•œ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ํ•ด๋…ํ•  ๋•Œ ์ •์ ์ธ ๊ณ„์ธต ๊ตฌ์กฐ(Layers)๋‚˜ ํ•จ์ˆ˜ ์ง์ ‘ ํ˜ธ์ถœ ์Šคํƒ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์ด๋ฒคํŠธ๋ฅผ ๋งค๊ฐœ๋กœ ํ•œ ๋Ÿฐํƒ€์ž„ ๊ธฐ๋ฐ˜์˜ ๋™์  ์ƒํ˜ธ์ž‘์šฉ ์ง€ํ˜•์„ ๋จธ๋ฆฟ์†์—์„œ ์‹œ๊ฐํ™”ํ•˜๊ณ  ๋งตํ•‘(Mapping)ํ•ด๋‚ด๋Š” ๋ถ„์„๋ ฅ์„ ๊ฐ–์ถ”๋Š” ๋ฐ ํ•„์ˆ˜์ ์ด๋‹ค [7, 13]. ### Adjacent Topics - [[CQRS ๋ฐ ์ด๋ฒคํŠธ ์†Œ์‹ฑ ํŒจํ„ด (Command Query Responsibility Segregation & Event Sourcing)]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์‹ฌํ™”์‹œ์ผœ ์ƒํƒœ ์ €์žฅ ๋ฐฉ์‹์„ ๋‹จ์ˆœ CRUD๊ฐ€ ์•„๋‹Œ '์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ผ๋ จ์˜ ์ด๋ฒคํŠธ ์ด๋ ฅ'์œผ๋กœ ์˜์†ํ™”ํ•˜๋Š” ๋ฐ์ดํ„ฐ ์„ค๊ณ„ ํŒจํ„ด๋ก ์œผ๋กœ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•˜๋‹ค [14]. --- *Last updated: 2026-05-02* ## ๐Ÿ’ก Adjacent Topics * [[Domain_Driven_Design]]: ๋„๋ฉ”์ธ ์ด๋ฒคํŠธ๋ฅผ ์‹๋ณ„ํ•˜์—ฌ EDA ์„ค๊ณ„์˜ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ผ์Šต๋‹ˆ๋‹ค. * [[Cloud_Native_Architecture]]: ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์—์„œ ์„œ๋ฒ„๋ฆฌ์Šค(Lambda)์™€ ๊ฒฐํ•ฉํ•˜์—ฌ ํšจ์œจ์ ์ธ ํ™•์žฅ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. * [[CQRS]]: ์ƒํƒœ ๋ณ€๊ฒฝ๊ณผ ์กฐํšŒ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜์™€ ์‹œ๋„ˆ์ง€๋ฅผ ๋ƒ…๋‹ˆ๋‹ค. --- *Last updated: 2026-05-02*