--- id: P-REINFORCE-AUTO-WIKI-ARC-002 category: "10_Wiki/๐Ÿ’ก Topics/02_Architecture_Principles" confidence_score: 0.95 tags: [architecture, dependency-management, dependency-injection, di, dependency-inversion-principle, dip, decoupling, p-reinforce] last_reinforced: 2026-05-01 --- # [[Dependency Management (DI & DIP)|Dependency Management (DI & DIP]] ## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) > "๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„์ด ์•„๋‹Œ ์ถ”์ƒํ™”์— ์˜์กดํ•˜๊ฒŒ ํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ , ์ฝ”๋“œ ์ˆ˜์ • ์—†์ด ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๊ฑฐ๋‚˜ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์—ฐํ•œ ์‹œ์Šคํ…œ ๊ตฌ์กฐ์˜ ํ•ต์‹ฌ ๊ธฐ๋ฒ•." ## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) ์˜์กด์„ฑ ๊ด€๋ฆฌ๋Š” ์†Œํ”„ํŠธ์›จ์–ด์˜ ๋ชจ๋“ˆ์„ฑ๊ณผ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ์„ฑ์„ ๊ฒฐ์ •์ง“๋Š” ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์„ค๊ณ„ ์š”์†Œ์ž…๋‹ˆ๋‹ค. 1. **[[แ„‹แ…ดแ„Œแ…ฉแ†ซแ„‰แ…ฅแ†ผ แ„‹แ…งแ†จแ„Œแ…ฅแ†ซ แ„‹แ…ฏแ†ซแ„Žแ…ตแ†จ (Dependency Inversion Principle DIP)|Dependency Inversion Principle (DIP]]**: * **๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์˜ ๋ณดํ˜ธ**: ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ(๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง)์€ ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ(๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ์™ธ๋ถ€ API)์˜ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค ์ถ”์ƒํ™”(์ธํ„ฐํŽ˜์ด์Šค)์— ์˜์กดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. * **์˜์กด์„ฑ ๋ฐฉํ–ฅ์˜ ์—ญ์ „**: ์ „ํ†ต์ ์ธ ๊ณ„์ธต ๊ตฌ์กฐ์—์„œ์˜ ์˜์กด์„ฑ ๋ฐฉํ–ฅ์„ ๋’ค์ง‘์–ด, ๊ตฌํ˜„์ฒด๊ฐ€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋”ฐ๋ฅด๊ฒŒ ํ•จ์œผ๋กœ์จ ํ•ต์‹ฌ ๋กœ์ง์„ ์™ธ๋ถ€ ๋ณ€ํ™”๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•ฉ๋‹ˆ๋‹ค. 2. **[[Dependency Injection (DI)|Dependency Injection (DI]]**: * **๊ฐ์ฒด ์ƒ์„ฑ์ด ์•„๋‹Œ ์ฃผ์ž…**: ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ์˜์กด ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ƒ์„ฑ(New)ํ•˜์ง€ ์•Š๊ณ , ์™ธ๋ถ€(์ƒ์„ฑ์ž, ๋ฉ”์„œ๋“œ ๋“ฑ)์—์„œ ์ฃผ์ž…๋ฐ›์Šต๋‹ˆ๋‹ค. * **์œ ์—ฐํ•œ ๊ต์ฒด**: ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์ข…์†์„ฑ์„ ์ฃผ์ž…๋ฐ›์œผ๋ฏ€๋กœ, ์‹ค์ œ ๊ตฌํ˜„์ฒด๋ฅผ ํ™˜๊ฒฝ(Staging, Production)์ด๋‚˜ ํ…Œ์ŠคํŠธ ๋ชฉ์ (Mocking)์— ๋”ฐ๋ผ ์‰ฝ๊ฒŒ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 3. **์ฝ”๋“œ ๋ฆฌ๋ทฐ์—์„œ์˜ ์—ญํ• **: * ๋ฆฌ๋ทฐ์–ด๋Š” ์ฝ”๋“œ๊ฐ€ ํ•˜๋“œ์ฝ”๋”ฉ๋œ ์ข…์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€, ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๊ฒฐํ•ฉ๋„๊ฐ€ ์ ์ ˆํžˆ ๋ถ„๋ฆฌ(Decoupled)๋˜์—ˆ๋Š”์ง€ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) - **์ถ”์ƒํ™”์˜ ๋น„์šฉ**: ๋ชจ๋“  ๊ด€๊ณ„์— DI/DIP๋ฅผ ์ ์šฉํ•˜๋ฉด ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง€๊ณ  ์ถ”์ ํ•˜๊ธฐ ์–ด๋ ค์›Œ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. '๊ณผ์ž‰ ์—”์ง€๋‹ˆ์–ด๋ง(Over-engineering)'์„ ๊ฒฝ๊ณ„ํ•˜๋ฉฐ, ๋ณ€ํ™”๊ฐ€ ์žฆ๊ฑฐ๋‚˜ ํ…Œ์ŠคํŠธ๊ฐ€ ํ•„์ˆ˜์ ์ธ ์˜์—ญ์„ ์ค‘์‹ฌ์œผ๋กœ ์ ์šฉํ•˜๋Š” ์‹ค์šฉ์„ฑ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. - **์˜์กด์„ฑ ๊ทธ๋ž˜ํ”„์˜ ๋ณต์žก์„ฑ**: ์ฃผ์ž…๋˜๋Š” ๊ฐ์ฒด๊ฐ€ ๋งŽ์•„์ง€๋ฉด ๊ฐ์ฒด ์ƒ์„ฑ ๋กœ์ง์ด๋‚˜ DI ์ปจํ…Œ์ด๋„ˆ ์„ค์ •์ด ๋ณต์žกํ•ด์ง‘๋‹ˆ๋‹ค. ์ƒ์„ฑ์ž ์ฃผ์ž…(Constructor Injection)์„ ๊ถŒ์žฅํ•˜๊ณ  ํด๋ž˜์Šค์˜ ์ฑ…์ž„์„ ์ž‘๊ฒŒ ์œ ์ง€ํ•˜์—ฌ ์ฃผ์ž…๋˜๋Š” ์˜์กด์„ฑ ์ˆ˜๋ฅผ ์ œํ•œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) - [[SOLID Principles|SOLID Principles]]: DIP๊ฐ€ ํฌํ•จ๋œ ์„ค๊ณ„ ์›์น™ ๊ทธ๋ฃน. - [[Clean Architecture & Patterns|Clean Architecture & Patterns]]: DIP๋ฅผ ํ†ตํ•ด ๋„๋ฉ”์ธ ๋กœ์ง์„ ๋ณดํ˜ธํ•˜๋Š” ์ƒ์œ„ ์•„ํ‚คํ…์ฒ˜. - [[Testing Strategy|Testing Strategy]]: DI๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ. - [[Single Responsibility Principle (SRP)|Single Responsibility Principle (SRP]]: ์˜์กด์„ฑ์ด ๋งŽ์•„์ง€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๊ทผ๊ฑฐ. - Over-engineering: ๋ฌด๋ถ„๋ณ„ํ•œ ์ถ”์ƒํ™”์˜ ์œ„ํ—˜. ---