--- category: Unified tags: [auto-consolidated, technical-documentation] title: [[Dependency Injection (DI)|Dependency Injection (DI]] last_updated: 2026-05-02 --- # [[Dependency Injection (DI)|Dependency Injection (DI]] ## ๐Ÿ“Œ Brief Summary > "ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ์ง์ ‘ ์˜์กด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ์™ธ๋ถ€์—์„œ ์ฃผ์ž…๋ฐ›์Œ์œผ๋กœ์จ, ๊ฐ์ฒด ๊ฐ„์˜ ๊ฒฐํ•ฉ์„ ๋Š์–ด๋‚ด๊ณ  ํ…Œ์ŠคํŠธ์™€ ํ™•์žฅ์ด ์šฉ์ดํ•œ '์œ ์—ฐํ•œ ๋ถ€ํ’ˆ'์œผ๋กœ ๋งŒ๋“œ๋Š” ์ œ์–ด ์—ญ์ „(IoC)์˜ ์‹ค์ฒœ์  ๊ธฐ๋ฒ•." --- ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection, DI)์€ ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ(SoC)์™€ ์˜์กด์„ฑ ์—ญ์ „ ์›์น™(DIP)์„ ๊ตฌํ˜„ํ•˜์—ฌ ์†Œํ”„ํŠธ์›จ์–ด ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ๊ฒฐํ•ฉ์„ ๋А์Šจํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ์„ค๊ณ„ ๊ธฐ๋ฒ•์ด๋‹ค [1, 2]. ์ƒ์œ„ ๊ณ„์ธต์ด๋‚˜ ๋ชจ๋“ˆ์ด ํ•˜์œ„ ์˜์กด์„ฑ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜๋Š” ๋Œ€์‹  ์™ธ๋ถ€ ์†Œ์Šค๋กœ๋ถ€ํ„ฐ ์˜์กด์„ฑ์„ "์ฃผ์ž…"๋ฐ›๋„๋ก ๊ตฌ์„ฑํ•œ๋‹ค [3]. ์ด๋ฅผ ํ†ตํ•ด ์ฝ”์–ด ๋กœ์ง์˜ ๋ณ€๊ฒฝ ์—†์ด ๊ตฌํ˜„์ฒด๋ฅผ ์‰ฝ๊ฒŒ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์–ด, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ(Testability)๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ(Maintainability)์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค [1, 3]. ## ๐Ÿ“– Core Content DI๋Š” ํ˜„๋Œ€ ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜์—์„œ ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๋Š” ํ•ต์‹ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. 1. **์ œ์–ด์˜ ์—ญ์ „ (IoC)**: * ๊ฐ์ฒด๊ฐ€ ์Šค์Šค๋กœ ์˜์กด์„ฑ์„ ์ƒ์„ฑ(new)ํ•˜๋Š” ๊ถŒํ•œ์„ ํฌ๊ธฐํ•˜๊ณ , ์™ธ๋ถ€(์ปจํ…Œ์ด๋„ˆ)๋กœ๋ถ€ํ„ฐ ์ฃผ์ž…๋ฐ›์Šต๋‹ˆ๋‹ค. * ์ด๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„์ฒด(Concrete Implementation)๊ฐ€ ์•„๋‹Œ ์ถ”์ƒํ™”(Interface/Abstract Class)์— ์˜์กดํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 2. **์ƒ๋ช…์ฃผ๊ธฐ(Lifetime) ๊ด€๋ฆฌ**: * ์ฃผ์ž…๋˜๋Š” ๊ฐ์ฒด์˜ ์ƒ์กด ๋ฒ”์œ„(Transient, Scoped, Singleton)๋ฅผ ์ค‘์•™์—์„œ ํ†ต์ œํ•ฉ๋‹ˆ๋‹ค. * ์ž˜๋ชป๋œ ์ƒ๋ช…์ฃผ๊ธฐ ์„ค์ •์€ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋‚˜ ์˜๋„์น˜ ์•Š์€ ์ƒํƒœ ๊ณต์œ ๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฝ”๋“œ ๋ฆฌ๋ทฐ์˜ ํ•„์ˆ˜ ์ฒดํฌ ํ•ญ๋ชฉ์ž…๋‹ˆ๋‹ค. 3. **ํ”„๋ ˆ์ž„์›Œํฌ๋ณ„ ๊ด€๋ก€**: * Spring(Java)์—์„œ๋Š” ์ƒ์„ฑ์ž ์ฃผ์ž…(Constructor Injection)์„ ๊ถŒ์žฅํ•˜๋ฉฐ, .NET์—์„œ๋Š” ๋นŒํŠธ์ธ DI ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ†ตํ•œ ์ธํ„ฐํŽ˜์ด์Šค ๋ฐ”์ธ๋”ฉ์„ ๊ธฐ๋ณธ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. --- - **๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ ๋ฐ ๊ฒฐํ•ฉ๋„ ์™„ํ™”:** DI๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์ปดํฌ๋„ŒํŠธ๋“ค์ด ๋ถ„๋ฆฌ(decouple)๋˜์–ด ์ข…์†์„ฑ ๊ด€๋ฆฌ๊ฐ€ ์‰ฌ์›Œ์ง€๋ฉฐ, ํ•ต์‹ฌ ๋กœ์ง์„ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ ๋„ ๊ตฌํ˜„์ฒด๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์–ด ์‹œ์Šคํ…œ์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ์ด ํฌ๊ฒŒ ๊ฐœ์„ ๋œ๋‹ค [1]. - **์˜์กด์„ฑ ์—ญ์ „ ์›์น™(DIP)์˜ ๊ตฌํ˜„ ์ˆ˜๋‹จ:** ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ๊ณผ ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์ด ์„œ๋กœ ์ง์ ‘ ์˜์กดํ•˜์ง€ ์•Š๊ณ  ๋ชจ๋‘ ์ถ”์ƒํ™”์— ์˜์กดํ•ด์•ผ ํ•œ๋‹ค๋Š” SOLID ์›์น™ ์ค‘ ํ•˜๋‚˜์ธ DIP๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ DI๊ฐ€ ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค [2]. - **ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํ†ตํ•œ ์ž๋™ํ™”:** Spring(Java)์ด๋‚˜ ASP.NET Core์™€ ๊ฐ™์ด ๋‚ด์žฅ๋œ DI ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ œ๊ณตํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ์˜์กด์„ฑ ์—ญ์ „ ์›์น™์„ ํ›จ์”ฌ ์‰ฝ๊ฒŒ ์ ์šฉํ•˜๊ณ  ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค [4]. - **๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜(Layered Architecture)์—์„œ์˜ ์—ญํ• :** ์ƒ์œ„ ๊ณ„์ธต์ด ํ•˜์œ„ ๊ณ„์ธต์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ์™ธ๋ถ€์—์„œ ์˜์กด์„ฑ์„ ์ฃผ์ž…๋ฐ›๊ฒŒ ํ•จ์œผ๋กœ์จ, ๊ณ„์ธต ๊ฐ„์˜ ๋А์Šจํ•œ ๊ฒฐํ•ฉ(Loose coupling)์„ ์ด‰์ง„ํ•œ๋‹ค [3]. - **ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜(Clean Architecture)์—์„œ์˜ ์ ์šฉ:** ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์—์„œ ๋‚ด๋ถ€ ๊ณ„์ธต์— ์ •์˜๋œ ์ธํ„ฐํŽ˜์ด์Šค(ํฌํŠธ)์™€ ์™ธ๋ถ€ ๊ณ„์ธต์—์„œ ์ œ๊ณต๋˜๋Š” ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„์ฒด(์–ด๋Œ‘ํ„ฐ)๋ฅผ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด DI๊ฐ€ ํ•„์ˆ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์ฝ”์–ด ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ํŠน์ • ๋„๊ตฌ๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ์›น ํ”„๋ ˆ์ž„์›Œํฌ ๋“ฑ์œผ๋กœ๋ถ€ํ„ฐ ๋ถ„๋ฆฌ๋œ ์ƒํƒœ๋กœ ์œ ์ง€ํ•œ๋‹ค [5]. ## โš–๏ธ Trade-offs & Caveats - **์ƒ๋ช…์ฃผ๊ธฐ ์˜ค์šฉ ๋ฆฌ์Šคํฌ**: Scoped ๊ฐ์ฒด๊ฐ€ Singleton ๊ฐ์ฒด์— ์ฃผ์ž…๋˜๋Š” ๋“ฑ ์ƒ๋ช…์ฃผ๊ธฐ ๋ถˆ์ผ์น˜๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ, ๋ฐ์ดํ„ฐ๊ฐ€ ์˜๋„๋ณด๋‹ค ์˜ค๋ž˜ ์œ ์ง€๋˜๊ฑฐ๋‚˜ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - **์ฝ”๋“œ ์ถ”์ ์„ฑ ์ €ํ•˜**: ์ •์  ์ฝ”๋“œ๋งŒ์œผ๋กœ๋Š” ์–ด๋–ค ๊ตฌํ˜„์ฒด๊ฐ€ ์ฃผ์ž…๋ ์ง€ ์ฆ‰๊ฐ ํ™•์ธํ•˜๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ช…ํ™•ํ•œ ๋„ค์ด๋ฐ ์ปจ๋ฒค์…˜๊ณผ DI ๋ฐ”์ธ๋”ฉ ๋กœ๊ทธ์˜ ๊ฐ€์‹œ์„ฑ ํ™•๋ณด๊ฐ€ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. --- ์†Œ์Šค์— ๊ด€๋ จ ์ •๋ณด๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค. (์ œ๊ณต๋œ ์†Œ์Šค์—์„œ๋Š” ์˜์กด์„ฑ ์ฃผ์ž…์ด ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ ํ™•๋ณด, ์œ ์ง€๋ณด์ˆ˜์„ฑ ๊ฐ•ํ™”, ๊ฒฐํ•ฉ๋„ ์™„ํ™” ๋“ฑ์˜ ๊ธ์ •์  ์ธก๋ฉด๋งŒ์„ ๊ฐ•์กฐํ•˜๊ณ  ์žˆ์œผ๋ฉฐ [1-3, 5], DI ํ”„๋ ˆ์ž„์›Œํฌ ์‚ฌ์šฉ์— ๋”ฐ๋ฅธ ์‹œ์Šคํ…œ ๋ณต์žก๋„ ์ฆ๊ฐ€๋‚˜ ์„ค์ •์˜ ์˜ค๋ฒ„ํ—ค๋“œ์™€ ๊ฐ™์€ ๋ถ€์ž‘์šฉ, ์ œ์•ฝ ์‚ฌํ•ญ ๋˜๋Š” ๋ฐ˜๋Œ€ ๊ธ‰๋ถ€(Trade-off)์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ ๋ช…์‹œ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.) ## ๐Ÿ”— Knowledge Connections - [[SOLID Principles|SOLID Principles]]: ์˜์กด์„ฑ ์—ญ์ „ ์›์น™(DIP)์˜ ์‹คํ˜„ ๋ฐฉ๋ฒ•. - [[Single Responsibility Principle (SRP)|Single Responsibility Principle (SRP]]: ํด๋ž˜์Šค์˜ ์ฑ…์ž„์„ ์ƒ์„ฑ๊ณผ ์‹คํ–‰์œผ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ด€์ . - [[แ„แ…ฆแ„‰แ…ณแ„แ…ณ แ„‹แ…ญแ†ผแ„‹แ…ตแ„‰แ…ฅแ†ผ (Testability)|Testability]]: Mock ๊ฐ์ฒด ์ฃผ์ž…์„ ํ†ตํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ ํ™•๋ณด. - Constructor Injection: ๊ฐ€์žฅ ๊ถŒ์žฅ๋˜๋Š” DI ํŒจํ„ด. - Dependency Lifetimes: Transient, Scoped, Singleton์˜ ์ดํ•ด. --- --- ### Related Concepts #### [์„ค๊ณ„ ์›์น™ (Design Principles)] - [[์˜์กด์„ฑ ์—ญ์ „ ์›์น™ (Dependency Inversion Principle, DIP)]] - ์—ฐ๊ฒฐ ์ด์œ : ์˜์กด์„ฑ ์ฃผ์ž…์€ ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ๊ณผ ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์ด ์ถ”์ƒํ™”์— ์˜์กดํ•ด์•ผ ํ•œ๋‹ค๋Š” DIP ์›์น™์„ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„ ์ˆ˜๋‹จ์ด๋‹ค [2]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ์ƒํ•˜์œ„ ๋ชจ๋“ˆ ๊ฐ„์˜ ๊ฒฐํ•ฉ ๋ฐฉํ–ฅ์ด ์–ด๋–ป๊ฒŒ ์—ญ์ „๋˜์–ด ๋ณ€๊ฒฝ์— ์œ ์—ฐํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค [2]. - [[๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ (Separation of Concerns, SoC)]] - ์—ฐ๊ฒฐ ์ด์œ : DI ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํ†ตํ•ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๋ถ„๋ฆฌ(decouple)ํ•จ์œผ๋กœ์จ ์‹œ์Šคํ…œ์˜ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๋ชฉ์ ์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค [1]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ฝ”๋“œ๊ฐ€ ํŠน์ • ์ž‘์—…๋“ค์— ์–ด๋–ป๊ฒŒ ์ฑ…์ž„์ด ๋ถ„์‚ฐ๋˜์–ด ์žˆ์–ด ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋ฐ ๋…๋ฆฝ์ ์ธ ์œ ์ง€๊ฐ€ ๊ฐ€๋Šฅํ•œ์ง€ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค [1, 6]. #### [์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด ๋ฐ ๋„๊ตฌ (Architecture Patterns & Tools)] - [[๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜ (Layered Architecture)]] - ์—ฐ๊ฒฐ ์ด์œ : ๊ฐ ๊ณ„์ธต ๊ฐ„์˜ ํ†ต์‹ ๊ณผ ๊ฒฐํ•ฉ์„ ๋А์Šจํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์™ธ๋ถ€์—์„œ ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ์‹์ด ํ•ต์‹ฌ์ ์œผ๋กœ ์ ์šฉ๋œ๋‹ค [3]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํ”„๋ ˆ์  ํ…Œ์ด์…˜, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง, ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๊ณ„์ธต ๊ฐ„์˜ ์˜์กด์„ฑ์ด ์ฝ”๋“œ๋กœ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌ๋˜๋Š”์ง€ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๋‹ค [3, 7]. - [[ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜ (Clean Architecture)]] - ์—ฐ๊ฒฐ ์ด์œ : ์‹œ์Šคํ…œ์˜ ์ฝ”์–ด ๋กœ์ง์„ ๋…๋ฆฝ์ ์œผ๋กœ ์œ ์ง€ํ•˜๋ฉด์„œ ๋Ÿฐํƒ€์ž„์— ์™ธ๋ถ€์˜ ์–ด๋Œ‘ํ„ฐ(๊ตฌํ˜„์ฒด)๋ฅผ ํฌํŠธ(์ธํ„ฐํŽ˜์ด์Šค)์™€ ์—ฐ๊ฒฐํ•  ๋•Œ DI ํŒจํ„ด์„ ์‚ฌ์šฉํ•œ๋‹ค [5]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ณต์žกํ•œ ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™๊ณผ ์™ธ๋ถ€ ํ”„๋ ˆ์ž„์›Œํฌ(DB, UI ๋“ฑ)๋ฅผ ์–ด๋–ป๊ฒŒ ์™„๋ฒฝํ•˜๊ฒŒ ๋ถ„๋ฆฌํ•˜๋Š”์ง€๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค [5, 8]. - [[DI ํ”„๋ ˆ์ž„์›Œํฌ (DI Frameworks)]] - ์—ฐ๊ฒฐ ์ด์œ : Spring ๋˜๋Š” ASP.NET Core์ฒ˜๋Ÿผ ์˜์กด์„ฑ ์ฃผ์ž…์„ ์ž๋™ํ™”ํ•˜๊ณ  DIP๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๋Š” ํ•ต์‹ฌ ๊ธฐ๋ฐ˜ ๋„๊ตฌ์ด๋‹ค [4]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ฝ”๋“œ๋ฒ ์ด์Šค ์ƒ์—์„œ ์˜์กด์„ฑ์ด ์ˆ˜๋™์œผ๋กœ ์ฃผ์ž…๋˜๋Š” ๋Œ€์‹ , ์‹œ์Šคํ…œ ์ดˆ๊ธฐํ™” ์‹œ์ ์— ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ์–ด๋–ป๊ฒŒ ๋™์ ์œผ๋กœ ๋ฐ”์ธ๋”ฉ๋˜๋Š”์ง€ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋‹ค [4]. ### Deeper Research Questions - ์˜์กด์„ฑ ์ฃผ์ž…์„ ํ™œ์šฉํ•  ๋•Œ ์ฝ”์–ด ๋กœ์ง์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ์–ด๋–ป๊ฒŒ ์ƒˆ๋กœ์šด ๊ตฌํ˜„์ฒด๋กœ ์™„์ „ํžˆ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ๋Š”์ง€, ๊ทธ ๊ตฌ์ฒด์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค ์„ค๊ณ„ ๋ฐฉ์‹์€ ๋ฌด์—‡์ธ๊ฐ€? [1] - ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜ ๋‚ด์—์„œ ๋‚ด๋ถ€์˜ ์ธํ„ฐํŽ˜์ด์Šค(ํฌํŠธ)์™€ ์™ธ๋ถ€์˜ ๊ตฌํ˜„(์–ด๋Œ‘ํ„ฐ)์„ ๋Ÿฐํƒ€์ž„ ์‹œ์— ์—ฐ๊ฒฐํ•˜๋Š” ๊ณผ์ •์—์„œ ์˜์กด์„ฑ ์ฃผ์ž… ์ปจํ…Œ์ด๋„ˆ๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”๊ฐ€? [5] - ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜์—์„œ ์ƒ์œ„ ๊ณ„์ธต์ด ํ•˜์œ„ ๊ณ„์ธต์„ ์ง์ ‘ ์ƒ์„ฑํ•˜๋Š” ๋Œ€์‹  ์˜์กด์„ฑ์„ ์ฃผ์ž…๋ฐ›์„ ๋•Œ ์–ป๊ฒŒ ๋˜๋Š” '๋А์Šจํ•œ ๊ฒฐํ•ฉ(Loose coupling)'์ด ์ฝ”๋“œ ๋ณ€๊ฒฝ ๋ฐ ํ™•์žฅ์— ๋ฏธ์น˜๋Š” ๊ตฌ์ฒด์ ์ธ ์˜ํ–ฅ์€ ๋ฌด์—‡์ธ๊ฐ€? [3] - ์˜์กด์„ฑ ์ฃผ์ž…์„ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹๊ณผ Spring, ASP.NET Core์™€ ๊ฐ™์€ DI ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ์‹์˜ ๊ตฌ์กฐ์  ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€? [4] - ์˜์กด์„ฑ์ด ์™ธ๋ถ€์—์„œ ์ฃผ์ž…๋˜๋Š” ๊ตฌ์กฐ๊ฐ€ ๊ฐœ๋ณ„ ๋ชจ๋“ˆ์ด๋‚˜ ํด๋ž˜์Šค์˜ ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ(Testability)์„ ๋น„์•ฝ์ ์œผ๋กœ ๋†’์ด๋Š” ์›๋ฆฌ๋Š” ๋ฌด์—‡์ธ๊ฐ€? [1, 3, 5] ### Practical Application Contexts - **Implementation:** ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ตฌํ˜„ํ•  ๋•Œ ํŠน์ • ํด๋ž˜์Šค ๊ตฌํ˜„์ฒด(์˜ˆ: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™ ๊ฐ์ฒด)๋ฅผ ์ง์ ‘ ์ƒ์„ฑ(new)ํ•˜์ง€ ์•Š๊ณ , ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€ ์ƒ์„ฑ์ž๋‚˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์ž…๋ฐ›๋„๋ก ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค [1, 2]. - **System Design:** ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ์ข…์†์„ฑ์„ ๋‚ฎ์ถ”๊ธฐ ์œ„ํ•ด Spring, ASP.NET Core์™€ ๊ฐ™์€ DI ์ปจํ…Œ์ด๋„ˆ ์‚ฌ์šฉ์„ ์•„ํ‚คํ…์ฒ˜ ์ˆ˜์ค€์—์„œ ๋ฏธ๋ฆฌ ๊ฒฐ์ •ํ•œ๋‹ค [4]. - **Operation / Maintenance:** ๊ฒฐํ•ฉ๋„๊ฐ€ ๋‚ฎ๊ธฐ ๋•Œ๋ฌธ์— ์‹œ์Šคํ…œ์˜ ์ผ๋ถ€(์˜ˆ: ๋ฐ์ดํ„ฐ ์Šคํ† ๋ฆฌ์ง€ ๋ฐฉ์‹ ๋ณ€๊ฒฝ)๋ฅผ ๊ต์ฒดํ•ด์•ผ ํ•˜๋Š” ์šด์˜ ์ƒํ™ฉ์—์„œ ๋‹ค๋ฅธ ๋กœ์ง์— ์ถฉ๊ฒฉ(Domino effect)์„ ์ฃผ์ง€ ์•Š๊ณ  ์•ˆ์ „ํ•œ ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค [3, 9]. - **Learning Path:** ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์ƒํ–ฅ์‹์ด๋‚˜ ํ•˜ํ–ฅ์‹์œผ๋กœ ํƒ์ƒ‰ํ•˜๊ธฐ ์ „, ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ๋ฐ์ดํ„ฐ ํ๋ฆ„์ด ์™ธ๋ถ€ ์„ค์ •(ํ˜น์€ DI ํ”„๋ ˆ์ž„์›Œํฌ)์— ์˜ํ•ด ๋™์ ์œผ๋กœ ๊ฒฐ์ •๋˜๋Š” ํŒจํ„ด์„ ์ตํ˜€๋‘๋ฉด ์ฝ”๋“œ์˜ ํ˜ธ์ถœ ์Šคํƒ์„ ๋ถ„์„ํ•  ๋•Œ ๊ธธ์„ ์žƒ์ง€ ์•Š๋Š”๋‹ค [1, 3, 4]. - **My Project Relevance:** ๊ฑฐ๋Œ€ํ•œ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ๋‚ด์—์„œ ํŠน์ • ํด๋ž˜์Šค์˜ ์˜์กด์„ฑ์„ ํŒŒ์•…ํ•˜๊ฑฐ๋‚˜ ์œ ๋‹› ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ, ์˜์กด์„ฑ ์ฃผ์ž… ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๊ณ  ๋ชฉ(Mock) ๊ฐ์ฒด๋ฅผ ์‰ฝ๊ฒŒ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ๋Š” ์ง€์ ์„ ํŒŒ์•…ํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ด๋‹ค. ### Adjacent Topics - [[SOLID ์›์น™ (SOLID Principles)]] - ํ™•์žฅ ๋ฐฉํ–ฅ: DI๊ฐ€ ๊ตฌํ˜„ํ•˜๋Š” '์˜์กด์„ฑ ์—ญ์ „ ์›์น™(DIP)'๋ฟ๋งŒ ์•„๋‹ˆ๋ผ '๋‹จ์ผ ์ฑ…์ž„ ์›์น™(SRP)' ๋“ฑ ํ•จ๊ป˜ ๋™์ž‘ํ•˜์—ฌ ์ฝ”๋“œ ์œ ์—ฐ์„ฑ์„ ๋‹ฌ์„ฑํ•˜๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ์˜ 5๋Œ€ ๊ธฐ๋ณธ ์›์น™ ์ „๋ฐ˜์œผ๋กœ ์‹œ์•ผ๋ฅผ ๋„“ํ˜€ ์ฝ”๋“œ ์„ค๊ณ„์˜ ํ’ˆ์งˆ ๊ธฐ์ค€์„ ํ•™์Šตํ•  ์ˆ˜ ์žˆ๋‹ค [2, 10]. - [[๋ชจ์˜ ๊ฐ์ฒด ํ…Œ์ŠคํŠธ (Mock Testing)]] - ํ™•์žฅ ๋ฐฉํ–ฅ: DI๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€ ์ธํ”„๋ผ์ŠคํŠธ๋Ÿญ์ฒ˜์™€์˜ ์˜์กด์„ฑ์„ ๋ถ„๋ฆฌํ•œ ํ›„, ์ด๋ฅผ ์–ด๋–ป๊ฒŒ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ๋ชจ์˜(Mock)๋‚˜ ์Šคํ…(Stub)์œผ๋กœ ๊ต์ฒดํ•˜์—ฌ ๋…๋ฆฝ์ ์ธ ๊ฒ€์ฆ์„ ์ˆ˜ํ–‰ํ•˜๋Š”์ง€ ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ๋‹ค [1, 3, 5]. --- *Last updated: 2026-05-02*