--- category: Unified tags: [auto-consolidated, technical-documentation] title: [[SOLID Principles|SOLID Principles]] last_updated: 2026-05-02 --- # [[SOLID Principles|SOLID Principles]] ## ๐Ÿ“Œ Brief Summary > "์†Œํ”„ํŠธ์›จ์–ด์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ 5๊ฐ€์ง€ ํ•ต์‹ฌ ์„ค๊ณ„ ๊ธฐ๋‘ฅ: ์ธ์ง€์  ๋ถ€ํ•˜๋ฅผ ๋‚ฎ์ถ”๊ณ , ๋ณ€ํ™”์— ์œ ์—ฐํ•˜๋ฉฐ, ๊ฒฐํ•ฉ๋„๊ฐ€ ๋‚ฎ์€ ๊ฐ•๊ฑดํ•œ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„์˜ ํ‘œ์ค€ ์ง€์นจ." --- SOLID ์›์น™์€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP)์—์„œ ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„๋ฅผ ๋” ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ , ์œ ์—ฐํ•˜๋ฉฐ, ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์ข‹๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๊ณ ์•ˆ๋œ 5๊ฐ€์ง€ ํ•ต์‹ฌ ์„ค๊ณ„ ์›์น™์˜ ์ง‘ํ•ฉ์ด๋‹ค [1]. ๋กœ๋ฒ„ํŠธ C. ๋งˆํ‹ด("Uncle Bob")์— ์˜ํ•ด ๋Œ€์ค‘ํ™”๋˜์—ˆ์œผ๋ฉฐ, ์‹œ๊ฐ„์ด ์ง€๋‚˜๋„ ์‹œ์Šคํ…œ์„ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•˜๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ์ฝ”๋“œ์˜ ๋ถ€ํŒจ(code rot)๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ๊ฒฌ๊ณ ํ•œ ๊ธฐ๋ฐ˜์„ ์ œ๊ณตํ•œ๋‹ค [1]. ## ๐Ÿ“– Core Content SOLID ์›์น™์€ ์ฝ”๋“œ ๋ฆฌ๋ทฐ์™€ ์‹œ์Šคํ…œ ์„ค๊ณ„์˜ ๋ฌด๊ฒฐ์„ฑ์„ ํ‰๊ฐ€ํ•˜๋Š” ํ•ต์‹ฌ ๊ธฐ์ค€์ž…๋‹ˆ๋‹ค. 1. **[[Single Responsibility Principle (SRP)|Single Responsibility Principle (SRP]]**: ํด๋ž˜์Šค๋‚˜ ํ•จ์ˆ˜๋Š” ๋‹จ ํ•˜๋‚˜์˜ ๋ณ€๊ฒฝ ์ด์œ ๋งŒ์„ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“ˆํ™”๋ฅผ ํ†ตํ•ด ๊ฐ€๋…์„ฑ๊ณผ ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค. 2. **Open-Closed Principle (OCP)**: ํ™•์žฅ์—๋Š” ์—ด๋ ค ์žˆ๊ณ  ์ˆ˜์ •์—๋Š” ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋ฅผ ์ง€ํ–ฅํ•ฉ๋‹ˆ๋‹ค. 3. **Liskov Substitution Principle (LSP)**: ํ•˜์œ„ ํƒ€์ž…์€ ์–ธ์ œ๋‚˜ ์ƒ์œ„ ํƒ€์ž…์œผ๋กœ ๊ต์ฒด ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ƒ์† ๊ตฌ์กฐ์—์„œ์˜ ํ–‰๋™ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. 4. **Interface Segregation Principle (ISP)**: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ์— ์˜์กดํ•˜๋„๋ก ๊ฐ•์š”ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ๊ฑฐ๋Œ€ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ณด๋‹ค ๊ตฌ์ฒด์ ์ด๊ณ  ์ž‘์€ ์ธํ„ฐํŽ˜์ด์Šค ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ๋‚ซ์Šต๋‹ˆ๋‹ค. 5. **[[แ„‹แ…ดแ„Œแ…ฉแ†ซแ„‰แ…ฅแ†ผ แ„‹แ…งแ†จแ„Œแ…ฅแ†ซ แ„‹แ…ฏแ†ซแ„Žแ…ตแ†จ (Dependency Inversion Principle DIP)|Dependency Inversion Principle (DIP]]**: ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์€ ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ ๋˜๋ฉฐ, ๋‘˜ ๋‹ค ์ถ”์ƒํ™”์— ์˜์กดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„์ด ์•„๋‹Œ ์ถ”์ƒํ™”์— ์˜์กดํ•˜์—ฌ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถฅ๋‹ˆ๋‹ค. --- SOLID ์›์น™์€ ํŠน์ •ํ•œ ํŒจํ„ด์ด๋ผ๊ธฐ๋ณด๋‹ค๋Š” ์ฝ”๋“œ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ์‹์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์‚ฌ๊ณ ๋ฐฉ์‹(Mindset)์— ๊ฐ€๊น๋‹ค [2]. ์ด ์›์น™๋“ค์€ ์„œ๋กœ ํ˜‘๋ ฅํ•˜์—ฌ ์˜์กด์„ฑ์„ ์ค„์ด๊ณ , ์†Œํ”„ํŠธ์›จ์–ด์˜ ํ•œ ๋ถ€๋ถ„์„ ๋ณ€๊ฒฝํ•  ๋•Œ ๋‹ค๋ฅธ ๋ถ€๋ถ„์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ์ตœ์†Œํ™”ํ•˜๋„๋ก ๋•๋Š”๋‹ค [1]. ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ ์šฉ๋  ๊ฒฝ์šฐ ์ฝ”๋“œ ํ’ˆ์งˆ ํ–ฅ์ƒ, ๋ณต์žก์„ฑ ๊ฐ์†Œ, ์žฌ์‚ฌ์šฉ์„ฑ ์ฆ๋Œ€์˜ ํšจ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ค๋ฉฐ 5๊ฐ€์ง€ ์›์น™์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค [1]. * **๋‹จ์ผ ์ฑ…์ž„ ์›์น™ (Single Responsibility Principle, SRP):** ํด๋ž˜์Šค๋Š” ๋‹จ ํ•˜๋‚˜์˜ ๋ณ€๊ฒฝ ์ด์œ ๋งŒ ๊ฐ€์ ธ์•ผ ํ•˜๋ฉฐ, ์ด๋Š” ๊ณง ๋‹จ ํ•˜๋‚˜์˜ ์—ญํ• ๋งŒ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•จ์„ ์˜๋ฏธํ•œ๋‹ค [2]. ์˜ˆ๋ฅผ ๋“ค์–ด, `UserPersistence` ํด๋ž˜์Šค๋Š” ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•˜๋Š” ์ผ๋งŒ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋ฉฐ ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๊ฒ€์ฆ์„ ๋‹ด๋‹นํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค [2]. * **๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™ (Open/Closed Principle, OCP):** ์†Œํ”„ํŠธ์›จ์–ด ์—”ํ‹ฐํ‹ฐ๋Š” ํ™•์žฅ์—๋Š” ์—ด๋ ค ์žˆ์–ด์•ผ ํ•˜์ง€๋งŒ ์ˆ˜์ •์—๋Š” ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•œ๋‹ค [2]. ์ธํ„ฐํŽ˜์ด์Šค๋‚˜ ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ ๋„ ์ƒˆ๋กœ์šด ํ•˜์œ„ ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค [2]. * **๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™ (Liskov Substitution Principle, LSP):** ํ•˜์œ„ ํƒ€์ž…(Subtypes)์€ ํ”„๋กœ๊ทธ๋žจ์˜ ์ •ํ™•์„ฑ์„ ํ›ผ์†ํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ๊ธฐ๋ณธ ํƒ€์ž…(Base types)์œผ๋กœ ๋งค๋„๋Ÿฝ๊ฒŒ ๋Œ€์ฒด ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค [2]. * **์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™ (Interface Segregation Principle, ISP):** ํด๋ผ์ด์–ธํŠธ๋Š” ์ž์‹ ์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•˜๋„๋ก ๊ฐ•์š”๋ฐ›์•„์„œ๋Š” ์•ˆ ๋œ๋‹ค [2]. ๊ฑฐ๋Œ€ํ•˜๊ณ  ๋ฒ”์šฉ์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค ํ•˜๋‚˜๋ฅผ ๋งŒ๋“ค๊ธฐ๋ณด๋‹ค๋Š” ์ž‘๊ณ  ๊ตฌ์ฒด์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ด๋ฅผ ๋‹ฌ์„ฑํ•œ๋‹ค [2]. * **์˜์กด์„ฑ ์—ญ์ „ ์›์น™ (Dependency Inversion Principle, DIP):** ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์€ ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ ๋˜๋ฉฐ, ๋‘˜ ๋‹ค ์ถ”์ƒํ™”์— ์˜์กดํ•ด์•ผ ํ•œ๋‹ค [2]. ์ด๋Š” ์ฃผ๋กœ ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection, DI)์„ ํ†ตํ•ด ๊ตฌํ˜„๋œ๋‹ค [2]. ๊ตฌํ˜„์— ์žˆ์–ด์„œ๋Š” '๋‹จ์ผ ์ฑ…์ž„(SRP)'๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ์ฆ‰๊ฐ์ ์ธ ์ด์ ์„ ์ œ๊ณตํ•˜๋ฉฐ ๊ฐ€์žฅ ์‰ฌ์šด ์ ‘๊ทผ๋ฒ•์ด๋‹ค [3]. ๋˜ํ•œ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•(How)๋ณด๋‹ค ์ธํ„ฐํŽ˜์ด์Šค(What)๋ฅผ ๋จผ์ € ์„ค๊ณ„ํ•˜๋Š” ํ”„๋ž™ํ‹ฐ์Šค๊ฐ€ OCP์™€ DIP ์›์น™์„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ง€์›ํ•œ๋‹ค [3]. ## โš–๏ธ Trade-offs & Caveats - **์ถ”์ƒํ™”์˜ ๋น„์šฉ**: ํ™•์žฅ์„ฑ์„ ์œ„ํ•ด ์ธํ„ฐํŽ˜์ด์Šค์™€ ์ถ”์ƒํ™”๋ฅผ ๊ณผ๋„ํ•˜๊ฒŒ ๋„์ž…ํ•  ๊ฒฝ์šฐ, ์ฝ”๋“œ์˜ ์ง๊ด€์„ฑ์ด ๋–จ์–ด์ง€๊ณ  ์˜ค๋ฒ„์—”์ง€๋‹ˆ์–ด๋ง(Over-engineering)์œผ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ์˜ ์š”๊ตฌ์‚ฌํ•ญ๊ณผ ๋ฏธ๋ž˜์˜ ์œ ์—ฐ์„ฑ ์‚ฌ์ด์˜ ์‹ค์šฉ์  ํƒ€ํ˜‘(Trade-off)์ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. - **์‹คํ–‰ ํ๋ฆ„ ํŒŒ์•…์˜ ์–ด๋ ค์›€**: DI(์˜์กด์„ฑ ์ฃผ์ž…)๋ฅผ ๊ทนํ•œ์œผ๋กœ ํ™œ์šฉํ•  ๊ฒฝ์šฐ ๋Ÿฐํƒ€์ž„์— ์˜์กด์„ฑ์ด ๊ฒฐ์ •๋˜๋ฏ€๋กœ, ์ฝ”๋“œ ์ •์  ๋ถ„์„๋งŒ์œผ๋กœ๋Š” ์ „์ฒด ์‹คํ–‰ ํ๋ฆ„์„ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ค์›Œ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•œ ๋ช…ํ™•ํ•œ ๋ฌธ์„œํ™”์™€ ์ถ”์  ๋กœ์ง์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. --- * **๊ตฌํ˜„ ๋ณต์žก์„ฑ ์ฆ๊ฐ€:** SOLID ์›์น™์„ ๋„์ž…ํ•˜๋ ค๋ฉด ๋†’์€ ์ˆ˜์ค€์˜ ์„ค๊ณ„ ๊ทœ์œจ(Design discipline)๊ณผ ๊ฐ์ฒด ์ง€ํ–ฅ ํŒจํ„ด์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ์š”๊ตฌ๋˜์–ด ๊ตฌํ˜„ ๋ณต์žก์„ฑ์ด '์ค‘๊ฐ„์—์„œ ๋†’์Œ(Medium-High)' ์ˆ˜์ค€์— ์ด๋ฅธ๋‹ค [4]. * **์ž์› ๋ฐ ๊ธฐ์ˆ ์  ์š”๊ตฌ ์‚ฌํ•ญ:** ์ด ์›์น™๋“ค์„ ํšจ๊ณผ์ ์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” DI ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๊ฐ™์€ ๊ธฐ์ˆ ์  ๋„๊ตฌ์™€ ์ด๋ฅผ ๋‹ค๋ฃฐ ์ค„ ์•„๋Š” ์ˆ™๋ จ๋œ ๊ฐœ๋ฐœ์ž(Skilled developers)๊ฐ€ ํ•„์š”ํ•˜๋‹ค [4]. * **์ „๋ฉด ๊ฐœํŽธ์˜ ์œ„ํ—˜์„ฑ (์ ์ง„์  ์ ์šฉ์˜ ํ•„์š”์„ฑ):** ๊ธฐ์กด์˜ ๊ฑฐ๋Œ€ํ•œ ๋ ˆ๊ฑฐ์‹œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด๋ฅผ ํ•œ ๋ฒˆ์— ๋ฆฌํŒฉํ† ๋งํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๋ถˆํ•„์š”ํ•œ ๋ณต์žก์„ฑ๊ณผ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ ์ ์ง„์ ์œผ๋กœ(Incrementally) ์›์น™์„ ์ ์šฉํ•ด์•ผ ํ•œ๋‹ค [3]. ## ๐Ÿ”— Knowledge Connections - [[Single Responsibility Principle (SRP)|Single Responsibility Principle (SRP]]: ์ฒซ ๋ฒˆ์งธ ์›์น™์˜ ์‹ฌํ™”. - [[Dependency Injection (DI)|Dependency Injection (DI]]: DIP๋ฅผ ์‹คํ˜„ํ•˜๋Š” ๊ตฌ์ฒด์  ๊ธฐ๋ฒ•. - [[Clean Architecture|Clean Architecture]]: SOLID๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด๋กœ ํ™•์žฅํ•œ ๊ตฌ์กฐ. - Abstraction & Over-engineering: ์„ค๊ณ„ ์‹œ ๊ฒฝ๊ณ„ํ•ด์•ผ ํ•  ํŠธ๋ ˆ์ด๋“œ์˜คํ”„. - Test-Driven Development (TDD: ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์ข‹์€ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ์›์น™์œผ๋กœ์„œ์˜ ์—ฐ๊ฒฐ. --- --- ### Related Concepts #### [๊ด€๊ณ„ ์œ ํ˜• A (์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ )] - [[๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (Object-Oriented Programming, OOP)]] - ์—ฐ๊ฒฐ ์ด์œ : SOLID ์›์น™ ์ž์ฒด๊ฐ€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์œ„ํ•œ 5๊ฐ€์ง€ ๊ธฐ๋ฐ˜ ์„ค๊ณ„ ์›์น™์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [1]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํด๋ž˜์Šค, ์ƒ์†, ์„œ๋ธŒํƒ€์ž…, ์ถ”์ƒํ™” ๋“ฑ์˜ OOP ๊ธฐ๋ฐ˜ ๊ฐœ๋…์„ ์ดํ•ดํ•จ์œผ๋กœ์จ ์ฝ”๋“œ๋ฒ ์ด์Šค ๋‚ด์—์„œ SOLID ์›์น™์ด ์–ด๋–ป๊ฒŒ ์˜์กด์„ฑ์„ ์ค„์ด๊ณ  ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•˜๋Š”์ง€ ์ฝ”์–ด ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ•ด๋…ํ•  ์ˆ˜ ์žˆ๋‹ค [1, 2]. #### [๊ด€๊ณ„ ์œ ํ˜• B (๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ)] - [[์˜์กด์„ฑ ์ฃผ์ž… (Dependency Injection, DI)]] - ์—ฐ๊ฒฐ ์ด์œ : SOLID ์›์น™ ์ค‘ '์˜์กด์„ฑ ์—ญ์ „ ์›์น™(DIP)'์„ ๊ตฌํ˜„ํ•  ๋•Œ ๊ตฌ์„ฑ ์š”์†Œ๋“ค์„ ๋””์ปคํ”Œ๋ง(Decoupling)ํ•˜๊ธฐ ์œ„ํ•ด ์‹ค๋ฌด์ ์œผ๋กœ ๊ฐ€์žฅ ๋นˆ๋ฒˆํ•˜๊ฒŒ ํ™œ์šฉ๋˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ ๋ฐ ํŒจํ„ด์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [2, 3, 5, 6]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: Spring์ด๋‚˜ ASP.NET Core์™€ ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ ํ™˜๊ฒฝ์—์„œ ๊ฐ์ฒด์˜ ์ƒ๋ช…์ฃผ๊ธฐ์™€ ์˜์กด์„ฑ์ด ์ฝ”๋“œ๋ฒ ์ด์Šค ๋‚ด์— ์–ด๋–ป๊ฒŒ ์ฃผ์ž…๋˜๊ณ  ์—ญ์ „๋˜๋Š”์ง€ ๋™์ ์ธ ํ๋ฆ„์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค [3]. ### Deeper Research Questions - ๋‹จ์ผ ์ฑ…์ž„ ์›์น™(SRP)์„ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฒ ์ด์Šค์— ์ ์ง„์ ์œผ๋กœ ์ ์šฉํ•  ๋•Œ, ํด๋ž˜์Šค๋ฅผ ๋‚˜๋ˆ„๋Š” ๊ฒฝ๊ณ„๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฐ€์žฅ ๊ฐ๊ด€์ ์ธ ๊ธฐ์ค€์ด๋‚˜ ์ง€ํ‘œ๋Š” ๋ฌด์—‡์ธ๊ฐ€? [2, 3] - ์˜์กด์„ฑ ์—ญ์ „ ์›์น™(DIP)์„ ์ค€์ˆ˜ํ•˜๊ธฐ ์œ„ํ•ด DI ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ „๋ฉด ๋„์ž…ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋Ÿฐํƒ€์ž„ ์˜ค๋ฒ„ํ—ค๋“œ์™€ ์ดˆ๊ธฐ ํ•™์Šต ๊ณก์„ ์„ ์–ด๋–ป๊ฒŒ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? [2-4] - ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™(ISP)์— ๋”ฐ๋ผ ๊ฑฐ๋Œ€ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋‹ค์ˆ˜์˜ ์ž‘์€ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ชผ๊ฐœ๋Š” ๊ฒƒ์ด ์˜คํžˆ๋ ค ์ฝ”๋“œ๋ฒ ์ด์Šค ๋‚ด ํŒŒ์ผ ์ˆ˜ ์ฆ๊ฐ€์™€ ๋ณต์žก์„ฑ์„ ์œ ๋ฐœํ•˜์ง€ ์•Š๋„๋ก ๋ฐฉ์ง€ํ•˜๋Š” ๊ตฌ์กฐ์  ํŒ์€ ๋ฌด์—‡์ธ๊ฐ€? [2] - ๊ตฌํ˜„ ์ฝ”๋“œ ์ž‘์„ฑ ์ด์ „์— ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋จผ์ € ์ •์˜ํ•˜๋Š” ๋ฐฉ์‹์ด OCP์™€ DIP๋ฅผ ๋ณด์žฅํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ๋ฌด์—‡์ธ๊ฐ€? [2, 3] - ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜(Microservices Architecture)๋กœ ๋ถ„๋ฆฌ๋œ ์‹œ์Šคํ…œ ๊ฒฝ๊ณ„ ๋„ˆ๋จธ์—์„œ๋„ SOLID ์›์น™์ด ์œ ํšจํ•œ ์„ค๊ณ„ ์ฒ ํ•™์œผ๋กœ ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? [1, 7] ### Practical Application Contexts - **Implementation:** ์ฝ”๋“œ๋ฅผ ์ƒˆ๋กœ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ๋•Œ, ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๊ฐ€ ๋‘ ๊ฐ€์ง€ ์ด์ƒ์˜ ์ฑ…์ž„์„ ๊ฐ–์ง€ ์•Š๋„๋ก ์ชผ๊ฐœ๊ณ (SRP), ๊ธฐ์กด ๋กœ์ง์„ ๊ณ ์น˜์ง€ ์•Š๊ณ  ๊ธฐ๋Šฅ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ์ธํ„ฐํŽ˜์ด์Šค ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœํ•œ๋‹ค [2]. - **System Design:** ์†Œํ”„ํŠธ์›จ์–ด ์ปดํฌ๋„ŒํŠธ๋“ค์ด ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„์ฒด(์ €์ˆ˜์ค€ ๋ชจ๋“ˆ)๊ฐ€ ์•„๋‹Œ ์ถ”์ƒํ™”์— ์˜์กดํ•˜๋„๋ก ์˜์กด์„ฑ ์ฃผ์ž…(DI) ํŒจํ„ด์„ ์‹œ์Šคํ…œ ์ „๋ฐ˜์˜ ์•„ํ‚คํ…์ฒ˜ ํ‘œ์ค€์œผ๋กœ ๋„์ž…ํ•œ๋‹ค [2, 3]. - **Operation / Maintenance:** ๋ฐฉ๋Œ€ํ•œ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฅผ ํ•œ ๋ฒˆ์— ๊ฐˆ์•„์—Ž๊ธฐ๋ณด๋‹ค๋Š” ์ˆ˜์ •์ด ํ•„์š”ํ•œ ๋ชจ๋“ˆ์ด๋‚˜ ์‹ ๊ทœ ํ”ผ์ฒ˜ ๊ฐœ๋ฐœ ์‹œ์— ์ ์ง„์ ์œผ๋กœ ์›์น™์„ ์ ์šฉํ•ด ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋‹จ๊ณ„์ ์œผ๋กœ ๋Œ์–ด์˜ฌ๋ฆฐ๋‹ค [3]. - **Learning Path:** ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์ฒ˜์Œ ํŒŒ์•…ํ•˜๊ฑฐ๋‚˜ ์›์น™์„ ์—ฐ์Šตํ•  ๋•Œ, ๊ฐ€์žฅ ์ ์šฉํ•˜๊ธฐ ์‰ฝ๊ณ  ์ง๊ด€์ ์ธ '๋‹จ์ผ ์ฑ…์ž„ ์›์น™(SRP)'์ด ์ง€์ผœ์ง€๊ณ  ์žˆ๋Š”์ง€๋ถ€ํ„ฐ ๋ถ„์„ํ•˜๋Š” ํ›ˆ๋ จ์„ ํ•œ๋‹ค [3]. - **My Project Relevance:** ๋ณต์žกํ•˜๊ฒŒ ์–ฝํžŒ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ฝ์„ ๋•Œ, ์˜์กด์„ฑ ๋ฐฉํ–ฅ(DIP ์œ„๋ฐฐ ์—ฌ๋ถ€)๊ณผ ๊ฑฐ๋Œ€ ํด๋ž˜์Šค(SRP ์œ„๋ฐฐ ์—ฌ๋ถ€)๋ฅผ ํŒŒ์•…ํ•ด ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ๋ฆฌํŒฉํ† ๋ง ํฌ์ธํŠธ๋ฅผ ๋„์ถœํ•˜๋Š” ์ง„๋‹จ ๊ธฐ์ค€์œผ๋กœ ํ™œ์šฉํ•œ๋‹ค. ### Adjacent Topics - [[๋””์ž์ธ ํŒจํ„ด (Design Patterns)]] - ํ™•์žฅ ๋ฐฉํ–ฅ: SOLID์˜ ๊ฐœ๋…์  ์›์น™๋“ค์„ ์‹ค์ œ ์ฝ”๋“œ ์ƒ์—์„œ ์–ด๋–ป๊ฒŒ ๊ตฌ์กฐํ™”(์ƒ์„ฑ, ๊ตฌ์กฐ, ํ–‰์œ„ ํŒจํ„ด)ํ•  ๊ฒƒ์ธ๊ฐ€์— ๋Œ€ํ•œ ๊ตฌ์ฒด์ ์ด๊ณ  ๊ฒ€์ฆ๋œ ์„ค๊ณ„ ํ•ด๊ฒฐ์ฑ…์œผ๋กœ ํ•™์Šต์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค [1, 2, 8]. - [[ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜ (Clean Architecture)]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ํด๋ž˜์Šค ๋ ˆ๋ฒจ์˜ ๊ฐ์ฒด ์ง€ํ–ฅ ์›์น™์„ ๋„˜์–ด, ์‹œ์Šคํ…œ ์ „์ฒด์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ํ”„๋ ˆ์ž„์›Œํฌ ๋ฐ ์™ธ๋ถ€ DB๋กœ๋ถ€ํ„ฐ ๊ฒฉ๋ฆฌ์‹œํ‚ค๋Š” ์ƒ์œ„ ์ˆ˜์ค€์˜ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ์ง€์‹์œผ๋กœ ์—ฐ๊ฒฐ๋œ๋‹ค [9]. --- *Last updated: 2026-05-02* ## ๐Ÿงช ๊ฒ€์ฆ ์ƒํƒœ (Validation) - **์ •๋ณด ์ƒํƒœ:** draft - **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** A - **๊ฒ€ํ†  ์ด์œ :** Datacollector์—์„œ ์ž๋™ ์ถ”์ถœ๋œ ์œ„ํ‚ค ๋ฐ์ดํ„ฐ์˜ ์ดˆ๊ธฐ ํ†ตํ•ฉ. ## ๐Ÿงฌ ์ค‘๋ณต ๊ฒ€์‚ฌ (Duplicate Check) - **๊ธฐ์กด ์œ ์‚ฌ ๋ฌธ์„œ:** None - **์ฒ˜๋ฆฌ ๋ฐฉ์‹:** CREATE - **์ฒ˜๋ฆฌ ์ด์œ :** ์‹ ๊ทœ ์ง€์‹ ์ฒด๊ณ„ ๋„์ž