--- id: wiki-2026-0508-message-brokers title: Message Brokers category: Architecture status: needs_review canonical_id: self aliases: [] duplicate_of: none source_trust_level: A confidence_score: 0.92 tags: [auto-wikified, technical-documentation, merged, architecture] raw_sources: [] last_reinforced: 2026-05-08 github_commit: pending inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08) tech_stack: language: unspecified framework: unspecified --- # Message Brokers ## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค(Message Brokers)๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•„ํ‚คํ…์ฒ˜์—์„œ ์‹œ์Šคํ…œ์˜ ๊ฒฐ๊ณผ๋ฅผ ์™ธ๋ถ€๋กœ ์ „๋‹ฌํ•˜๋Š” ๋ณด์กฐ ์–ด๋Œ‘ํ„ฐ(Secondary Adapters) ๋ฐ ์ถœ๋ ฅ ํ•ธ๋“ค๋Ÿฌ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ธฐ์ˆ  ์š”์†Œ์ž…๋‹ˆ๋‹ค [1]. ์ฃผ๋กœ ๋ฉ”์ผ, ์•Œ๋ฆผ, ๋กœ๊น…, ์•„์นด์ด๋น™ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง•(async messaging)์„ ๊ตฌํ˜„ํ•  ๋•Œ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค [2]. ๋Œ€ํ‘œ์ ์ธ ์ข…๋ฅ˜๋กœ๋Š” Redis, NATS, Kafka, RabbitMQ ๋“ฑ์ด ์žˆ์œผ๋ฉฐ, ๋™๊ธฐ์‹ ํ”„๋กœํ† ์ฝœ์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ณ  ๋น„์ฐจ๋‹จ(non-blocking) ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค [2-4]. ## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) * **์•„ํ‚คํ…์ฒ˜์—์„œ์˜ ์—ญํ• ๊ณผ ์œ„์น˜:** ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜(Hexagonal Architecture) ํŒจํ„ด์—์„œ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋‚˜ API ํด๋ผ์ด์–ธํŠธ์™€ ํ•จ๊ป˜ ์™ธ๋ถ€ ์‹œ์Šคํ…œ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” '๋ณด์กฐ ์–ด๋Œ‘ํ„ฐ(Secondary Adapters)'๋กœ ์ทจ๊ธ‰๋ฉ๋‹ˆ๋‹ค [1]. * **ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๋‚ด์žฅ ์ง€์› ๋ฐ ์ผ๊ด€์„ฑ:** NestJS์™€ ๊ฐ™์€ ํ˜„๋Œ€์  ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์ „์†ก ๊ณ„์ธต์— Redis, NATS, Kafka, RabbitMQ ๋“ฑ์˜ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋ฅผ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‚ด์žฅํ•˜์—ฌ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค [3, 4]. ์ด๋Ÿฌํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๋‹ค์–‘ํ•œ ์ „์†ก ๋ฐฉ์‹ ๊ฐ„์— ์ผ๊ด€๋œ API๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋ฅผ ๋‹ค๋ฅธ ์ข…๋ฅ˜๋กœ ์ „ํ™˜(switching)ํ•˜๋Š” ์ž‘์—…์„ ๋งค์šฐ ์ง๊ด€์ ์ด๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [4]. ๋ฐ˜๋ฉด, Express์™€ ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๋‚ด์žฅ๋œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์ง€์›์ด ์—†์œผ๋ฏ€๋กœ ๊ฐ ์ „์†ก ๋ฉ”์ปค๋‹ˆ์ฆ˜๋งˆ๋‹ค ๊ฐœ๋ณ„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ณ„๋„๋กœ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [3]. * **๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ ๋ถ„์‚ฐ๊ณผ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ:** HTTP๋Š” ๋™๊ธฐ์‹ ํ”„๋กœํ† ์ฝœ์ด๋ฏ€๋กœ ํŠธ๋ž˜ํ”ฝ์ด ๋งŽ์€ ์‹œ์Šคํ…œ์—์„œ๋Š” ์„ฑ๋Šฅ์„ ์ œ์•ฝํ•˜๋Š” ๋ณ‘๋ชฉ ์š”์†Œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [2]. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋ฅผ ์ด์šฉํ•œ ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง• ๋ฐ ์ž๋™ ๋ฐฑํ”„๋ ˆ์…”(back pressure)๋ฅผ ์ง€์›ํ•˜๋Š” ๋น„์ฐจ๋‹จ(non-blocking) ํ†ต์‹  ๋ฐฉ์‹์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค [2]. ์†Œ๊ทœ๋ชจ ๊ฐœ๋ฐœ ํŒ€์ด ๋ชจ๋†€๋ฆฌ์Šค(Monolith) ์•„ํ‚คํ…์ฒ˜๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋”๋ผ๋„, ๋ฉ”์ผ ์ „์†ก์ด๋‚˜ ๋กœ๊น…๊ณผ ๊ฐ™์€ ๋ถ€๊ฐ€ ์ž‘์—…์—๋Š” ๊ฐ€๋Šฅํ•œ ํ•œ ๋นจ๋ฆฌ ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง•์„ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค [2]. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & Updates) ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋ฅผ ๋„์ž…ํ•˜์—ฌ ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง• ๊ตฌ์กฐ ๋ฐ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ๊ณ ํŠธ๋ž˜ํ”ฝ ์‹œ์Šคํ…œ์—์„œ ํ•„์ˆ˜์ ์ธ ์ตœ์ ํ™” ๋ฐฉ๋ฒ•์ด์ง€๋งŒ, ๊ฐœ๋ฐœ ๊ด€์ ์—์„œ๋Š” ์‹œ์Šคํ…œ์˜ ๋ณต์žก์„ฑ์ด ๊ฐ์†Œํ•˜๊ธฐ๋ณด๋‹ค๋Š” ์˜คํžˆ๋ ค ๋ถ„์‚ฐ ์‹œ์Šคํ…œ ํŠน์œ ์˜ ๋ณต์žก์„ฑ์ด ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋œ๋‹ค๋Š” ๋ฐ˜๋Œ€ ๊ธ‰๋ถ€(Trade-off)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค [5]. ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค ์ธํ”„๋ผ๋ฅผ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ž๋™ํ™” ๋ฐ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜(orchestration)์ด ๋ฐฐํฌ์˜ ํ•ต์‹ฌ ์š”๊ฑด์ด ๋˜๋ฉฐ, ๋•Œ๋กœ๋Š” ๊ธฐ์„ฑ ์†”๋ฃจ์…˜ ์™ธ์— ์ž์ฒด์ ์œผ๋กœ ๋งž์ถค ๊ฐœ๋ฐœ(custom build)์„ ์ง„ํ–‰ํ•ด์•ผ ํ•˜๋Š” ์ œ์•ฝ ์‚ฌํ•ญ๊ณผ ์ถ”๊ฐ€ ์ž‘์—…์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [5]. --- *Last updated: 2026-05-03* ## ๐Ÿ“š Legacy Insights & Additional Context > [!NOTE] > Below is content merged from previous versions of this documentation. ## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค(Message Brokers)๋Š” ์ด๋ฒคํŠธ ์ฃผ๋„ ์•„ํ‚คํ…์ฒ˜(Event-Driven Architecture) ๋ฐ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ ์‹œ์Šคํ…œ ์ปดํฌ๋„ŒํŠธ(์ƒ์‚ฐ์ž์™€ ์†Œ๋น„์ž) ๊ฐ„์˜ ๋ฉ”์‹œ์ง€๋‚˜ ์ด๋ฒคํŠธ๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋ผ์šฐํŒ…ํ•˜๊ณ  ์ „์†กํ•˜๋Š” ์ค‘์•™ ์ค‘๊ฐœ ์š”์†Œ์ž…๋‹ˆ๋‹ค [1-3]. ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ณ„ ์„œ๋น„์Šค ๊ฐ„์˜ ์ง์ ‘์ ์ธ ํ†ต์‹  ์˜์กด์„ฑ์„ ์ œ๊ฑฐํ•˜์—ฌ ๊ฒฐํ•ฉ๋„(Coupling)๋ฅผ ๋‚ฎ์ถ”๊ณ , ์‹œ์Šคํ…œ์˜ ํ™•์žฅ์„ฑ๊ณผ ๋‚ด๊ฒฐํ•จ์„ฑ(Fault tolerance)์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค [4, 5]. ## ๐Ÿ“– Core ์†Œ์Šค Content - **์ด๋ฒคํŠธ ์ฑ„๋„ ๋ฐ ํ†ต์‹  ์ค‘๊ฐœ:** ์ด๋ฒคํŠธ ์ฃผ๋„ ์•„ํ‚คํ…์ฒ˜์—์„œ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋Š” ์ด๋ฒคํŠธ ์ƒ์‚ฐ์ž๊ฐ€ ์ƒ์„ฑํ•œ ์ด๋ฒคํŠธ๋ฅผ ์ด๋ฒคํŠธ ์†Œ๋น„์ž์—๊ฒŒ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ „๋‹ฌํ•˜๋Š” '์ด๋ฒคํŠธ ์ฑ„๋„' ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค [1, 2]. ์ƒ์‚ฐ์ž์™€ ์†Œ๋น„์ž๋Š” ์„œ๋กœ๋ฅผ ์•Œ ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ, ๋ธŒ๋กœ์ปค๊ฐ€ ์ด๋ฅผ ์ค‘๊ฐ„์—์„œ ๋ผ์šฐํŒ…ํ•ฉ๋‹ˆ๋‹ค [2]. - **ํ(Queues)์™€ ์ŠคํŠธ๋ฆผ(Streams) ๋ฉ”์ปค๋‹ˆ์ฆ˜:** ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋Š” ์ฃผ๋กœ ํ๋‚˜ ์ŠคํŠธ๋ฆผ ํ˜•ํƒœ๋กœ ์ด๋ฒคํŠธ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค [6-8]. ํ๋Š” ์ด๋ฒคํŠธ๊ฐ€ ์ฒ˜๋ฆฌ๋  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐ์‹œํ‚ค๋Š” ๋ฐ ์œ ์šฉํ•˜๋ฉฐ ๊ฐ ์ด๋ฒคํŠธ๊ฐ€ ๊ณ ์œ ํ•˜๊ฒŒ ํ•œ ๋ฒˆ๋งŒ ์ฒ˜๋ฆฌ๋˜๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค [6, 8]. ๋ฐ˜๋ฉด ์ŠคํŠธ๋ฆผ์€ ์ด๋ฒคํŠธ๋ฅผ ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅํ•˜์—ฌ ์—ฌ๋Ÿฌ ์†Œ๋น„์ž๊ฐ€ ๊ฐ์ž์˜ ์†๋„์— ๋งž์ถฐ ์ด๋ฒคํŠธ๋ฅผ ๊ฐ€์ ธ๊ฐ€๊ฑฐ๋‚˜ ๊ณผ๊ฑฐ ์ด๋ฒคํŠธ๋ฅผ ์žฌ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค [7, 8]. - **๋ธŒ๋กœ์ปค ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด(Broker Architecture Pattern):** ๋ถ„์‚ฐ ์‹œ์Šคํ…œ ๋‚ด์—์„œ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด๋‚˜ ์ด๋ฒคํŠธ๋ฅผ ์ ์ ˆํ•œ ์„œ๋ฒ„๋‚˜ ์„œ๋น„์Šค๋กœ ์ „๋‹ฌํ•˜๊ณ  ํ†ต์‹ ์„ ์กฐ์ •ํ•˜๋Š” ์ค‘์•™ ์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค [3, 9]. ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๊ฑฐ๋‚˜ ๋ณต์žกํ•œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ œ์–ดํ•˜๋Š” ๋ฉ”๋””์—์ดํ„ฐ(Mediator) ํ† ํด๋กœ์ง€์™€ ๋‹ฌ๋ฆฌ, ๋ธŒ๋กœ์ปค๋Š” ์ฃผ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์‹œ์Šคํ…œ ์ „์ฒด์— ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธํ•˜๊ฑฐ๋‚˜ ํŠน์ • ์ฑ„๋„๋กœ ์ „๋‹ฌํ•˜๋Š” "๋‹จ์ˆœํ•œ ํŒŒ์ดํ”„(dumb pipe)"์˜ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค [10, 11]. - **์ฃผ์š” ํ™œ์šฉ ์‚ฌ๋ก€ ๋ฐ ๋„๊ตฌ:** ์‹œ์Šคํ…œ์˜ ์ฝ๊ธฐ ๋ชจ๋ธ๊ณผ ์“ฐ๊ธฐ ๋ชจ๋ธ์„ ๋™๊ธฐํ™”ํ•ด์•ผ ํ•˜๋Š” CQRS ํŒจํ„ด ๋“ฑ์—์„œ ํ•„์ˆ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค [12]. ์—…๊ณ„์—์„œ๋Š” ์ฃผ๋กœ Apache Kafka, RabbitMQ, ActiveMQ, JBoss Messaging๊ณผ ๊ฐ™์€ ์†Œํ”„ํŠธ์›จ์–ด๋‚˜ AWS SQS, AWS MQ, Google Cloud Pub/Sub๊ณผ ๊ฐ™์€ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค ํ˜•ํƒœ๋กœ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค [1, 5, 13]. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & Updates) - **์•„ํ‚คํ…์ฒ˜์  ์ด์ :** ์„œ๋น„์Šค ๊ฐ„ ๊ฐ•ํ•œ ๊ฒฐํ•ฉ์„ ๋Š์–ด๋‚ด์–ด(Decoupling) ์ˆ˜ํ‰์  ํ™•์žฅ์ด ์šฉ์ดํ•ด์ง€๋ฉฐ, ํŠน์ • ์„œ๋น„์Šค๊ฐ€ ์‹คํŒจํ•˜๋”๋ผ๋„ ์ด๋ฒคํŠธ๊ฐ€ ํ์— ์ €์žฅ๋˜์–ด ๋ณต๊ตฌ ํ›„ ์ฒ˜๋ฆฌ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ „์ฒด ์‹œ์Šคํ…œ์˜ ๋‚ด๊ฒฐํ•จ์„ฑ์ด ๋งค์šฐ ๋†’์•„์ง‘๋‹ˆ๋‹ค [4, 5, 11]. - **์ธํ”„๋ผ ๋น„์šฉ ๋ฐ ๋ณต์žก์„ฑ:** ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค์˜ ๋„์ž…์€ ์ธํ”„๋ผ ์˜ค๋ฒ„ํ—ค๋“œ์™€ ๋น„์šฉ ์ฆ๊ฐ€๋ฅผ ์ดˆ๋ž˜ํ•ฉ๋‹ˆ๋‹ค [14]. ๋˜ํ•œ, ์ ์ ˆํ•œ ํŽ˜์ผ์˜ค๋ฒ„(Failover) ๋งค์ปค๋‹ˆ์ฆ˜์ด๋‚˜ ํŽ˜๋”๋ ˆ์ด์…˜(Federation) ๊ตฌ์กฐ๋กœ ์„ค๊ณ„๋˜์ง€ ์•Š์„ ๊ฒฝ์šฐ, ๋ธŒ๋กœ์ปค ์ž์ฒด๊ฐ€ ๋‹จ์ผ ์žฅ์• ์ (Single Point of Failure)์ด ๋˜์–ด ์ „์ฒด ์‹œ์Šคํ…œ์„ ๋งˆ๋น„์‹œํ‚ฌ ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค [9, 15]. - **๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ ๋ฐ ์ง€์—ฐ ์‹œ๊ฐ„:** ์ง์ ‘์ ์ธ ๋™๊ธฐ์‹ ํ˜ธ์ถœ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ฆ‰์‹œ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ์ตœ์ข… ์ผ๊ด€์„ฑ(Eventual Consistency) ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ [14, 16], ๋ธŒ๋กœ์ปค๋ฅผ ๊ฑฐ์ณ ๋ฉ”์‹œ์ง€๊ฐ€ ๋ผ์šฐํŒ…๋˜๋Š” ๊ณผ์ •์—์„œ ๋„คํŠธ์›Œํฌ ๋Œ€๊ธฐ ์‹œ๊ฐ„(Latency)์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [5, 17]. - **๋””๋ฒ„๊น… ๋ฐ ํ…Œ์ŠคํŠธ ๋‚œ์ด๋„ ์ฆ๊ฐ€:** ์ˆ˜๋งŽ์€ ์„œ๋น„์Šค ๊ฐ„์— ๋น„๋™๊ธฐ์ ์ด๊ณ  ๋ถ„์‚ฐ๋œ ์ด๋ฒคํŠธ ์ „๋‹ฌ์ด ์ผ์–ด๋‚˜๋ฏ€๋กœ, ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ ์žฅ์• ๋ฅผ ์ถ”์ ํ•˜๊ณ  ๋””๋ฒ„๊น…ํ•˜๋Š” ๊ณผ์ •์ด ๊ธฐ์กด ๋™๊ธฐ ์‹œ์Šคํ…œ๋ณด๋‹ค ํ›จ์”ฌ ๋ณต์žกํ•ด์ง‘๋‹ˆ๋‹ค [14, 16, 18]. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) ### Related Concepts #### [์•„ํ‚คํ…์ฒ˜ / ๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] - [[Event-Driven Architecture]] - ์—ฐ๊ฒฐ ์ด์œ : ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋Š” ์ด๋ฒคํŠธ ์ฃผ๋„ ์•„ํ‚คํ…์ฒ˜์—์„œ ์ด๋ฒคํŠธ๋ฅผ ๋ถ„๋ฐฐํ•˜๋Š” ํ•ต์‹ฌ ์ธํ”„๋ผ(์ด๋ฒคํŠธ ์ฑ„๋„)๋กœ ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค [1, 2]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋น„๋™๊ธฐ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ ์ฒ˜๋ฆฌ, ์‹ค์‹œ๊ฐ„ ๋ฐ˜์‘ํ˜• ์‹œ์Šคํ…œ์˜ ๋™์ž‘ ์›๋ฆฌ ๋ฐ ๋ธŒ๋กœ์ปค ํ† ํด๋กœ์ง€์™€ ๋ฉ”๋””์—์ดํ„ฐ ํ† ํด๋กœ์ง€์˜ ์ฐจ์ด. - [[Microservices Architecture Pattern]] - ์—ฐ๊ฒฐ ์ด์œ : ๋…๋ฆฝ์ ์ธ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐ„์˜ ๋А์Šจํ•œ ๊ฒฐํ•ฉ์„ ์œ ์ง€ํ•˜๊ณ  ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง•์ด ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค [19, 20]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ถ„์‚ฐ ์„œ๋น„์Šค ํ™˜๊ฒฝ์—์„œ์˜ ์„œ๋น„์Šค ์ž์œจ์„ฑ(Autonomy) ๋ฐ ํ†ต์‹  ๋ณ‘๋ชฉ ํ•ด๊ฒฐ ์ „๋žต. #### [๊ตฌํ˜„ / ํ™œ์šฉ ๋„๊ตฌ ๋ฐ ์„ค๊ณ„ ๊ธฐ๋ฒ•] - [[Apache Kafka / RabbitMQ]] - ์—ฐ๊ฒฐ ์ด์œ : ์†Œ์Šค์—์„œ ๋ช…์‹œ์ ์œผ๋กœ ์–ธ๊ธ‰๋œ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค ์†Œํ”„ํŠธ์›จ์–ด์˜ ์‹ค์ œ ๊ตฌํ˜„์ฒด์ž…๋‹ˆ๋‹ค [1, 5, 13]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์‹ค์ œ ํ(Queue)์™€ ์ŠคํŠธ๋ฆผ(Stream) ๊ธฐ๋ฐ˜ ๋ฉ”์‹œ์ง•์ด ์†Œํ”„ํŠธ์›จ์–ด ๋ ˆ๋ฒจ์—์„œ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ ๋ฐ ์„ค์ •๋˜๋Š”์ง€. - [[CQRS]] - ์—ฐ๊ฒฐ ์ด์œ : ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ๋ชจ๋ธ๊ณผ ์“ฐ๋Š” ๋ชจ๋ธ์„ ๋ถ„๋ฆฌํ•˜๋Š” CQRS์—์„œ ๋‘ ๋ชจ๋ธ ๊ฐ„์˜ ๋™๊ธฐํ™” ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๊ฐ€ ํ•„์ˆ˜์ ์œผ๋กœ ์š”๊ตฌ๋ฉ๋‹ˆ๋‹ค [12]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ฐ์ดํ„ฐ ์ง‘์•ฝ์  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๋ธŒ๋กœ์ปค์˜ ์‹ค๋ฌด ์ ์šฉ ๋ฐฉ๋ฒ•. ### Deeper Research Questions - ์ด๋ฒคํŠธ ์ฑ„๋„์„ ํ(Queue)๋กœ ๊ตฌํ˜„ํ•  ๋•Œ์™€ ์ŠคํŠธ๋ฆผ(Stream)์œผ๋กœ ๊ตฌํ˜„ํ•  ๋•Œ์˜ ๊ตฌ์กฐ์  ์ฐจ์ด์ ์€ ๋ฌด์—‡์ด๋ฉฐ, ๊ฐ๊ฐ ์–ด๋–ค ๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค(์˜ˆ: ์ด์ปค๋จธ์Šค vs ์‹ค์‹œ๊ฐ„ ๋กœ๊ทธ ๋ถ„์„)์— ์ ํ•ฉํ•œ๊ฐ€? - ์ค‘์•™ ์ง‘์ค‘ํ˜• ๋ฉ”๋””์—์ดํ„ฐ(Mediator)์™€ ๋‹ฌ๋ฆฌ ๋ธŒ๋กœ์ปค(Broker) ํ† ํด๋กœ์ง€๋งŒ์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ํŠธ๋žœ์žญ์…˜ ๋„์ค‘ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ(Error)์˜ ๋กค๋ฐฑ ๋ฐ ๋ณด์ƒ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๋Š” ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š”๊ฐ€? - ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๊ฐ€ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์˜ ๋‹จ์ผ ์žฅ์• ์ (Single Point of Failure)์ด ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ ํ™˜๊ฒฝ์—์„œ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํŽ˜๋”๋ ˆ์ด์…˜(Federation) ๋ฐ ํ™•์žฅ ์ „๋žต์€ ๋ฌด์—‡์ธ๊ฐ€? - ๋™๊ธฐ์  HTTP REST ํ†ต์‹ ๊ณผ ๋น„๊ตํ•˜์—ฌ, ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋ฅผ ํ™œ์šฉํ•œ ๋น„๋™๊ธฐ ํ†ต์‹ ์ด ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹  ์ง€์—ฐ(Latency)๊ณผ ์‹œ์Šคํ…œ ์ „์ฒด ์ฒ˜๋ฆฌ๋Ÿ‰(Throughput)์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์€ ์–ด๋–ป๊ฒŒ ์ธก์ •๋˜๊ณ  ์ตœ์ ํ™”๋˜๋Š”๊ฐ€? - ์ด๋ฒคํŠธ ๊ตฌ์กฐ ๋ณ€๊ฒฝ์ด๋‚˜ ๋ฒ„์ „ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•  ๋•Œ, ์ˆ˜๋งŽ์€ ์†Œ๋น„์ž๊ฐ€ ์—ฐ๊ฒฐ๋œ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค ํ™˜๊ฒฝ์—์„œ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ(Backward compatibility)์„ ์œ ์ง€ํ•˜๋Š” ์ „๋žต์€ ๋ฌด์—‡์ธ๊ฐ€? ### Practical Application Contexts - **Implementation:** ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ„ ํ†ต์‹ ์„ ์œ„ํ•ด Apache Kafka๋‚˜ RabbitMQ๋ฅผ ์„ค์ •ํ•˜์—ฌ ๋ฐœํ–‰/๊ตฌ๋…(Publish/Subscribe) ์ฑ„๋„์„ ๋งŒ๋“ค๊ณ  ์„œ๋น„์Šค ๋กœ์ง์—์„œ ์ง์ ‘์  API ํ˜ธ์ถœ์„ ๋Œ€์ฒดํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค [1, 2, 5]. - **System Design:** ํŠธ๋ž˜ํ”ฝ ๊ธ‰์ฆ(Spike)์ด ์˜ˆ์ƒ๋˜๋Š” ์•„ํ‚คํ…์ฒ˜๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ, ์š”์ฒญ์„ ๋ฐ›์•„๋‚ด๋Š” ์›น ์„œ๋ฒ„์™€ ์š”์ฒญ์„ ์‹ค์ œ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ์›Œ์ปค(Worker) ์„œ๋ฒ„ ์‚ฌ์ด์— ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋ฅผ ๋ฐฐ์น˜ํ•˜์—ฌ ์‹œ์Šคํ…œ ๋ถ€ํ•˜๋ฅผ ๋ฒ„ํผ๋งํ•˜๋„๋ก ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค [4, 21, 22]. - **Operation / Maintenance:** ๋ฉ”์‹œ์ง€๊ฐ€ ์ฒ˜๋ฆฌ๋˜์ง€ ๋ชปํ•˜๊ณ  ์Œ“์ด๋Š” ๋ณ‘๋ชฉ ํ˜„์ƒ์„ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด ๋ถ„์‚ฐ ์ถ”์ (Distributed tracing) ๋„๊ตฌ๋ฅผ ๋„์ž…ํ•˜๊ณ , ๋ฌธ์ œ ๋ฐœ์ƒ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒฉ๋ฆฌ๋œ ๋ฐ๋“œ ๋ ˆํ„ฐ ํ(Dead Letter Queue) ๋˜๋Š” ์—๋Ÿฌ ํ•ธ๋“ค๋Ÿฌ ํ”„๋กœ์„ธ์„œ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [14, 16]. - **Learning Path:** ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ํŒจํ„ด์—์„œ์˜ ๋™๊ธฐ ํ†ต์‹  ํ•œ๊ณ„์  ํ•™์Šต -> ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๋„์ž…์— ๋”ฐ๋ฅธ ๊ฒฐํ•ฉ๋„ ๋ฌธ์ œ ํŒŒ์•… -> ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋น„๋™๊ธฐ์‹ ์ด๋ฒคํŠธ ์ฃผ๋„ ์•„ํ‚คํ…์ฒ˜ ํ•™์Šต -> ์‹ค์ œ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค ๊ธฐ์ˆ ๊ณผ ๋ถ„์‚ฐ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ ์ตœ์ ํ™” ๊ธฐ๋ฒ• ์ˆœ์œผ๋กœ ํ•™์Šต์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค [2, 20, 23]. - **My Project Relevance:** ๋‹ค์ˆ˜์˜ ๋ชจ๋“ˆ์ด ์„œ๋กœ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ  ๊ณ ์œ ์˜ ์†๋„์— ๋งž์ถฐ ๋Œ€์šฉ๋Ÿ‰์˜ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ๋ถ„์„, ์•Œ๋ฆผ ์ „์†ก ์‹œ์Šคํ…œ, ์ด์ปค๋จธ์Šค ํŠธ๋žœ์žญ์…˜ ๋“ฑ์˜ ํ”„๋กœ์ ํŠธ ๊ธฐํš ๋ฐ ๊ฐœ๋ฐœ ์‹œ ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜์˜ ์ค‘์‹ฌ ์ปดํฌ๋„ŒํŠธ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [21, 24, 25]. ### Adjacent Topics - [[Event Sourcing]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ƒํƒœ๊ฐ€ ์•„๋‹Œ ์ด๋ฒคํŠธ ๋กœ๊ทธ์˜ ์ŠคํŠธ๋ฆผ์œผ๋กœ ์ €์žฅํ•˜์—ฌ ๊ณผ๊ฑฐ์˜ ํŠน์ • ์‹œ์ ์œผ๋กœ ์ƒํƒœ๋ฅผ ๋ณต์›ํ•˜๊ฑฐ๋‚˜ ๊ฐ์‚ฌ(Audit) ํŠธ๋ ˆ์ผ์„ ๊ตฌํ˜„ํ•˜๋Š” ์„ค๊ณ„ ๊ธฐ๋ฒ•์œผ๋กœ ํ™•์žฅํ•˜์—ฌ ์—ฐ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [26]. - [[Saga Pattern]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ๊ฐ์ž ๋…๋ฆฝ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ฐ€์ง€๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํ™˜๊ฒฝ์—์„œ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค์˜ ์ด๋ฒคํŠธ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ผ๋ จ์˜ ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜๊ณผ ์—๋Ÿฌ ๋ณด์ƒ(Compensating transaction)์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„ ํŒจํ„ด์œผ๋กœ ์ง€์‹์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [16, 23]. --- *Last updated: 2026-05-02* ## ๐Ÿค– LLM ํ™œ์šฉ ํžŒํŠธ (How to Use This Knowledge) **์–ธ์ œ ์ด ์ง€์‹์„ ์“ฐ๋Š”๊ฐ€:** - *(TODO)* **์–ธ์ œ ์“ฐ๋ฉด ์•ˆ ๋˜๋Š”๊ฐ€:** - *(TODO)* ## ๐Ÿงช ๊ฒ€์ฆ ์ƒํƒœ (Validation) - **์ •๋ณด ์ƒํƒœ:** needs_review - **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** A - **๊ฒ€ํ†  ์ด์œ :** *(P-Reinforce Phase 1 ์ž๋™ ์ •๊ทœํ™”. ๋ณธ๋ฌธ ๊ฒ€์ฆ ํ•„์š”.)* ## ๐Ÿงฌ ์ค‘๋ณต ๊ฒ€์‚ฌ (Duplicate Check) - **๊ธฐ์กด ์œ ์‚ฌ ๋ฌธ์„œ:** *(TODO: ์ธ๋ฑ์„œ ํด๋Ÿฌ์Šคํ„ฐ ๋ฆฌํฌํŠธ ์ฐธ์กฐ)* - **์ฒ˜๋ฆฌ ๋ฐฉ์‹:** UPDATE (์ž๋™ ์ •๊ทœํ™”) - **์ฒ˜๋ฆฌ ์ด์œ :** Phase 1 ์ •๊ทœํ™” โ€” ์˜› ํ…œํ”Œ๋ฆฟ/๋ˆ„๋ฝ ํ•„๋“œ ๋ณด๊ฐ•. ## ๐Ÿ•“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Changelog) | ๋‚ ์งœ | ๋ณ€๊ฒฝ ๋‚ด์šฉ | ์ฒ˜๋ฆฌ ๋ฐฉ์‹ | ์‹ ๋ขฐ๋„ | |------|-----------|-----------|--------| | 2026-05-08 | P-Reinforce Phase 1 ์ •๊ทœํ™” (frontmatter + ํ—ค๋” ํ‘œ์ค€ํ™”) | UPDATE | A | ## ๐Ÿ’ป ์ฝ”๋“œ ํŒจํ„ด (Code Patterns) **ํŒจํ„ด 1:** *(TODO: ์ด ํ”„๋กœ์ ํŠธ ์ปจ๋ฒค์…˜ ๋ฐ˜์˜ํ•œ ๊ตฌ์กฐ ์Šค์ผˆ๋ ˆํ†ค)* ```text # TODO ``` ## ๐Ÿค” ์˜์‚ฌ๊ฒฐ์ • ๊ธฐ์ค€ (Decision Criteria) **์„ ํƒ A๋ฅผ ์จ์•ผ ํ•  ๋•Œ:** - *(TODO)* **์„ ํƒ B๋ฅผ ์จ์•ผ ํ•  ๋•Œ:** - *(TODO)* **๊ธฐ๋ณธ๊ฐ’:** > *(TODO)* ## โŒ ์•ˆํ‹ฐํŒจํ„ด (Anti-Patterns) - **[์•ˆํ‹ฐํŒจํ„ด]:** *(TODO: ๋ฌด์—‡์„ ํ•˜๋ฉด ์•ˆ ๋˜๋Š”๊ฐ€ + ์ด์œ  + ๋Œ€์‹  ๋ฌด์—‡์„)*