--- id: P-REINFORCE-WIKI-F634D2AB category: "10_Wiki/๐Ÿ’ก Topics/02_Architecture_Principles" confidence_score: 0.95 tags: ['software-architecture', '๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค-์•„ํ‚คํ…์ฒ˜-(microservices-architecture)', '์ด๋ฒคํŠธ-๊ธฐ๋ฐ˜-์•„ํ‚คํ…์ฒ˜-(event-driven-architecture)', 'ํ—ฅ์‚ฌ๊ณ ๋‚ -์•„ํ‚คํ…์ฒ˜-(hexagonal-architecture-/-ports-and-adapters)', 'atam-(architecture-tradeoff-analysis-method)', 'architecture-principles'] last_reinforced: 2026-05-02 --- # [[Software Architecture]] ## ๐Ÿ“Œ Brief Summary ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜(Software Architecture)๋Š” ์‹œ์Šคํ…œ์„ ์ถ”๋ก ํ•˜๊ณ  ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ฒญ์‚ฌ์ง„์ด์ž ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ๋“ค์˜ ์ง‘ํ•ฉ์œผ๋กœ, ์†Œํ”„ํŠธ์›จ์–ด ์š”์†Œ์™€ ์ด๋“ค ๊ฐ„์˜ ๊ด€๊ณ„, ๊ทธ๋ฆฌ๊ณ  ํ™˜๊ฒฝ๊ณผ ์„ค๊ณ„ ์›์น™์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค [1, 2]. ์ด๋Š” ์‹œ์Šคํ…œ ๊ตฌํ˜„ ํ›„ ๋ณ€๊ฒฝ ๋น„์šฉ์ด ๋งค์šฐ ๋†’๊ธฐ ๋•Œ๋ฌธ์— ์‹œ์Šคํ…œ ๊ฐœ๋ฐœ ์ดˆ๊ธฐ์— ๋‚ด๋ ค์ ธ์•ผ ํ•˜๋Š” ๊ฐ€์žฅ ์ „๋žต์ ์ด๊ณ  ํ•ต์‹ฌ์ ์ธ ๊ฒฐ์ •์˜ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค [2, 3]. ์ ์ ˆํ•œ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์„ ์ฑ„ํƒํ•จ์œผ๋กœ์จ ์‹œ์Šคํ…œ์€ ํ™•์žฅ์„ฑ, ์œ ์ง€๋ณด์ˆ˜์„ฑ, ๋ณด์•ˆ ๋ฐ ๋‚ด๊ฒฐํ•จ์„ฑ๊ณผ ๊ฐ™์€ ์ฃผ์š” ํ’ˆ์งˆ ์†์„ฑ(Quality Attributes)์„ ํ™•๋ณดํ•˜๊ณ  ๋น„์ฆˆ๋‹ˆ์Šค ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [4-6]. ## ๐Ÿ“– Core Content * **์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜์˜ ๋ณธ์งˆ ๋ฐ ๋ฒ”์œ„** ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜๋Š” ์‹œ์Šคํ…œ์ด ์š”๊ตฌํ•˜๋Š” ๊ธฐ๋Šฅ์  ์š”๊ตฌ์‚ฌํ•ญ๊ณผ ์„ฑ๋Šฅ, ์‹ ๋ขฐ์„ฑ, ํ™•์žฅ์„ฑ, ๋ณด์•ˆ ๋“ฑ์˜ ๋น„๊ธฐ๋Šฅ์  ์š”๊ตฌ์‚ฌํ•ญ(ํ’ˆ์งˆ ์†์„ฑ)์ด ๊ตฌ์กฐ์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ์‹คํ˜„๋˜๋Š”์ง€์— ์ดˆ์ ์„ ๋งž์ถฅ๋‹ˆ๋‹ค [5, 7]. ์ด๋Š” ๊ฑฐ์‹œ์ ์ธ ์‹œ์Šคํ…œ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐ˜๋ฉด, ์†Œํ”„ํŠธ์›จ์–ด ๋””์ž์ธ ํŒจํ„ด์€ ๊ฐœ๋ณ„ ์ปดํฌ๋„ŒํŠธ๋‚˜ ํด๋ž˜์Šค ๋‚ด๋ถ€์˜ ํŠน์ • ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฏธ์‹œ์ ์ธ ์†”๋ฃจ์…˜์ด๋ผ๋Š” ์ ์—์„œ ์ฐจ๋ณ„ํ™”๋ฉ๋‹ˆ๋‹ค [8-10]. ์•„ํ‚คํ…์ฒ˜๋Š” ์‹œ์Šคํ…œ ๊ตฌ์กฐ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๊ทธ๋Ÿฌํ•œ ๊ตฌ์กฐ์  ์„ ํƒ์„ ์ด๋ˆ ์•„ํ‚คํ…์ฒ˜ ๊ฒฐ์ •(Architectural Decisions)๊ณผ ๊ทธ์— ๋Œ€ํ•œ ๊ทผ๊ฑฐ(Rationale)์˜ ์ง‘ํ•ฉ์„ ๋ชจ๋‘ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค [11]. * **์•„ํ‚คํ…์ฒ˜ ๊ฒฐ์ • ๋ฐ ํ‰๊ฐ€ ๋ฐฉ๋ฒ•๋ก ** ์ ์ ˆํ•œ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์€ ๋‹จ์ˆœํ•œ ์œ ํ–‰์ด ์•„๋‹ˆ๋ผ ๋ช…ํ™•ํ•œ ํ’ˆ์งˆ ์š”๊ตฌ์‚ฌํ•ญ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ ํƒ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [6]. ISO/IEC 25010๊ณผ ๊ฐ™์€ ํ’ˆ์งˆ ๋ชจ๋ธ์„ ์ด์šฉํ•ด ๊ธฐ๋Šฅ ์ ํ•ฉ์„ฑ, ์„ฑ๋Šฅ ํšจ์œจ์„ฑ, ํ˜ธํ™˜์„ฑ ๋“ฑ์„ ์šฐ์„ ์ˆœ์œ„ํ™”ํ•ฉ๋‹ˆ๋‹ค [6, 12]. ์ดํ›„ ATAM(Architecture Tradeoff Analysis Method)๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•๋ก ์„ ํ†ตํ•ด ์‹œ๋‚˜๋ฆฌ์˜ค ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ ๊ตฌ์กฐ์˜ ์žฅ๋‹จ์ (Trade-offs)๊ณผ ๋ฆฌ์Šคํฌ๋ฅผ ๋ฉด๋ฐ€ํžˆ ๋ถ„์„ํ•˜๊ณ , ํ”„๋กœํ† ํƒ€์ดํ•‘์„ ํ†ตํ•ด ์กฐ๊ธฐ ๊ฒ€์ฆ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค [13-15]. ์ด๋Ÿฌํ•œ ๋ชจ๋“  ์„ค๊ณ„ ๊ฒฐ์ • ์‚ฌํ•ญ์€ ADR(Architecture Decision Record)์„ ํ†ตํ•ด ๋งฅ๋ฝ๊ณผ ๋Œ€์•ˆ, ๊ฒฐ๊ณผ๋ฅผ ๊ผผ๊ผผํžˆ ๋ฌธ์„œํ™”ํ•˜์—ฌ ํ–ฅํ›„ ์‹œ์Šคํ…œ์ด ์ง„ํ™”ํ•˜๋”๋ผ๋„ ์˜์‚ฌ๊ฒฐ์ •์˜ ๊ทผ๊ฑฐ๋ฅผ ๋ณด์กดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [16-18]. * **์ฃผ์š” ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด ๋ฐ ํŠน์„ฑ** ํ˜„๋Œ€ ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™์—์„œ ํ™œ์šฉ๋˜๋Š” ๋Œ€ํ‘œ์ ์ธ ํŒจํ„ด์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. * **๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜(Layered Pattern):** ํ”„๋ ˆ์  ํ…Œ์ด์…˜, ๋น„์ฆˆ๋‹ˆ์Šค, ๋ฐ์ดํ„ฐ ๊ณ„์ธต ๋“ฑ ์ˆ˜ํ‰์ ์œผ๋กœ ์ฑ…์ž„์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ์„ ๋†’์ด๋Š” ๊ฐ€์žฅ ๊ณ ์ „์ ์ด๊ณ  ์นœ์ˆ™ํ•œ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค [19, 20]. * **ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ๋ฐ P2P(Client-Server & P2P):** ์ค‘์•™ ์„œ๋ฒ„๊ฐ€ ์ž์›๊ณผ ๋ฐ์ดํ„ฐ ์ œ์–ด๋ฅผ ์ „๋‹ดํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„์™€ ๋‹ฌ๋ฆฌ, P2P๋Š” ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ํด๋ผ์ด์–ธํŠธ์ด์ž ์„œ๋ฒ„ ์—ญํ• ์„ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•˜์—ฌ ์ค‘์•™ ์„œ๋ฒ„์˜ ๋ณ‘๋ชฉ๊ณผ ๋‹จ์ผ ์žฅ์• ์ (SPOF)์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค [21-23]. * **๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜(Microservices Pattern):** ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž‘๊ณ  ๋…๋ฆฝ์ ์œผ๋กœ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ ์„œ๋น„์Šค๋“ค์˜ ์ง‘ํ•ฉ์œผ๋กœ ๋ถ„ํ• ํ•˜์—ฌ(์ฃผ๋กœ '์„œ๋น„์Šค๋‹น ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค' ์›์น™ ์‚ฌ์šฉ), ๋น ๋ฅธ ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ๊ณผ ๊ทน๋Œ€ํ™”๋œ ์ˆ˜ํ‰์  ํ™•์žฅ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค [24-26]. * **์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜(Event-Driven Pattern):** ์ƒํƒœ ๋ณ€ํ™”(์ด๋ฒคํŠธ)๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ƒ์‚ฐํ•˜๊ณ  ์†Œ๋น„ํ•˜๋Š” ๊ตฌ์กฐ๋กœ, ๊ทน๋‹จ์ ์œผ๋กœ ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„(Loose Coupling)์™€ ๋Œ€์šฉ๋Ÿ‰ ํŠธ๋ž˜ํ”ฝ์˜ ์‹ค์‹œ๊ฐ„ ์ฒ˜๋ฆฌ์— ์ตœ์ ํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ธŒ๋กœ์ปค(Broker)์™€ ๋ฉ”๋””์—์ดํ„ฐ(Mediator) ํ† ํด๋กœ์ง€๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค [27-29]. * **๋งˆ์ดํฌ๋กœ์ปค๋„ ์•„ํ‚คํ…์ฒ˜(Microkernel Pattern):** ์ตœ์†Œํ•œ์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ๋‹ด์€ ์ฝ”์–ด ์‹œ์Šคํ…œ์— ํŠนํ™”๋œ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ชจ๋“ˆ๋“ค์„ ๊ฒฐํ•ฉํ•˜์—ฌ ์œ ์—ฐํ•œ ๊ธฐ๋Šฅ ํ™•์žฅ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค [30, 31]. * **๋„๋ฉ”์ธ ์ค‘์‹ฌ ์•„ํ‚คํ…์ฒ˜(Hexagonal, Clean, Onion):** ์˜์กด์„ฑ ๋ฐฉํ–ฅ์„ ๋‚ด๋ถ€์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์œผ๋กœ ํ–ฅํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, UI ๋“ฑ ๊ธฐ์ˆ ์  ์„ธ๋ถ€์‚ฌํ•ญ์œผ๋กœ๋ถ€ํ„ฐ ํ•ต์‹ฌ ๋„๋ฉ”์ธ์„ ์™„๋ฒฝํžˆ ๊ฒฉ๋ฆฌํ•˜๋Š” ์˜์กด์„ฑ ์—ญ์ „์„ ์‹คํ˜„ํ•ฉ๋‹ˆ๋‹ค [32]. * **๊ณต๊ฐ„ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜(Space-Based Pattern):** ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ณ‘๋ชฉ์„ ์—†์• ๊ธฐ ์œ„ํ•ด ๋ฉ”๋ชจ๋ฆฌ ๋‚ด ๋ฐ์ดํ„ฐ ๊ทธ๋ฆฌ๋“œ(In-memory Data Grid)๋ฅผ ๋ถ„์‚ฐ ๊ณต์œ ํ•˜์—ฌ ๋™์‹œ์„ฑ๊ณผ ๋Œ€๊ทœ๋ชจ ๋ถ€ํ•˜๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค [33, 34]. ## โš–๏ธ Trade-offs & Caveats ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜ ๊ฒฐ์ •์—๋Š” "๋ชจ๋“  ๊ฒƒ์€ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„(Everything is a trade-off)"๋ผ๋Š” ์ œ1๋ฒ•์น™์ด ์กด์žฌํ•˜๋ฉฐ ์™„๋ฒฝํ•œ ์•„ํ‚คํ…์ฒ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค [3, 14]. * **๋ถ„์‚ฐ ์‹œ์Šคํ…œ์˜ ๋ณต์žก์„ฑ๊ณผ ๋น„์šฉ:** ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค(MSA)๋‚˜ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜๋Š” ๋›ฐ์–ด๋‚œ ์ž์œจ์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ์ฃผ์ง€๋งŒ, ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ(Saga ํŒจํ„ด ๋“ฑ ์ ์šฉ ํ•„์š”), ๋„คํŠธ์›Œํฌ ์ง€์—ฐ, ๋น„๋™๊ธฐ ๋””๋ฒ„๊น…, ๋‹ค์ค‘ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ์ตœ์ข… ์ผ๊ด€์„ฑ(Eventual Consistency) ๋“ฑ ๋ง‰๋Œ€ํ•œ ์šด์˜ ๋ฐ ์„ค๊ณ„ ๋ณต์žก์„ฑ์„ ์•ผ๊ธฐํ•ฉ๋‹ˆ๋‹ค [35-37]. * **์„œ๋ฒ„๋ฆฌ์Šค(Serverless)์˜ ์ œ์•ฝ:** ์„œ๋ฒ„๋ฆฌ์Šค๋Š” ์ธํ”„๋ผ ๊ด€๋ฆฌ ๋ถ€๋‹ด์„ ์ค„์ด๊ณ  ์‚ฌ์šฉ๋Ÿ‰๋งŒํผ๋งŒ ๋น„์šฉ์„ ์ง€๋ถˆํ•˜์ง€๋งŒ, ๋ฒค๋” ์ข…์†(Vendor Lock-in) ๋ฌธ์ œ์™€ ํ•จ๊ป˜ ์ผ์ • ์‹œ๊ฐ„ ๋น„ํ™œ์„ฑํ™” ์‹œ ๋ฐœ์ƒํ•˜๋Š” ์ฝœ๋“œ ์Šคํƒ€ํŠธ(Cold Start) ์ง€์—ฐ ์‹œ๊ฐ„ ๋ฌธ์ œ๊ฐ€ ์žˆ์–ด ์‹ค์‹œ๊ฐ„ ์‘๋‹ต์ด ํ•„์ˆ˜์ ์ธ ์„œ๋น„์Šค์—๋Š” ์น˜๋ช…์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [38-40]. * **์˜ค๋ฒ„ ์—”์ง€๋‹ˆ์–ด๋ง์˜ ์œ„ํ—˜:** ์ž‘์€ ๊ทœ๋ชจ์˜ ํŒ€์ด๋‚˜ ๋‹จ์ˆœํ•œ CRUD ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํŠธ๋ Œ๋“œ๋ผ๋Š” ์ด์œ ๋งŒ์œผ๋กœ MSA๋ฅผ ๋„์ž…ํ•˜๋ฉด ์˜คํžˆ๋ ค ์ƒ์‚ฐ์„ฑ์ด ํ•˜๋ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [41, 42]. ์ด ๊ฒฝ์šฐ ์ฒ ์ €ํžˆ ๋ชจ๋“ˆํ™”๋œ ๋‹จ์ผ ๋ฐฐํฌ ๋‹จ์œ„์ธ ๋ชจ๋“ˆํ˜• ๋ชจ๋†€๋ฆฌ์Šค(Modular Monolith)๋ฅผ ์ฑ„ํƒํ•˜๋Š” ๊ฒƒ์ด ํ™•์žฅ์„ฑ์„ ์—ด์–ด๋‘๋ฉด์„œ ์šด์˜ ๋ณต์žก๋„๋ฅผ ๋‚ฎ์ถ”๋Š” ํ›Œ๋ฅญํ•œ ๋Œ€์•ˆ์ด ๋ฉ๋‹ˆ๋‹ค [43, 44]. * **์•„ํ‚คํ…์ฒ˜ ๋ถ€์‹(Erosion):** ์ดˆ๊ธฐ ์„ค๊ณ„์™€ ์‹ค์ œ ๊ตฌํ˜„ ์ฝ”๋“œ ์‚ฌ์ด์— ๊ดด๋ฆฌ๊ฐ€ ์ƒ๊ธฐ๋ฉฐ ๊ธฐ์ˆ  ๋ถ€์ฑ„๊ฐ€ ๋ˆ„์ ๋˜๋Š” ์•„ํ‚คํ…์ฒ˜ ๋ถ€์‹ ํ˜„์ƒ์ด ์ผ์–ด๋‚  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์ง€์†์ ์ธ ์ปดํ”Œ๋ผ์ด์–ธ์Šค ์ฒดํฌ์™€ ์—„๊ฒฉํ•œ ADR ๊ด€๋ฆฌ๊ฐ€ ์š”๊ตฌ๋ฉ๋‹ˆ๋‹ค [45]. ## ๐Ÿ”— Knowledge Connections ### Related Concepts #### [์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ์‚ฌ์ƒ ๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„] - [[๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜ (Microservices Architecture)]] - ์—ฐ๊ฒฐ ์ด์œ : ํ˜„๋Œ€ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ํ™•์žฅ์„ฑ๊ณผ ์• ์ž์ผํ•œ ์กฐ์ง ๊ตฌ์กฐ๋ฅผ ์ง€์›ํ•˜๋Š” ํ•ต์‹ฌ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์ž…๋‹ˆ๋‹ค [46, 47]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋…๋ฆฝ์ ์ธ ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์„ฑ, ๋„๋ฉ”์ธ ๋ถ„๋ฆฌ, ์„œ๋น„์Šค ๊ฐ„ ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง• ๊ธฐ๋ฐ˜ ํ˜‘์—…, ๊ทธ๋ฆฌ๊ณ  ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์„€์‹œ ๋ฐ API ๊ฒŒ์ดํŠธ์›จ์ด ๋“ฑ์˜ ๋ถ„์‚ฐ ์ปดํฌ๋„ŒํŠธ ์ „๋žต. - [[์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜ (Event-Driven Architecture)]] - ์—ฐ๊ฒฐ ์ด์œ : ์‹œ์Šคํ…œ์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๊ทนํ•œ์œผ๋กœ ๋‚ฎ์ถ”๊ณ  ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆฌ๋ฐ๊ณผ ๋†’์€ ๋™์‹œ์„ฑ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํ™œ์šฉ๋˜๋Š” ์•„ํ‚คํ…์ฒ˜์ž…๋‹ˆ๋‹ค [28, 48]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ธŒ๋กœ์ปค(Choreography) ๋ฐฉ์‹๊ณผ ๋ฉ”๋””์—์ดํ„ฐ(Orchestration) ๋ฐฉ์‹์˜ ํ†ต์ œ ์ˆ˜์ค€ ์ฐจ์ด, ํ(Queues)์™€ ์ŠคํŠธ๋ฆผ(Streams)์„ ํ™œ์šฉํ•œ ์ด๋ฒคํŠธ ๊ด€๋ฆฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜๊ณผ ์ƒํƒœ ํšŒ๋ณต. - [[ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜ (Hexagonal Architecture / Ports and Adapters)]] - ์—ฐ๊ฒฐ ์ด์œ : ๋น„์ฆˆ๋‹ˆ์Šค ํ•ต์‹ฌ ๋กœ์ง์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๊ฐ™์€ ๊ธฐ์ˆ ์  ์„ธ๋ถ€์‚ฌํ•ญ์œผ๋กœ๋ถ€ํ„ฐ ์™„๋ฒฝํžˆ ๋ณดํ˜ธํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜ ์ง€์นจ์ž…๋‹ˆ๋‹ค [32, 49]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํฌํŠธ(Port)์™€ ์–ด๋Œ‘ํ„ฐ(Adapter)๋ฅผ ์ด์šฉํ•œ ์˜์กด์„ฑ ์—ญ์ „ ์›์น™, ๋›ฐ์–ด๋‚œ ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ, ๊ทธ๋ฆฌ๊ณ  ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜ ๋ฐ ์–ด๋‹ˆ์–ธ ์•„ํ‚คํ…์ฒ˜์™€์˜ ๊ตฌ์กฐ์  ์ƒํ˜ธ์ž‘์šฉ. #### [์•„ํ‚คํ…์ฒ˜ ์˜์‚ฌ๊ฒฐ์ • ๋ฐ ๊ฒ€์ฆ ๋„๊ตฌ] - [[ATAM (Architecture Tradeoff Analysis Method)]] - ์—ฐ๊ฒฐ ์ด์œ : ์•„ํ‚คํ…์ฒ˜๊ฐ€ ํ’ˆ์งˆ ์š”๊ตฌ์‚ฌํ•ญ์— ์–ผ๋งˆ๋‚˜ ์ž˜ ๋ถ€ํ•ฉํ•˜๋Š”์ง€ ํ‰๊ฐ€ํ•˜๊ณ  ํŠธ๋ ˆ์ด๋“œ์˜คํ”„๋ฅผ ์ฒด๊ณ„ํ™”ํ•˜๋Š” ํ‰๊ฐ€ ๋ฐฉ๋ฒ•๋ก ์ž…๋‹ˆ๋‹ค [13, 14]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์‹œ์Šคํ…œ์˜ ๋ฏผ๊ฐ๋„์™€ ์ž ์žฌ์  ๋ฆฌ์Šคํฌ๋ฅผ ์‹œ๋‚˜๋ฆฌ์˜ค ๊ธฐ๋ฐ˜์œผ๋กœ ๋„์ถœํ•˜์—ฌ, ์•„ํ‚คํ…์ฒ˜ ๊ฒฐ์ •์ด ์กฐ์ง์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋ชฉํ‘œ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ๊ฐ๊ด€ํ™”ํ•˜๋Š” ์ ˆ์ฐจ. - [[ADR (Architecture Decision Records)]] - ์—ฐ๊ฒฐ ์ด์œ : ์•„ํ‚คํ…์ฒ˜ ๊ฒฐ์ • ์‚ฌํ•ญ์„ ๋ฌธ์„œํ™”ํ•˜์—ฌ ์‹œ์Šคํ…œ ๊ตฌ์กฐ์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ๋งฅ๋ฝ ๋ณด์กด์„ ์ง€์›ํ•˜๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค [16, 17]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์˜์‚ฌ๊ฒฐ์ • ๋‹น์‹œ์˜ ๊ธฐ์ˆ ์ ยท๋น„์ฆˆ๋‹ˆ์Šค์  ๋ฐฐ๊ฒฝ, ๊ฑฐ์ ˆ๋œ ๋Œ€์•ˆ ๋ฐ ์˜ˆ์ƒ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋กํ•จ์œผ๋กœ์จ, ์กฐ์ง์˜ ๊ตฌ์กฐ ๋ณ€๊ฒฝ์ด๋‚˜ ์ธ๋ ฅ ๊ต์ฒด ์‹œ์—๋„ '์„ค๊ณ„ ์˜๋„'๊ฐ€ ๋ณ€์งˆ๋˜๋Š” ์•„ํ‚คํ…์ฒ˜ ๋ถ€์‹(Erosion)์„ ๋ฐฉ์ง€ํ•˜๋Š” ์›๋ฆฌ. ### Deeper Research Questions - ๋ถ„์‚ฐ ์•„ํ‚คํ…์ฒ˜(๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค) ํ™˜๊ฒฝ์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๊ฐœ๋ณ„ ๋ถ„๋ฆฌ๋จ์— ๋”ฐ๋ผ ๋ฐœ์ƒํ•˜๋Š” ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜ ๋ฐ ์ตœ์ข… ์ผ๊ด€์„ฑ(Eventual Consistency) ๋ฌธ์ œ๋ฅผ Saga ํŒจํ„ด๊ณผ CQRS๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์–ด๋–ป๊ฒŒ ํšจ๊ณผ์ ์œผ๋กœ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? [28, 36] - ์ฝ˜์›จ์ด์˜ ๋ฒ•์น™(Conway's Law)์ด ์กฐ์ง ๊ตฌ์กฐ(ํŒ€ ํฌ๊ธฐ, ๋ฐ๋ธŒ์˜ต์Šค ์ˆ™๋ จ๋„)์™€ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด ๊ฒฐ์ •์— ์–ด๋– ํ•œ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฉฐ, ์„ฑ๊ณต์ ์ธ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์ด์ „์„ ์œ„ํ•ด ์„ ํ–‰๋˜์–ด์•ผ ํ•  ์กฐ์ง์  ๋ณ€ํ™”๋Š” ๋ฌด์—‡์ธ๊ฐ€? [42, 50] - ๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์‹œ์Šคํ…œ์—์„œ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜์˜ ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆฌ๋ฐ(์˜ˆ: Kafka)๊ณผ ๊ณต๊ฐ„ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜(Space-Based)์˜ ์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ ๊ทธ๋ฆฌ๋“œ(IMDG) ๋ฐฉ์‹์„ ๋ณ‘ํ•ฉ(Hybrid)ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๋Š” ์ „๋žต๊ณผ ๊ทธ ํ•œ๊ณ„๋Š” ๋ฌด์—‡์ธ๊ฐ€? [34, 51, 52] - ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜ ๋˜๋Š” ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜์˜ ์˜์กด์„ฑ ๊ทœ์น™์ด ์ดˆ๊ธฐ ๊ฐœ๋ฐœ ๋น„์šฉ์„ ์ƒ์Šน์‹œํ‚ด์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์žฅ๊ธฐ ์œ ์ง€๋ณด์ˆ˜ ๋ฐ ๋ณด์•ˆ ๊ฒฝ๊ณ„(Security Boundaries) ํ˜•์„ฑ์—์„œ ์–ป๋Š” ํŠธ๋ ˆ์ด๋“œ์˜คํ”„์˜ ๊ฒฝ์ œ์  ๊ฐ€์น˜๋Š” ์–ด๋–ป๊ฒŒ ์ฆ๋ช…ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? [32, 53, 54] - ๋นˆ๋ฒˆํžˆ ๋ณ€๋™ํ•˜๋Š” ๋ถ€ํ•˜(Burst Workload)๋ฅผ ๊ฐ€์ง„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•ด, ์ฝœ๋“œ ์Šคํƒ€ํŠธ๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•œ ์„œ๋ฒ„๋ฆฌ์Šค(Serverless)์™€ ๋ชจ๋“ˆํ˜• ๋ชจ๋†€๋ฆฌ์Šค(Modular Monolith)๋ฅผ ํ˜ผํ•ฉ ์ ์šฉํ•˜๋Š” ์ „๋žต์  ๋ถ„๊ธฐ์ (Tipping Point)์€ ์–ด๋””์ธ๊ฐ€? [55-60] ### Practical Application Contexts - **Implementation:** ๋น„์ฆˆ๋‹ˆ์Šค ํ•ต์‹ฌ ๋กœ์ง๊ณผ ์ธํ”„๋ผ์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ๋ฒ ์ด์Šค ๊ตฌํ˜„ ์‹œ ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜์˜ ํฌํŠธ(์ธํ„ฐํŽ˜์ด์Šค)์™€ ์–ด๋Œ‘ํ„ฐ๋ฅผ ์ ์šฉํ•˜์—ฌ ๋…๋ฆฝ์ ์ธ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ฒŒ ์„ค๊ณ„ํ•จ [49, 61, 62]. - **System Design:** C4 ๋ชจ๋ธ ๋“ฑ ๊ฐ€๋ฒผ์šด ๋‹ค์ด์–ด๊ทธ๋žจ ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ๊ฐ ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ๊ด€๊ณ„์™€ ์ œ์•ฝ์‚ฌํ•ญ์„ ์‹œ๊ฐํ™”ํ•˜๊ณ , ATAM์„ ํ†ตํ•ด ๊ทน๋‹จ์ ์ธ ๋กœ๋“œ(์˜ˆ: 10๋ถ„ ๋‚ด ์‚ฌ์šฉ์ž ๋‘ ๋ฐฐ ์ฆ๊ฐ€) ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋Œ€ํ•œ ์‹œ์Šคํ…œ ๋ณ‘๋ชฉ์„ ํ‰๊ฐ€ ํ›„ ์ ์ ˆํ•œ ๋ถ„์‚ฐ ํŒจํ„ด์„ ์ ์šฉ [13, 14, 63]. - **Operation / Maintenance:** ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค(Circuit Breaker) ํŒจํ„ด์„ ๋„์ž…ํ•ด ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํ†ต์‹  ์ค‘ ๋ฐœ์ƒํ•˜๋Š” ์—ฐ์‡„ ์žฅ์• ๋ฅผ ๊ฒฉ๋ฆฌํ•˜๊ณ , ADR์„ ์œ„ํ‚ค์— ๋ณด๊ด€ํ•ด ์ƒˆ๋กญ๊ฒŒ ํ•ฉ๋ฅ˜ํ•œ ๋ฐ๋ธŒ์˜ต์Šค ํŒ€์›๋“ค์˜ ์˜จ๋ณด๋”ฉ ์†๋„๋ฅผ ๋†’์ž„ [16, 37, 64]. - **Learning Path:** ๋‹จ์ˆœํ•œ ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜(N-Tier)๋กœ ์‹œ์ž‘ํ•˜์—ฌ ์‹œ์Šคํ…œ ์„ค๊ณ„์˜ ๊ธฐ์ดˆ์™€ ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ๋ฅผ ๋ฐฐ์šด ๋’ค, ์ ์ง„์ ์œผ๋กœ ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„(DDD)์™€ ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง€ ํŒจ์‹ฑ(EDA), ์ตœ์ข…์ ์œผ๋กœ ๋ถ„์‚ฐ ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ ํŒจํ„ด(MSA, Serverless) ์ˆœ์œผ๋กœ ํ™•์žฅ ํ•™์Šต [44, 65]. - **My Project Relevance:** ๊ธฐํ•œ๊ณผ ์ž์›์ด ํ•œ์ •๋œ ์ดˆ๊ธฐ ์Šคํƒ€ํŠธ์—… MVP ํ”„๋กœ์ ํŠธ์— ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ๋ฌด๋ฆฌํ•˜๊ฒŒ ๋„์ž…ํ•˜๊ธฐ๋ณด๋‹ค, ์šฐ์„  ๋ชจ๋“ˆํ˜• ๋ชจ๋†€๋ฆฌ์Šค ํ˜น์€ ๋‹จ์ผ ์„œ๋ฒ„๋ฆฌ์Šค ๊ธฐ๋Šฅ์œผ๋กœ ๋น ๋ฅด๊ฒŒ ์‹œ์žฅ ๊ฒ€์ฆ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ํ–ฅํ›„ ํ™•์žฅ์„ ๋Œ€๋น„ํ•œ ๋ชจ๋“ˆ ๋ถ„๋ฆฌ(Clean Architecture ์ ์šฉ)๋ฅผ ์ˆ˜ํ–‰ํ•จ [66, 67]. ### Adjacent Topics - [[๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„ (Domain-Driven Design, DDD)]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํŒจํ„ด์—์„œ ๊ฐ ์„œ๋น„์Šค๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ์ฑ…์ž„์„ ๊ฒฉ๋ฆฌํ•˜๋Š” ๋…ผ๋ฆฌ์  ๊ฒฝ๊ณ„(Bounded Context)๋ฅผ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋ชจ๋ธ๋ง ๊ธฐ๋ฒ•์˜ ์—ฐ๊ณ„ ํƒ๊ตฌ [26]. - [[์†Œํ”„ํŠธ์›จ์–ด ๋””์ž์ธ ํŒจํ„ด (Software Design Patterns)]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ „์ฒด ์•„ํ‚คํ…์ฒ˜ ์ˆ˜์ค€์ด ์•„๋‹ˆ๋ผ ๊ฐ ๊ณ„์ธต์ด๋‚˜ ๋ชจ๋“ˆ ๋‚ด๋ถ€์—์„œ ๋ฐ˜๋ณต๋˜๋Š” ์ฝ”๋”ฉ ์ˆ˜์ค€์˜ ๊ตฌํ˜„ ๋ฌธ์ œ(๊ฐ์ฒด ์ƒ์„ฑ, ๊ตฌ์กฐ, ํ–‰์œ„)๋ฅผ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ•˜๋Š” ์›๋ฆฌ ์ดํ•ด [8]. --- *Last updated: 2026-05-02*