--- id: P-REINFORCE-WIKI-15DEEFAA category: "10_Wiki/๐Ÿ’ก Topics/02_Architecture_Principles" confidence_score: 0.95 tags: ['broker-topology', 'event-driven-architecture', 'mediator-topology', 'choreography', 'message-broker', 'architecture-principles'] last_reinforced: 2026-05-02 --- # [[Broker Topology]] ## ๐Ÿ“Œ Brief ์‹œ Summary Broker Topology(๋ธŒ๋กœ์ปค ํ† ํด๋กœ์ง€)๋Š” ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜(Event-Driven Architecture)๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ํ† ํด๋กœ์ง€ ์ค‘ ํ•˜๋‚˜๋กœ, ์ค‘์•™์˜ ์กฐ์ •์ž(Orchestrator)๋‚˜ ๋ฉ”๋””์—์ดํ„ฐ ์—†์ด ์ปดํฌ๋„ŒํŠธ๋“ค์ด ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ด๋ฒคํŠธ๋ฅผ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธํ•˜๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค [1, 2]. ์ด ๋ฐฉ์‹์€ ์ค‘์•™ ํ†ต์ œ ๋Œ€์‹  ๊ฐ ๋…๋ฆฝ์ ์ธ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์ž์œจ์ ์œผ๋กœ ์ด๋ฒคํŠธ์— ๋ฐ˜์‘ํ•˜๋Š” ํ˜•ํƒœ(Choreography)๋ฅผ ์ทจํ•ฉ๋‹ˆ๋‹ค [2, 3]. ๊ฒฐํ•ฉ๋„๊ฐ€ ๋งค์šฐ ๋‚ฎ์•„ ํ™•์žฅ์„ฑ๊ณผ ๋ฐ˜์‘์„ฑ์ด ๋›ฐ์–ด๋‚˜๋ฉฐ ๋‹จ์ผ ์žฅ์• ์ ์„ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ณต์žกํ•œ ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ์™€ ์›Œํฌํ”Œ๋กœ์šฐ ์ œ์–ด์—๋Š” ๋ถˆ๋ฆฌํ•œ ํŠน์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค [1-3]. ## ๐Ÿ“– Core Content * **ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ (Core Components):** ๋ธŒ๋กœ์ปค ํ† ํด๋กœ์ง€๋Š” ์ฃผ๋กœ ๊ฐœ์‹œ ์ด๋ฒคํŠธ(Initiating Event), ์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค(Event Broker), ์ด๋ฒคํŠธ ์ฑ„๋„(Event Channel), ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ(Event Handler), ์ฒ˜๋ฆฌ ์ด๋ฒคํŠธ(Processing Event) ๋“ฑ 5๊ฐ€์ง€ ์š”์†Œ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค [1, 4]. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋ฉด ์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค์˜ ํŠน์ • ์ฑ„๋„๋กœ ์ „๋‹ฌ๋˜๊ณ , ํ•ด๋‹น ์ฑ„๋„์„ ์ˆ˜์‹ ํ•˜๋Š” ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋“ค์ด ์ด๋ฒคํŠธ๋ฅผ ๊ฐ€์ ธ์™€ ์ฒ˜๋ฆฌํ•œ ๋’ค, ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์œ„ํ•œ ์ƒˆ๋กœ์šด ์ฒ˜๋ฆฌ ์ด๋ฒคํŠธ๋ฅผ ๋‹ค์‹œ ๋ธŒ๋กœ์ปค์— ๋ฐœํ–‰ํ•˜๋Š” ์—ฐ์‡„์ ์ธ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค [4]. * **์ค‘์•™ ์กฐ์ •์ž์˜ ๋ถ€์žฌ (Lack of Central Coordinator):** "Broker is a dumb pipe"๋ผ๋Š” ๊ฐœ๋…์ฒ˜๋Ÿผ, ์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค๋Š” ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ ์„œ๋น„์Šค๋งŒ ์ œ๊ณตํ•  ๋ฟ ๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค์˜ ๋…ผ๋ฆฌ๋ฅผ ์ œ์–ดํ•˜๊ฑฐ๋‚˜ ์ƒํƒœ(State)๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค [5]. ์ด๋กœ ์ธํ•ด ๊ฐœ๋ณ„ ์ปดํฌ๋„ŒํŠธ๋Š” ๋‹ค๋‹จ๊ณ„ ๋น„์ฆˆ๋‹ˆ์Šค ํŠธ๋žœ์žญ์…˜์˜ ์ƒํƒœ๋ฅผ ์†Œ์œ ํ•˜๊ฑฐ๋‚˜ ์ธ์ง€ํ•˜์ง€ ์•Š์€ ์ฑ„, ์ž์‹ ๊ณผ ๊ด€๋ จ๋œ ์ด๋ฒคํŠธ์—๋งŒ ์ž์œจ์ ์œผ๋กœ ๋ฐ˜์‘(๋ฐ˜์‘ ๋˜๋Š” ๋ฌด์‹œ)ํ•ฉ๋‹ˆ๋‹ค [2, 5]. * **๊ณ ๋„์˜ ํ™•์žฅ์„ฑ๊ณผ ์œ ์—ฐ์„ฑ (Scalability and Extensibility):** ๊ฐ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋Š” ์„œ๋กœ ๋…๋ฆฝ์ ์ธ ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ฐฐํฌ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๋ถ€ํ•˜์— ๋งž์ถฐ ๊ฐœ๋ณ„์ ์œผ๋กœ ์˜คํ† ์Šค์ผ€์ผ๋ง(Auto-scaling)์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค [6]. ๋˜ํ•œ, ๊ธฐ์กด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ „ํ˜€ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ ๋„ ๋™์ผํ•œ ์ฑ„๋„์— ์ƒˆ๋กœ์šด ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜, ์•„์ง ์‹œ์Šคํ…œ์ด ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๋Š” ์ด๋ฒคํŠธ๋ฅผ ๋ฌด์‹œํ•˜๊ฒŒ ์„ค์ •ํ•ด๋‘ ์œผ๋กœ์จ ํ–ฅํ›„ ์‹œ์Šคํ…œ์˜ ๊ธฐ๋Šฅ ํ™•์žฅ์„ ์šฉ์ดํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค [7]. ๋ธŒ๋กœ์ปค ์ž์ฒด๋„ ๋‹จ์ผ ๋ณ‘๋ชฉ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ์ปดํ“จํŒ… ๋…ธ๋“œ์— ์—ฐํ•ฉ(Federated) ํ˜•ํƒœ๋กœ ๋ถ„์‚ฐ ๋ฐฐํฌ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [6]. * **์ตœ์ ์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€ (Best Use Cases):** ์ด ํ† ํด๋กœ์ง€๋Š” ์—ฌ๋Ÿฌ ๋‹จ๊ณ„์˜ ๋ณต์žกํ•œ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜(Orchestration)์ด ํ•„์š” ์—†๋Š” ๋‹จ์ˆœํ•œ ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆผ ์ฒ˜๋ฆฌ์— ๊ฐ€์žฅ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค [8]. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ณด์•ˆ ์‹œ์Šคํ…œ์—์„œ ์นจ์ž… ์„ผ์„œ๊ฐ€ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋ฉด ์ด๋ฅผ ์ง์ ‘ ๋ธŒ๋กœ์ปค๋กœ ์ „๋‹ฌํ•˜๊ณ , ๊ฒฝ๋ณด ์šธ๋ฆผ, ๊ฒฝ์ฐฐ ํ†ต๋ณด ๋“ฑ์˜ ๊ฐœ๋ณ„ ํ”„๋กœ์„ธ์„œ๊ฐ€ ์ด ์•Œ๋ฆผ์— ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋ฐ˜์‘ํ•˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค ๋“ฑ์— ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค [9]. ## โš–๏ธ Trade-offs & Caveats * **๋ณต์žกํ•œ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํŠธ๋žœ์žญ์…˜ ๋ณต๊ตฌ์˜ ํ•œ๊ณ„:** ์ค‘์•™์—์„œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์กฐ์ •ํ•˜๋Š” ์š”์†Œ๊ฐ€ ์—†์œผ๋ฏ€๋กœ, ์—ฌ๋Ÿฌ ์„œ๋น„์Šค์— ๊ฑธ์นœ ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜์„ ๊ด€๋ฆฌํ•˜๊ธฐ๊ฐ€ ๋งค์šฐ ์œ„ํ—˜ํ•˜๊ณ  ๊นŒ๋‹ค๋กญ์Šต๋‹ˆ๋‹ค [2]. ์ค‘๊ฐ„ ๋‹จ๊ณ„์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ์ด๋ฅผ ์ธ์ง€ํ•˜๊ณ  ์ „์ฒด ํ”„๋กœ์„ธ์Šค๋ฅผ ์žฌ์‹œ์ž‘(Restart)ํ•˜๊ฑฐ๋‚˜ ์žฌ์ƒ(Replay)ํ•˜๋Š” ๋‚ด์žฅ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ๋ถ€์กฑํ•˜๋ฏ€๋กœ ์ˆ˜๋™ ๊ฐœ์ž… ์ „๋žต์ด๋‚˜ ๋ณ„๋„์˜ ์—๋Ÿฌ ํ•ธ๋“ค๋Ÿฌ ์„ค๊ณ„๊ฐ€ ์š”๊ตฌ๋ฉ๋‹ˆ๋‹ค [2, 5]. * **๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ ๋ฌธ์ œ (Data Inconsistency):** ๋ชจ๋“  ํ–‰์œ„๊ฐ€ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋ถ„๋ฆฌ๋˜์–ด ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐ ์„œ๋ธŒ์‹œ์Šคํ…œ์ด ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์†๋„๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [2, 10]. ์ด๋กœ ์ธํ•ด ์ผ์‹œ์ ์œผ๋กœ ์„œ๋น„์Šค ๊ฐ„ ๋ฐ์ดํ„ฐ์˜ ๋ถˆ์ผ์น˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ตœ์ข… ์ผ๊ด€์„ฑ(Eventual Consistency) ๋ชจ๋ธ์„ ๊ฐ์ˆ˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [2, 10]. * **์›Œํฌํ”Œ๋กœ์šฐ ๋ชจ๋‹ˆํ„ฐ๋ง์˜ ๋‚œํ•ดํ•จ:** ๋ชจ๋“  ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐœ๋ณ„ ํ•ธ๋“ค๋Ÿฌ๋“ค์˜ ์ž์œจ์ ์ธ ์•ˆ๋ฌด(Choreography) ๋ฐฉ์‹์œผ๋กœ ์ด๋ฃจ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์—, ๋น„์ฆˆ๋‹ˆ์Šค ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์ „์ฒด์ ์ธ ์ง„ํ–‰ ์ƒํ™ฉ์„ ํŒŒ์•…ํ•˜๊ฑฐ๋‚˜ ์ถ”์ ํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค [3]. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋“  ์ด๋ฒคํŠธ์— ์ƒ๊ด€ ID(Correlation ID)๋ฅผ ํฌํ•จ์‹œ์ผœ ๋ถ„์‚ฐ ์ถ”์ (Distributed Tracing)์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๋ถ€๊ฐ€์ ์ธ ๋…ธ๋ ฅ์ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค [11]. ## ๐Ÿ”— Knowledge Connections ### Related Concepts #### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] * [[Event-Driven Architecture]] * ์—ฐ๊ฒฐ ์ด์œ : ๋ธŒ๋กœ์ปค ํ† ํด๋กœ์ง€๋Š” ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜(EDA)๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ๋‘ ๊ฐ€์ง€ ํ•ต์‹ฌ ์œ„์ƒ(Topology) ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค [1, 12]. * ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋น„๋™๊ธฐ ๋ฐฉ์‹์˜ ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ, ์‹œ์Šคํ…œ ๋””์ปคํ”Œ๋ง, ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆผ ํ”„๋กœ์„ธ์‹ฑ ๋“ฑ ๋ธŒ๋กœ์ปค ํ† ํด๋กœ์ง€๊ฐ€ ๊ธฐ๋ฐ˜์„ ๋‘๊ณ  ์žˆ๋Š” ์•„ํ‚คํ…์ฒ˜์˜ ์ „๋ฐ˜์ ์ธ ํŠน์ง•์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [10, 13, 14]. * [[Mediator Topology]] * ์—ฐ๊ฒฐ ์ด์œ : ๋ธŒ๋กœ์ปค ํ† ํด๋กœ์ง€์™€ ๋Œ€๋น„๋˜๋Š” ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜์˜ ๋˜ ๋‹ค๋ฅธ ๊ตฌ์„ฑ ๋ฐฉ์‹์œผ๋กœ, ์ค‘์•™ ์ง‘์ค‘์‹ ์ œ์–ด(Orchestration)๋ฅผ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค [1, 2, 12]. * ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ธŒ๋กœ์ปค ํ† ํด๋กœ์ง€๊ฐ€ ์ง€๋‹Œ ๋‹จ์ (ํŠธ๋žœ์žญ์…˜ ๋ฐ ์—๋Ÿฌ ๊ด€๋ฆฌ์˜ ํ•œ๊ณ„)์„ ๋ฉ”๋””์—์ดํ„ฐ ํ† ํด๋กœ์ง€๊ฐ€ ์ค‘์•™์˜ ์ƒํƒœ ๊ด€๋ฆฌ ๋ฐ ์˜ค๋ฅ˜ ๋ณต๊ตฌ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์–ด๋–ป๊ฒŒ ๋ณด์™„ํ•˜๋Š”์ง€ ๋น„๊ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [2, 5, 15]. #### [๋™์ž‘ ๋ฉ”์ปค๋‹ˆ์ฆ˜/๊ตฌํ˜„ ๋„๊ตฌ] * [[Choreography]] * ์—ฐ๊ฒฐ ์ด์œ : ๋ธŒ๋กœ์ปค ํ† ํด๋กœ์ง€๋Š” ์ค‘์•™ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ ์—†์ด ๊ฐ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์•Œ์•„์„œ ์ด๋ฒคํŠธ๋ฅผ ์ฃผ๊ณ ๋ฐ›์œผ๋ฉฐ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์™„์ˆ˜ํ•˜๋Š” ๋ถ„์‚ฐ๋œ '์•ˆ๋ฌด(Choreography)' ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค [3, 10]. * ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐ„์— ์ค‘์•™ ํ†ต์ œ ์—†์ด ๋…๋ฆฝ์ ์œผ๋กœ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜(Saga ํŒจํ„ด ๋“ฑ)์„ ์ด์–ด๊ฐ€๋Š” ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [3, 10]. * [[Message Broker]] * ์—ฐ๊ฒฐ ์ด์œ : ์ด๋ฒคํŠธ ์ฑ„๋„์„ ์ˆ˜์šฉํ•˜๊ณ  ๋ธŒ๋กœ์ปค ํ† ํด๋กœ์ง€์˜ ์ด๋ฒคํŠธ ํ๋ฆ„์„ ์‹ค์ œ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ActiveMQ, RabbitMQ, Kafka ๋“ฑ๊ณผ ๊ฐ™์€ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๊ฐ€ ์ธํ”„๋ผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค [6, 16]. * ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ด๋ฒคํŠธ๋ฅผ ๋ณด๊ด€ํ•˜๋Š” ํ(Queue)์™€ ์ŠคํŠธ๋ฆผ(Stream) ๊ธฐ๋ฐ˜ ์ฒ˜๋ฆฌ์˜ ์ฐจ์ด, ๊ทธ๋ฆฌ๊ณ  ๋ธŒ๋กœ์ปค ์ธํ”„๋ผ๊ฐ€ ์‹œ์Šคํ…œ์˜ ์—ฐํ•ฉ(Federation) ๋ฐ ํ™•์žฅ์„ฑ์„ ์–ด๋–ป๊ฒŒ ์ง€์›ํ•˜๋Š”์ง€ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [6, 17, 18]. ### Deeper Research Questions * ๋ธŒ๋กœ์ปค ํ† ํด๋กœ์ง€์˜ ํ•œ๊ณ„์ธ ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜ ์˜ค๋ฅ˜ ๋ฐ ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ์‹œ์Šคํ…œ์— ์•ˆ์ „ํ•˜๊ฒŒ ๋ณด์ƒ ํŠธ๋žœ์žญ์…˜(Compensating Transaction)์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? * ํŠน์ • ๋น„์ฆˆ๋‹ˆ์Šค ์›Œํฌํ”Œ๋กœ์šฐ ๋‚ด์—์„œ ๋ธŒ๋กœ์ปค ํ† ํด๋กœ์ง€์˜ ์•ˆ๋ฌด(Choreography) ๋ฐฉ์‹๊ณผ ๋ฉ”๋””์—์ดํ„ฐ ํ† ํด๋กœ์ง€์˜ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜(Orchestration) ๋ฐฉ์‹์„ ๊ฒฐํ•ฉํ•˜๋Š” ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์„ค๊ณ„์˜ ๊ธฐ์ค€์€ ๋ฌด์—‡์ธ๊ฐ€? * ์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค ๊ตฌํ˜„ ์‹œ ํ(Queue) ๋ฐฉ์‹ ๋Œ€์‹  ์ŠคํŠธ๋ฆผ(Stream) ๋ฐฉ์‹์„ ์„ ํƒํ•  ๋•Œ, ์‹œ์Šคํ…œ์˜ ๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋ฐ ์ด๋ฒคํŠธ ์†Œ์‹ฑ(Event Sourcing) ๊ธฐ๋Šฅ ๊ตฌํ˜„์— ์–ด๋–ค ์ด์ ์ด ๋ฐœ์ƒํ•˜๋Š”๊ฐ€? * ๊ฐœ๋ณ„ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์ˆ˜๋งŽ์€ ์ด๋ฒคํŠธ๋ฅผ ๋ณ‘๋ ฌ ์Šค๋ ˆ๋“œ๋กœ ์ฒ˜๋ฆฌํ•  ๋•Œ, ์ด๋ฒคํŠธ์˜ ์ˆœ์„œ๋ฅผ ๋ณด์žฅ(Ordering)ํ•˜๊ฑฐ๋‚˜ ์ •ํ™•ํžˆ ํ•œ ๋ฒˆ(Exactly-once) ์ฒ˜๋ฆฌ๋˜๋„๋ก ์„ค๊ณ„ํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜์  ๊ธฐ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? * ๋‹จ์ผ ๋ธŒ๋กœ์ปค ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์„ฑ๋Šฅ ๋ณ‘๋ชฉ์ด๋‚˜ ๋‹จ์ผ ์žฅ์• ์ (SPOF)์ด ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ถ„์‚ฐ ์—ฐํ•ฉ ๋ธŒ๋กœ์ปค(Federated Event Broker)๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ ๊ณ ๋ คํ•ด์•ผ ํ•  ํ†ต์‹  ์ง€์—ฐ ๋ฐ ๋™๊ธฐํ™” ์ด์Šˆ๋Š” ๋ฌด์—‡์ธ๊ฐ€? ### Practical Application Contexts * **Implementation:** ๋ณต์žกํ•œ ๋กค๋ฐฑ์ด๋‚˜ ์ƒํƒœ ์ถ”์ ์ด ํ•„์š” ์—†๋Š” ๋‹จ๋ฐฉํ–ฅ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ(์˜ˆ: ๋‹จ์ˆœ ์‚ฌ์šฉ์ž ์•ก์…˜์— ๋Œ€ํ•œ ๋กœ๊ทธ ์ˆ˜์ง‘ ๋ฐ ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ ์ „์†ก)๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค [9, 14]. * **System Design:** ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ๊ฒฐํ•ฉ๋„๋ฅผ ์ตœํ•˜๋กœ ๋‚ฎ์ถ”๊ณ  ๋ฌด์ค‘๋‹จ ์Šค์ผ€์ผ๋ง์ด ํ•„์š”ํ•œ ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ ํ™˜๊ฒฝ์—์„œ, ์„œ๋น„์Šค ๊ฐ„ ์ง์ ‘ ํ†ต์‹ (Point-to-point)์„ ๋Œ€์ฒดํ•˜๋Š” ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง€ ๋ฒ„์Šค๋กœ ์„ค๊ณ„๋ฉ๋‹ˆ๋‹ค [2, 4, 10]. * **Operation / Maintenance:** ๊ฐœ๋ณ„ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๊ธฐ์˜ ์žฅ์• ๊ฐ€ ์ „์ฒด ์‹œ์Šคํ…œ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์•„ ์šด์˜ ์•ˆ์ •์„ฑ์ด ํ–ฅ์ƒ๋˜์ง€๋งŒ, ๋กœ๊ทธ ์ถ”์ (Correlation ID ๋„์ž… ๋“ฑ)๊ณผ ์žฅ์•  ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ(Dead Letter Queue) ์‹œ์Šคํ…œ ๊ตฌ์ถ•์ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค [7, 10, 11]. * **Learning Path:** ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…ํŠธ๊ฐ€ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ(EDA)์„ ์„ค๊ณ„ํ•  ๋•Œ, ์ฒซ ๋ฒˆ์งธ ๋ถ„๊ธฐ์ ์ธ '๋‹จ์ˆœ์„ฑ(Broker)'๊ณผ '์ œ์–ด๋ ฅ(Mediator)' ์‚ฌ์ด์˜ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ํ•ต์‹ฌ ํ•™์Šต ๊ฒฝ๋กœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค [1, 3, 19]. * **My Project Relevance:** IoT ์„ผ์„œ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ์‹œ์Šคํ…œ์ด๋‚˜, ์—ฌ๋Ÿฌ ํŒ€์ด ๋ณ„๋„๋กœ ์šด์˜ํ•˜๋Š” ๊ธฐ๋Šฅ(์˜ˆ: ๊ฒฐ์ œ ์™„๋ฃŒ ํ›„ ์ด๋ฉ”์ผ ์ „์†ก, ์ธ๋ฒคํ† ๋ฆฌ ์—…๋ฐ์ดํŠธ, ๊ณ ๊ฐ ํฌ์ธํŠธ ์ ๋ฆฝ)๋“ค์ด ๋™์ผํ•œ ์ด๋ฒคํŠธ(๊ฒฐ์ œ ์™„๋ฃŒ)๋ฅผ ๋ณ‘๋ ฌ์ ์œผ๋กœ ์ˆ˜์‹ ํ•ด ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ๋•Œ ๋„์ž…์„ ๊ฒ€ํ† ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [14, 20]. ### Adjacent Topics * [[Broker Architecture Pattern]] * ํ™•์žฅ ๋ฐฉํ–ฅ: ๋ธŒ๋กœ์ปค ํ† ํด๋กœ์ง€์™€ ์œ ์‚ฌํ•˜๊ฒŒ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ํ†ต์‹ ์„ ๋งค๊ฐœํ•˜์—ฌ ๊ตฌ์กฐ๋ฅผ ๋””์ปคํ”Œ๋งํ•˜๋Š” ์ƒ์œ„ ๋ ˆ๋ฒจ์˜ ๋ธŒ๋กœ์ปค ํŒจํ„ด ์ „๋ฐ˜์˜ ํ™œ์šฉ๊ณผ ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ๊ฐ„ ์ค‘์žฌ ๋ฐฉ์‹์„ ์—ฐ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [21, 22]. * [[Microservices Architecture (MSA)]] * ํ™•์žฅ ๋ฐฉํ–ฅ: ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐ„ ๋А์Šจํ•œ ๊ฒฐํ•ฉ(Loose Coupling)์„ ์‹คํ˜„ํ•˜๊ณ  ์„œ๋น„์Šค ์ž์œจ์„ฑ์„ ๋ถ€์—ฌํ•˜๊ธฐ ์œ„ํ•œ ๋‚ด๋ถ€ ํ†ต์‹  ์ˆ˜๋‹จ์œผ๋กœ์„œ ๋ธŒ๋กœ์ปค ํ† ํด๋กœ์ง€๊ฐ€ ์–ด๋–ป๊ฒŒ ์ ‘๋ชฉ๋˜๋Š”์ง€ ํƒ๊ตฌํ•ฉ๋‹ˆ๋‹ค [10, 23]. --- *Last updated: 2026-05-02*