--- category: Unified tags: [auto-consolidated, technical-documentation] title: [[Single Responsibility Principle (SRP)|Single Responsibility Principle (SRP]] last_updated: 2026-05-02 --- # [[Single Responsibility Principle (SRP)|Single Responsibility Principle (SRP]] ## ๐Ÿ“Œ Brief Summary > "ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ์€ ์˜ค์ง ํ•˜๋‚˜์˜ ๋ณ€๊ฒฝ ์ด์œ (Reason to change)๋งŒ์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค: ์ฝ”๋“œ์˜ ์‘์ง‘๋„๋ฅผ ๋†’์ด๊ณ  ๋ณต์žก์„ฑ์„ ๋ถ„์‚ฐํ•˜์—ฌ, ๋ฒ„๊ทธ ์ˆ˜์ •๊ณผ ๊ธฐ๋Šฅ ํ™•์žฅ์ด ๋‹ค๋ฅธ ์˜์—ญ์— ๋ฏธ์น˜๋Š” ๋ถ€์ž‘์šฉ์„ ์ตœ์†Œํ™”ํ•˜๋Š” ์„ค๊ณ„์˜ ๊ธฐ์ดˆ." --- ๋‹จ์ผ ์ฑ…์ž„ ์›์น™(SRP)์€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ 5๊ฐ€์ง€ ๊ธฐ์ดˆ ์„ค๊ณ„ ์›์น™์ธ SOLID ์ค‘ ์ฒซ ๋ฒˆ์งธ ์›์น™์œผ๋กœ, "ํด๋ž˜์Šค๋Š” ์˜ค์ง ํ•˜๋‚˜์˜ ๋ณ€๊ฒฝ ์ด์œ ๋งŒ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค(ํ•˜๋‚˜์˜ ์ž‘์—…๋งŒ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค)"๋Š” ๊ฐœ๋…์ž…๋‹ˆ๋‹ค [1, 2]. ์ด๋ฅผ ์ ์šฉํ•˜๋ฉด ๊ฐ ์ปดํฌ๋„ŒํŠธ์˜ ์—ญํ• ์ด ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌ๋˜์–ด ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„๋ฅผ ๋” ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ , ์œ ์—ฐํ•˜๋ฉฐ, ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์ข‹๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค [1, 2]. ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๋ถ„์„ํ•˜๊ฑฐ๋‚˜ ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•  ๋•Œ ๊ฐ€์žฅ ์šฐ์„ ์ ์ด๊ณ  ์‰ฝ๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ•ต์‹ฌ ์ง€์นจ์ž…๋‹ˆ๋‹ค [3]. ## ๐Ÿ“– Core Content SRP๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„์˜ ์ฒซ ๋ฒˆ์งธ ๋‹จ์ถ”์ด์ž ๊ฐ€์žฅ ๋ณดํŽธ์ ์ธ ๋ฆฌ๋ทฐ ๊ธฐ์ค€์ž…๋‹ˆ๋‹ค. 1. **๋‹จ์ผ ์ฑ…์ž„์˜ ๊ธฐ์ค€**: * ํด๋ž˜์Šค๋‚˜ ํ•จ์ˆ˜๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” '์ผ(Task)'์ด ์•„๋‹ˆ๋ผ, ๊ทธ ์ฝ”๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์š”๊ตฌ์‚ฌํ•ญ์„ ๋ณ€๊ฒฝํ•˜๋Š” '์ฃผ์ฒด(Actor)'๊ฐ€ ๋ˆ„๊ตฌ์ธ๊ฐ€์— ์ง‘์ค‘ํ•ฉ๋‹ˆ๋‹ค. * ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ, UI ๋ Œ๋”๋ง ๋“ฑ์ด ํ•˜๋‚˜์˜ ํŒŒ์ผ์— ์„ž์—ฌ ์žˆ๋‹ค๋ฉด ์ด๋Š” ๋ช…๋ฐฑํ•œ SRP ์œ„๋ฐ˜์ž…๋‹ˆ๋‹ค. 2. **์ฝ”๋“œ ๋ฆฌ๋ทฐ์˜ ํ•ต์‹ฌ ํ•„ํ„ฐ**: * ๋ฆฌ๋ทฐ์–ด๋Š” ๊ฑฐ๋Œ€ํ•œ ํ•จ์ˆ˜๋‚˜ ํด๋ž˜์Šค๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์„ ๋•Œ ์ด๋ฅผ ๋…ผ๋ฆฌ์  ๋‹จ์œ„๋กœ ์ชผ๊ฐœ๋„๋ก ๊ถŒ๊ณ ํ•ฉ๋‹ˆ๋‹ค. * ๋ชจ๋“ˆ์ด ์ž‘์•„์งˆ์ˆ˜๋ก ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์‰ฌ์›Œ์ง€๋ฉฐ, ํŠน์ • ๊ธฐ๋Šฅ๋งŒ ๋–ผ์–ด๋‚ด์–ด ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์šฉ์ดํ•ด์ง‘๋‹ˆ๋‹ค. 3. **๊ฒฐํ•ฉ๋„์™€ ์‘์ง‘๋„**: * ์ฑ…์ž„์ด ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌ๋œ ์ฝ”๋“œ๋Š” ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„(Low Coupling)์™€ ๋†’์€ ์‘์ง‘๋„(High Cohesion)๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋˜์–ด, ์ „์ฒด ์‹œ์Šคํ…œ์˜ ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ์„ ๋‚ฎ์ถฅ๋‹ˆ๋‹ค. --- - **SOLID ์›์น™์˜ ํ•ต์‹ฌ ๊ธฐ๋ฐ˜:** SRP๋Š” ๋กœ๋ฒ„ํŠธ C. ๋งˆํ‹ด(Robert C. Martin)์ด ๋Œ€์ค‘ํ™”ํ•œ SOLID ์›์น™(๋‹จ์ผ ์ฑ…์ž„, ๊ฐœ๋ฐฉ/ํ์‡„, ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜, ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ, ์˜์กด์„ฑ ์—ญ์ „)์˜ ์‹œ์ž‘์ ์ž…๋‹ˆ๋‹ค [1]. ์ด ์›์น™๋“ค์€ ์„œ๋กœ ์˜์กด์„ฑ์„ ์ค„์ด๊ณ  ์‹œ์Šคํ…œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์—ฌ ์ฝ”๋“œ์˜ ๋ถ€ํŒจ(code rot)๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค [1]. - **ํด๋ž˜์Šค์™€ ๋ชจ๋“ˆ์˜ ๋‹จ์ผ ์ž‘์—…(Job):** ํด๋ž˜์Šค๋Š” ๋‹จ ํ•œ ๊ฐ€์ง€์˜ ์ฑ…์ž„(์ž‘์—…)๋งŒ์„ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค [2]. ์†Œ์Šค์—์„œ ์ œ์‹œ๋œ ์˜ˆ์‹œ์— ๋”ฐ๋ฅด๋ฉด, `UserPersistence`๋ผ๋Š” ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค๋ฉด ์ด ํด๋ž˜์Šค๋Š” ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•˜๋Š” ์—ญํ• ๋งŒ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ๊ฒ€์ฆ(validating)ํ•˜๋Š” ์ฑ…์ž„๊นŒ์ง€ ๋™์‹œ์— ๊ฐ€์ ธ์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค [2]. - **์ฝ”๋“œ ๋ถ„์„ ๋ฐ ํ•ด๋…์—์„œ์˜ ์—ญํ• :** ๋ณต์žกํ•˜๊ณ  ๊ฑฐ๋Œ€ํ•œ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์ฝ๊ณ  ๋ถ„์„ํ•  ๋•Œ, ํŠน์ • ํด๋ž˜์Šค๋ฅผ ๋ณด๋ฉฐ "์ด ํด๋ž˜์Šค๊ฐ€ ๋‹จ์ผ ์ฑ…์ž„ ์•„์ด๋””์–ด๋ฅผ ์ค€์ˆ˜ํ•˜๊ณ  ์žˆ๋Š”๊ฐ€?", "์ด ํด๋ž˜์Šค๋ฅผ ๋” ์ž‘์€ ๊ฐ์ฒด๋“ค๋กœ ๋ถ„ํ•ดํ•ด์•ผ ํ•˜๋Š”๊ฐ€?"๋ผ๊ณ  ๋น„ํŒ์ ์œผ๋กœ ์งˆ๋ฌธํ•˜๋Š” ๊ฒƒ์€ ์‹œ์Šคํ…œ์˜ ์ถ”์ƒํ™” ์ˆ˜์ค€๊ณผ ์‘์ง‘๋„๋ฅผ ํ‰๊ฐ€ํ•˜๋Š” ํ›Œ๋ฅญํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค [4]. ์ด๋Ÿฌํ•œ ์‹œ๊ฐ์€ ๋‹จ์ˆœํžˆ ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์„ ๋„˜์–ด ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ํ†ต์ฐฐ๋ ฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค [4]. - **์ ์ง„์  ๋„์ž…๊ณผ ์ฆ‰๊ฐ์ ์ธ ์ด์ :** SRP๋Š” ์ข…์ข… ์ ์šฉํ•˜๊ธฐ ๊ฐ€์žฅ ์‰ฌ์šด ์›์น™์œผ๋กœ ์—ฌ๊ฒจ์ง€๋ฉฐ ์ฆ‰๊ฐ์ ์ธ ์ฝ”๋“œ ํ’ˆ์งˆ ํ–ฅ์ƒ ์ด์ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค [3]. ๊ธฐ์กด ๋ ˆ๊ฑฐ์‹œ ์‹œ์Šคํ…œ ์ „์ฒด๋ฅผ ํ•œ ๋ฒˆ์— ์ˆ˜์ •ํ•  ํ•„์š” ์—†์ด, ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ "์ด ํด๋ž˜์Šค์˜ ๋‹จ์ผ ์ฑ…์ž„์€ ๋ฌด์—‡์ธ๊ฐ€?"๋ผ๊ณ  ์ž๋ฌธํ•˜๋ฉฐ ์ ์ง„์ ์œผ๋กœ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค [3]. ## โš–๏ธ Trade-offs & Caveats - **๊ณผ๋„ํ•œ ํŒŒํŽธํ™”**: SRP๋ฅผ ๊ทน๋‹จ์ ์œผ๋กœ ์ ์šฉํ•  ๊ฒฝ์šฐ ํด๋ž˜์Šค์™€ ํŒŒ์ผ ์ˆ˜๊ฐ€ ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ์ฆ๊ฐ€ํ•˜์—ฌ ์ „์ฒด ์‹œ์Šคํ…œ์˜ ๊ฐ€๋…์„ฑ์„ ํ•ด์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. '๋…ผ๋ฆฌ์  ์—ฐ๊ด€์„ฑ'์ด ๋†’์€ ์ฝ”๋“œ๋“ค์€ ์ ์ ˆํ•œ ์ˆ˜์ค€์—์„œ ํ•จ๊ป˜ ์œ ์ง€ํ•˜๋Š” ์‹ค์šฉ์  ๊ท ํ˜•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. - **์•„ํ‚คํ…์ฒ˜์  ๋ถ€์ฑ„**: ์ดˆ๊ธฐ ์„ค๊ณ„ ์‹œ SRP๋ฅผ ๋ฌด์‹œํ•˜๋ฉด ์‹œ๊ฐ„์ด ํ๋ฅผ์ˆ˜๋ก '์‹ (God) ๊ฐ์ฒด'๊ฐ€ ํƒ„์ƒํ•˜๋ฉฐ, ์ด๋Š” ๋ฆฌํŒฉํ† ๋ง ๋น„์šฉ์„ ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ์ฃผ์š” ์›์ธ์ด ๋ฉ๋‹ˆ๋‹ค. --- ์†Œ์Šค์— ๋‹จ์ผ ์ฑ…์ž„ ์›์น™(SRP)๋งŒ์„ ํŠน์ •ํ•œ ๋ถ€์ž‘์šฉ์ด๋‚˜ ์„ธ๋ถ€์ ์ธ ์ œ์•ฝ ์‚ฌํ•ญ(Trade-off)์— ๋Œ€ํ•œ ๊ตฌ์ฒด์ ์ธ ์ •๋ณด๋Š” ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ, SRP๋ฅผ ํฌํ•จํ•œ SOLID ์›์น™ ์ „์ฒด๋ฅผ ์‹œ์Šคํ…œ์— ์ ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ํŠน์ง•๊ณผ ๋ฐ˜๋Œ€ ๊ธ‰๋ถ€๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์–ธ๊ธ‰๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. - **๊ตฌํ˜„ ๋ณต์žก์„ฑ๊ณผ ์ˆ™๋ จ๋„ ์š”๊ตฌ:** ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„ ๊ทœ์œจ๊ณผ ํŒจํ„ด์„ ์—„๊ฒฉํ•˜๊ฒŒ ์ ์šฉํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๊ตฌํ˜„ ๋ณต์žก๋„(Implementation Complexity)๊ฐ€ ์ค‘๊ฐ„์—์„œ ๋†’์Œ(Medium-High) ์ˆ˜์ค€์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋ฉฐ, ์˜์กด์„ฑ ์ฃผ์ž…(DI) ํ”„๋ ˆ์ž„์›Œํฌ ๋“ฑ์„ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ์ˆ™๋ จ๋œ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค [5]. - **์ ์ง„์  ๋ฆฌํŒฉํ† ๋ง์˜ ํ•„์š”์„ฑ:** ๊ณผ๋„ํ•œ ์„ค๊ณ„ ๋ณ€๊ฒฝ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ์กด ๋ชจ๋†€๋ฆฌ์‹ ๋ชจ๋“ˆ์„ ์ผ์‹œ์— ๋ถ„ํ•ดํ•˜๊ธฐ๋ณด๋‹ค๋Š”, ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ ์ ์ง„์ ์œผ๋กœ ์›์น™์„ ์ ์šฉ(Apply Incrementally)ํ•˜๋Š” ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค [3]. ## ๐Ÿ”— Knowledge Connections - [[SOLID Principles|SOLID Principles]]: 5๋Œ€ ์›์น™์˜ ์‹œ์ž‘์ . - [[แ„แ…ฆแ„‰แ…ณแ„แ…ณ แ„‹แ…ญแ†ผแ„‹แ…ตแ„‰แ…ฅแ†ผ (Testability)|Testability]]: ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์ข‹์€ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ์ง์ ‘์  ์›์ธ. - [[Refactoring|Refactoring]]: SRP ์œ„๋ฐ˜ ์‹œ ๋ฆฌ๋ทฐ์–ด๊ฐ€ ๋‚ด๋ฆฌ๋Š” ํ•ต์‹ฌ ์ฒ˜๋ฐฉ. - [[Clean Architecture|Clean Architecture]]: ์ฑ…์ž„์„ ๊ณ„์ธต๋ณ„๋กœ ๊ฒฉ๋ฆฌํ•˜๋Š” ๊ฑฐ์‹œ์  ๊ตฌ์กฐ. - Code Readability: ๋‹จ์ˆœํ•ด์ง„ ์ฝ”๋“œ๊ฐ€ ๊ฐ€์ ธ์˜ค๋Š” ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ. --- --- ### Related Concepts #### [๊ด€๊ณ„ ์œ ํ˜• A (์•„ํ‚คํ…์ฒ˜ ๋ฐ ๊ธฐ๋ฐ˜ ์›์น™)] - [[SOLID ์›์น™ (SOLID Principles)]] - ์—ฐ๊ฒฐ ์ด์œ : SRP๋Š” SOLID ์›์น™์˜ ์ฒซ ๋ฒˆ์งธ ๊ธ€์ž๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ๊ตฌ์„ฑ ์š”์†Œ๋กœ, ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„์˜ ๊ธฐ์ดˆ ์ฒ ํ•™์„ ํ˜•์„ฑํ•ฉ๋‹ˆ๋‹ค [1]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํด๋ž˜์Šค ์„ค๊ณ„ ์‹œ ๋‹จ์ผ ์ฑ…์ž„(SRP)์„ ๋„˜์–ด ํ™•์žฅ์—๋Š” ์—ด๋ ค์žˆ๊ณ  ์ˆ˜์ •์—๋Š” ๋‹ซํ˜€์žˆ๋Š” ๊ตฌ์กฐ(OCP), ํ˜น์€ ์˜์กด์„ฑ ์—ญ์ „(DIP) ๋“ฑ ์‹œ์Šคํ…œ ์ „์ฒด์˜ ์œ ์—ฐ์„ฑ์„ ํ™•๋ณดํ•˜๋Š” ์ข…ํ•ฉ์  ์•„ํ‚คํ…์ฒ˜ ๊ด€์ ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [1, 2]. - [[๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ (Separation of Concerns, SoC)]] - ์—ฐ๊ฒฐ ์ด์œ : SoC๋Š” ์‹œ์Šคํ…œ์„ ๊ฒน์น˜์ง€ ์•Š๊ณ  ๋šœ๋ ทํ•œ ๊ธฐ๋Šฅ์  ์„น์…˜(๊ด€์‹ฌ์‚ฌ)์œผ๋กœ ๋‚˜๋ˆ„๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๋ง์˜ ํ•ต์‹ฌ ์›์น™์œผ๋กœ, SRP์˜ ์ฒ ํ•™๊ณผ ๋งค์šฐ ๋ฐ€์ ‘ํ•˜๊ฒŒ ๋งž๋‹ฟ์•„ ์žˆ์Šต๋‹ˆ๋‹ค [6]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํด๋ž˜์Šค ์ˆ˜์ค€์˜ ๋‹จ์ผ ์ฑ…์ž„์„ ๋„˜์–ด ํ”„๋ ˆ์  ํ…Œ์ด์…˜, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง, ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต ๋“ฑ ์•„ํ‚คํ…์ฒ˜ ์ „๋ฐ˜์—์„œ ์–ด๋–ป๊ฒŒ ์—ญํ• ์„ ๋ถ„๋ฆฌํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ๊ตฌ์„ฑํ•ด์•ผ ํ•˜๋Š”์ง€ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [6]. - [[๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„ (Domain-Driven Design, DDD)]] - ์—ฐ๊ฒฐ ์ด์œ : SRP๋ฅผ ์ค€์ˆ˜ํ•˜์—ฌ ์ฑ…์ž„์„ ๋ถ„ํ• ํ•  ๋•Œ ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ(๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ ๋“ฑ)์— ๋”ฐ๋ผ ๊ฒฝ๊ณ„๋ฅผ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด ๊ตฌ์กฐํ™”์˜ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค [7-9]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌํ•  ๋•Œ ๋‹จ์ˆœํ•œ ๊ธฐ์ˆ ์  ๊ธฐ์ค€์ด ์•„๋‹Œ, ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™๊ณผ ์šฉ์–ด(Ubiquitous Language)๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๋ชจ๋ธ๊ณผ ํด๋ž˜์Šค์˜ ์ฑ…์ž„์„ ๋ถ„๋ฐฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํ•™์Šตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [7, 8, 10]. #### [๊ด€๊ณ„ ์œ ํ˜• B (๊ตฌํ˜„ ํŒจํ„ด ๋ฐ ํƒ์ƒ‰ ์ „๋žต)] - [[์˜์กด์„ฑ ์ฃผ์ž… (Dependency Injection, DI)]] - ์—ฐ๊ฒฐ ์ด์œ : ๋‹จ์ผ ์ฑ…์ž„์„ ๊ฐ€์ง„ ์ž‘์€ ํด๋ž˜์Šค๋“ค์ด ์„œ๋กœ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ•ํ•œ ๊ฒฐํ•ฉ๋„๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๋„๋ก ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ตฌํ˜„ ๋„๊ตฌ์ด์ž ํŒจํ„ด์ž…๋‹ˆ๋‹ค [2, 11, 12]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ฐ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ž์‹ ์˜ ๋‹จ์ผ ์ฑ…์ž„์—๋งŒ ์ง‘์ค‘ํ•˜๋ฉด์„œ ๋‹ค๋ฅธ ๊ฐ์ฒด์™€์˜ ํ˜‘๋ ฅ์„ ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ตฌ์ฒด์ ์ธ ์„ค๊ณ„ ๊ธฐ๋ฒ•์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [3, 12, 13]. - [[ํ•˜ํ–ฅ์‹ ๋ฐ ์ƒํ–ฅ์‹ ์ ‘๊ทผ๋ฒ• (Top-down and Bottom-up Approaches)]] - ์—ฐ๊ฒฐ ์ด์œ : ๋ณต์žกํ•œ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์ฝ์„ ๋•Œ, ์‹œ์Šคํ…œ์˜ ํŠน์ • ํด๋ž˜์Šค๊ฐ€ ๋‹จ์ผ ์ฑ…์ž„์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ง€ํ‚ค๊ณ  ์žˆ๋Š”์ง€ ๋ถ„์„ํ•˜๊ธฐ ์œ„ํ•ด ์ •๋ณด์˜ ํ๋ฆ„์„ ์ถ”์ ํ•˜๋Š” ์ธ์ง€์  ํƒ์ƒ‰ ์ „๋žต์ž…๋‹ˆ๋‹ค [14]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ณต์šฉ API ๋“ฑ ์ตœ์ƒ์œ„ ์ง„์ž…์ ์—์„œ ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜(ํ•˜ํ–ฅ์‹) DB ์Šคํ† ๋ฆฌ์ง€์—์„œ ์—ญ์ถ”์ ํ•˜๋ฉฐ(์ƒํ–ฅ์‹) ๋ชจ๋“ˆ ๊ฐ„์˜ ์ฑ…์ž„ ๋ถ„๋ฐฐ ์ƒํƒœ๋ฅผ ํ•ด๋…ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ตํž ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [14]. ### Deeper Research Questions - ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์‹œ ํŠน์ • ํด๋ž˜์Šค๋‚˜ ๋ชจ๋“ˆ์ด ๋‹จ์ผ ์ฑ…์ž„(SRP)์„ ์œ„๋ฐ˜ํ•˜์—ฌ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ๋Š”์ง€ ์‹ ์†ํ•˜๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ํŒ๋‹จ ๊ธฐ์ค€์€ ๋ฌด์—‡์ธ๊ฐ€? [2, 4] - ๋Œ€๊ทœ๋ชจ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ์ฑ…์ž„์ด ํ˜ผ์žฌ๋œ ๊ฑฐ๋Œ€ํ•œ ํด๋ž˜์Šค(God Class)๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์„ ๋•Œ, SRP๋ฅผ ์ ์šฉํ•˜์—ฌ ์•ˆ์ „ํ•˜๊ฒŒ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ ์ง„์  ๋ฆฌํŒฉํ† ๋ง ์ „๋žต์€ ๋ฌด์—‡์ธ๊ฐ€? [3, 15] - ์‹œ์Šคํ…œ ์„ค๊ณ„์—์„œ '๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ(SoC)'์™€ '๋‹จ์ผ ์ฑ…์ž„ ์›์น™(SRP)'์„ ๋™์‹œ์— ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๊ธฐ์ˆ ์  ์ธํ”„๋ผ ์ฝ”๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ฒฉ๋ฆฌํ•ด์•ผ ํ•˜๋Š”๊ฐ€? [2, 6, 13] - SRP๋ฅผ ๊ณผ๋„ํ•˜๊ฒŒ ์ ์šฉํ•˜์—ฌ ์ง€๋‚˜์น˜๊ฒŒ ์ž‘์€ ํด๋ž˜์Šค๋“ค์ด ์ˆ˜์—†์ด ์ƒ์„ฑ๋˜์—ˆ์„ ๋•Œ, ๋Ÿฐํƒ€์ž„ ์ƒ์˜ ํ˜ธ์ถœ ํ๋ฆ„์„ ํšจ์œจ์ ์œผ๋กœ ์ถ”์ ํ•˜๊ณ  ์ดํ•ดํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? [4, 16, 17] - ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ํด๋ž˜์Šค๊ฐ€ ๋‹จ์ผ ์ฑ…์ž„์„ ๊ฐ€์ง€๊ฒŒ ๋  ๋•Œ, ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š” ๋‹จ์œ„ ํ…Œ์ŠคํŠธ(Unit Test)์˜ ๊ตฌ์กฐ์™€ ํ’ˆ์งˆ์€ ์–ด๋–ป๊ฒŒ ๋ณ€ํ™”ํ•˜๋Š”๊ฐ€? [1, 12, 18] ### Practical Application Contexts - **Implementation:** ๊ฐœ๋ฐœ์ž๊ฐ€ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋‚˜ ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•  ๋•Œ "์ด ์ฝ”๋“œ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•  ์ด์œ ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์ธ๊ฐ€?"๋ฅผ ์ ๊ฒ€ํ•˜์—ฌ, ๋ฐ์ดํ„ฐ ์˜์†์„ฑ ๋กœ์ง๊ณผ UI ๊ฒ€์ฆ ๋กœ์ง์ด ํ•œ ๊ณณ์— ์„ž์ด๋Š” ๊ฒƒ์„ ์˜ˆ๋ฐฉํ•ฉ๋‹ˆ๋‹ค [2]. - **System Design:** ์†Œํ”„ํŠธ์›จ์–ด ๋ชจ๋“ˆ์„ ์„ค๊ณ„ํ•  ๋•Œ ๊ฐ€์žฅ ๋จผ์ € ๊ณ ๋ คํ•˜๋Š” ๋งˆ์ธ๋“œ์…‹์œผ๋กœ ์ ์šฉ๋˜์–ด, ์ดํ›„ ์ธํ„ฐํŽ˜์ด์Šค ์„ค๊ณ„(ISP)๋‚˜ ์˜์กด์„ฑ ์—ญ์ „(DIP) ํŒจํ„ด์„ ์„ฑ๊ณต์ ์œผ๋กœ ๋„์ž…ํ•˜๊ธฐ ์œ„ํ•œ ํŠผํŠผํ•œ ํ† ๋Œ€๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค [1, 3]. - **Operation / Maintenance:** ์ˆ˜๋ฐฑ๋งŒ ์ค„์˜ ์ฝ”๋“œ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ ˆ๊ฑฐ์‹œ ์‹œ์Šคํ…œ์„ ์œ ์ง€๋ณด์ˆ˜ํ•  ๋•Œ, ๋ณ€๊ฒฝ ๋ฒ”์œ„๊ฐ€ ์˜ˆ์ƒ์น˜ ๋ชปํ•˜๊ฒŒ ํผ์ง€๋Š” ์›์ธ์„ ์ถ”์ ํ•˜๋ฉฐ ํด๋ž˜์Šค์˜ ์ฑ…์ž„์„ ์žฌ๋ถ„๋ฐฐ(Refactoring)ํ•˜๋Š” ๊ธฐ์ค€์ ์ด ๋ฉ๋‹ˆ๋‹ค [4, 19]. - **Learning Path:** ๋‚ฏ์„  ๋Œ€๊ทœ๋ชจ ์ฝ”๋“œ๋ฒ ์ด์Šค์— ์ง„์ž…ํ•˜๋Š” ์‹ ๊ทœ ๊ฐœ๋ฐœ์ž๊ฐ€ ํŠน์ • ํŒŒ์ผ์„ ์—ด์—ˆ์„ ๋•Œ, ํ•ด๋‹น ํŒŒ์ผ์˜ ๋‹จ์ผ ์ฑ…์ž„์ด ๋ฌด์—‡์ธ์ง€ ํŒŒ์•…ํ•˜๊ณ  ๋ฌธ์„œํ™”ํ•˜๋ฉฐ ์‹œ์Šคํ…œ์˜ ์ „์ฒด ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์„ ํ•™์Šตํ•ด ๋‚˜๊ฐ€๋Š” ๋ Œ์ฆˆ๋กœ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค [4, 14, 17]. - **My Project Relevance:** ์ฝ”๋“œ์˜ ๋ณต์žก์„ฑ์„ ๊ด€๋ฆฌํ•˜๊ณ  ํŒ€์› ๊ฐ„์˜ ํ˜‘์—…์„ ์›ํ™œํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด, ๊ฐ ๋ชจ๋“ˆ๊ณผ ํด๋ž˜์Šค์˜ ๋ช…ํ™•ํ•œ ๋ชฉ์ (Job)์„ ๋ถ€์—ฌํ•˜๊ณ  ์ฝ”๋“œ ๋…ํ•ด์— ๊ฑธ๋ฆฌ๋Š” ์ธ์ง€์  ๋ถ€ํ•˜๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค [2, 6]. ### Adjacent Topics - [[๋””์ž์ธ ํŒจํ„ด (Design Patterns)]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์— ๋”ฐ๋ผ ์ž˜๊ฒŒ ๋ถ„๋ฆฌ๋œ ๊ฐ์ฒด๋“ค์ด ์‹œ์Šคํ…œ ๋‚ด์—์„œ ์„œ๋กœ ์–ด๋–ป๊ฒŒ ์ƒ์„ฑ(Creational)๋˜๊ณ , ๊ตฌ์กฐ๋ฅผ ์ด๋ฃจ๋ฉฐ(Structural), ํ†ต์‹ (Behavioral)ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๊ตฌ์ฒด์ ์ธ ํ•ด๋ฒ•๊ณผ ํŒจํ„ด(Factory, Observer, Strategy ๋“ฑ)์„ ํ™•์žฅํ•˜์—ฌ ํ•™์Šตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [17, 20-22]. --- *Last updated: 2026-05-02*