--- category: Unified tags: [auto-consolidated, technical-documentation] title: [[Code Refactoring|Code Refactoring]] last_updated: 2026-05-02 --- # [[Code Refactoring|Code Refactoring]] ## ๐Ÿ“Œ Brief Summary > "์‹œ์Šคํ…œ์˜ ๊ฒ‰๋ณด๊ธฐ ๋™์ž‘(Behavior)์€ ์œ ์ง€ํ•œ ์ฑ„ ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ๊ฐœ์„ ํ•˜์—ฌ, ์ธ๊ฐ„์—๊ฒŒ๋Š” ๋” ์ฝ๊ธฐ ์‰ฝ๊ณ  ์‹œ์Šคํ…œ์—๊ฒŒ๋Š” ๋” ๋ณ€ํ™”์— ์œ ์—ฐํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ์ง€์†์ ์ธ ์ฝ”๋“œ ์ •์ œ ์ž‘์—…." --- ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง์€ ์ฃผ๋กœ ๋ณต์žกํ•˜๊ฒŒ ์–ฝํ˜€์žˆ๊ฑฐ๋‚˜ ์˜ค๋ž˜๋œ ๊ธฐ์กด ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๋” ์ž‘๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ์กฐ๊ฐ์œผ๋กœ ๋ถ„ํ•ดํ•˜์—ฌ ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค [1]. ์ด ๊ณผ์ •์€ ๊ธฐ์ˆ ์  ๋ถ€์ฑ„(Technical Debt)๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ํด๋ฆฐ ์ฝ”๋“œ(Clean Code) ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์ˆ˜์ ์œผ๋กœ ์ˆ˜ํ–‰๋œ๋‹ค [2, 3]. ๋ฆฌํŒฉํ† ๋ง์˜ ํ•ต์‹ฌ์€ ์‹œ์Šคํ…œ์˜ ์™ธ๋ถ€ ๋™์ž‘์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ์ˆœํ™˜ ์˜์กด์„ฑ๊ณผ ๊ฐ™์€ ์„ค๊ณ„์ƒ ๊ฒฐํ•จ์„ ๋ฐ”๋กœ์žก๊ณ , ์ง€์†์ ์ธ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ๊ฐ€๋Šฅํ•˜๋„๋ก ์ฝ”๋“œ ์กฐ์ง์„ ์žฌ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ ์žˆ๋‹ค [4, 5]. ## ๐Ÿ“– Core Content ๋ฆฌํŒฉํ† ๋ง์€ ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์†Œํ”„ํŠธ์›จ์–ด์˜ ์ƒ๋ช…๋ ฅ์„ ์œ ์ง€ํ•˜๋Š” ํ•ต์‹ฌ ํ™œ๋™์ž…๋‹ˆ๋‹ค. 1. **๋ชฉ์ ์˜ ๋ถ„๋ฆฌ (Separation of Concerns)**: * **๊ธฐ๋Šฅ ์ถ”๊ฐ€์™€ ๋ฆฌํŒฉํ† ๋ง์˜ ๋ถ„๋ฆฌ**: ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ๊ตฌํ˜„๊ณผ ์ฝ”๋“œ ๊ตฌ์กฐ ๊ฐœ์„ ์€ ๋ฐ˜๋“œ์‹œ ๋ณ„๋„์˜ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ(PR)๋กœ ์ง„ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„ž์ผ ๊ฒฝ์šฐ ๋ฆฌ๋ทฐ์–ด์˜ ์ธ์ง€ ๋ถ€ํ•˜๊ฐ€ ๊ธ‰์ฆํ•˜๊ณ  ๊ฒ€์ฆ์˜ ์ •ํ™•๋„๊ฐ€ ๋–จ์–ด์ง‘๋‹ˆ๋‹ค. * **์Šคํƒ€์ผ ์ˆ˜์ •์˜ ๋…๋ฆฝ์„ฑ**: ํฌ๋งทํŒ…์ด๋‚˜ ๋ช…์นญ ๋ณ€๊ฒฝ๊ณผ ๊ฐ™์€ ๋ฆฌํŒฉํ† ๋ง๋„ ๊ธฐ๋Šฅ ๋ณ€๊ฒฝ๊ณผ ์„ž์ง€ ์•Š๋Š” ๊ฒƒ์ด ์›์น™์ž…๋‹ˆ๋‹ค. 2. **์•ˆ์ „๋ง ํ™•๋ณด**: * ๋ฆฌํŒฉํ† ๋ง์˜ ์ „์ œ ์กฐ๊ฑด์€ ๊ฒฌ๊ณ ํ•œ **์ž๋™ํ™” ํ…Œ์ŠคํŠธ**์ž…๋‹ˆ๋‹ค. ๋กœ์ง ๊ฐœ์„  ํ›„์—๋„ ๊ธฐ์กด ๊ธฐ๋Šฅ์ด ์™„๋ฒฝํžˆ ์ž‘๋™ํ•จ์„ ์ฆ๋ช…ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 3. **ํšจ์œจ์  ์ „๋žต**: * ๋Œ€๊ทœ๋ชจ ๋ฆฌํŒฉํ† ๋ง์€ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•˜๊ธฐ๋ณด๋‹ค 200~400์ค„ ๋‹จ์œ„๋กœ ์ž˜๊ฒŒ ์ชผ๊ฐœ์–ด(Decomposition) ๋‹จ๊ณ„์ ์œผ๋กœ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๋ฆฌ๋ทฐ ํ’ˆ์งˆ๊ณผ ์†๋„ ๋ฉด์—์„œ ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. --- * **๋ฆฌํŒฉํ† ๋ง์˜ ๋ชฉ์ ๊ณผ ์ฝ”๋“œ์˜ ์œ ๊ธฐ์  ์„ฑ์žฅ** ์†Œํ”„ํŠธ์›จ์–ด ์ฝ”๋“œ๋Š” ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์œ ๊ธฐ์ ์œผ๋กœ ์„ฑ์žฅํ•˜๋ฉฐ ๋ณต์žกํ•˜๊ณ  ์ง€์ €๋ถ„ํ•ด์ง€๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์œผ๋ฏ€๋กœ, ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•˜๊ณ  ์‹œ์Šคํ…œ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฝ”๋“œ๋ฅผ ์ •๋ˆํ•˜๊ณ  ์ž‘๊ฒŒ ๋ถ„ํ•ดํ•˜๋Š” ๋ฆฌํŒฉํ† ๋ง์ด ํ•„์š”ํ•˜๋‹ค [1, 6]. ํŠน์ • ์˜์—ญ์—์„œ DRY(Don't Repeat Yourself) ์›์น™์ด๋‚˜ ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ(Separation of Concerns)๋ฅผ ์ ์šฉํ•˜์—ฌ ์ฝ”๋“œ์˜ ๋ช…ํ™•์„ฑ์„ ๋†’์ด๊ณ  ๋ณต์žก์„ฑ์„ ์ค„์ด๋Š” ๊ฒƒ์ด ๋ฆฌํŒฉํ† ๋ง์˜ ์ฃผ์š” ๋ชฉ์ ์ด๋‹ค [7]. * **'์ฝ”๋“œ ์•…์ทจ(Code Smells)' ํƒ์ง€์™€ ํ•ด๊ฒฐ** ๋ฆฌํŒฉํ† ๋ง์€ ์ฝ”๋“œ๋ฒ ์ด์Šค์— ๋‚ด์žฌ๋œ '์•…์ทจ(Code Smells)'๋ฅผ ์ฐพ์•„ ํ•ด๊ฒฐํ•˜๋Š” ๊ณผ์ •์„ ํฌํ•จํ•œ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ์žฅํ™ฉํ•œ ๋ฉ”์„œ๋“œ, ๋น„๋Œ€ํ•œ ํด๋ž˜์Šค, ๋„ˆ๋ฌด ๊ธด ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ชฉ๋ก๊ณผ ๊ฐ™์€ '๋น„๋Œ€ํ™”(Bloaters)' ํ˜„์ƒ๊ณผ ์Šค์œ„์น˜(Switch) ๋ฌธ ๋‚จ์šฉ์„ ํฌํ•จํ•˜๋Š” '๊ฐ์ฒด ์ง€ํ–ฅ ๋‚จ์šฉ(Object-Orientation Abusers)', ํฉํƒ„ ์ด ์ˆ˜์ˆ (Shotgun Surgery) ๊ฐ™์€ '๋ณ€๊ฒฝ ๋ฐฉํ•ด ์š”์ธ(Change Preventers)', ๋ถˆํ•„์š”ํ•œ ์ฃผ์„์ด๋‚˜ ์ค‘๋ณต ์ฝ”๋“œ ๊ฐ™์€ '๋ถˆํ•„์š”ํ•œ ์š”์†Œ(Dispensables)', ๊ทธ๋ฆฌ๊ณ  ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ง€๋‚˜์นœ ์‹œ๊ธฐ์‹ฌ(Feature Envy) ๊ฐ™์€ '๊ฒฐํ•ฉ ์š”์ธ(Couplers)'์ด ํฌํ•จ๋œ๋‹ค [2, 3]. * **์ฃผ์š” ๋ฆฌํŒฉํ† ๋ง ๊ธฐ๋ฒ•(Refactoring Techniques)** ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์„ธ๋ถ€ ๊ธฐ๋ฒ•๋“ค์ด ์‚ฌ์šฉ๋œ๋‹ค [2, 3]. * **๋ฉ”์„œ๋“œ ๊ตฌ์„ฑ(Composing Methods):** ๋ฉ”์„œ๋“œ ์ถ”์ถœ(Extract Method), ๋ณ€์ˆ˜ ์ถ”์ถœ(Extract Variable), ๋ฉ”์„œ๋“œ ์ธ๋ผ์ธํ™”(Inline Method) ๋“ฑ. * **๊ธฐ๋Šฅ ์ด๋™(Moving Features):** ๊ฐ์ฒด ๊ฐ„ ๋ฉ”์„œ๋“œ๋‚˜ ํ•„๋“œ ์ด๋™, ํด๋ž˜์Šค ์ถ”์ถœ(Extract Class) ๋“ฑ. * **๋ฐ์ดํ„ฐ ์กฐ์งํ™”(Organizing Data):** ํ•„๋“œ ์บก์Аํ™”, ๋งค์ง ๋„˜๋ฒ„๋ฅผ ๊ธฐํ˜ธ ์ƒ์ˆ˜๋กœ ๋Œ€์ฒด ๋“ฑ. * **์กฐ๊ฑด์‹ ๊ฐ„์†Œํ™”(Simplifying Conditional Expressions):** ์กฐ๊ฑด๋ฌธ ๋ถ„ํ•ด, ๋‹คํ˜•์„ฑ(Polymorphism)์„ ํ™œ์šฉํ•œ ์กฐ๊ฑด ๋Œ€์ฒด, ๊ฐ€๋“œ ํด๋กœ์ฆˆ(Guard Clauses) ๋„์ž… ๋“ฑ. * **์ผ๋ฐ˜ํ™” ์ฒ˜๋ฆฌ(Dealing with Generalization):** ์ธํ„ฐํŽ˜์ด์Šค ์ถ”์ถœ, ์ƒ์†๊ณผ ์œ„์ž„์˜ ์ƒํ˜ธ ๋Œ€์ฒด ๋“ฑ. * **๊ตฌ์กฐ์  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํŒจํ„ด** ์‹œ์Šคํ…œ ๊ตฌ์กฐ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•  ๋•Œ๋Š” ๊ณ ์ „์ ์ธ ํŒจํ„ด์ด ํ™œ์šฉ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ•œ ๊ณณ์— ์ƒˆ๋กœ์šด ์ถ”์ƒํ™”๋ฅผ ๋„์ž…ํ•œ ๋’ค ๋‹ค๋ฅธ ๋ชจ๋“  ์†Œ๋น„(consumer) ์ฝ”๋“œ๋“ค์„ ์ƒˆ๋กœ์šด ํŒจํ„ด์œผ๋กœ ์ผ์ œํžˆ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๋ฐฉ์‹์ด ์žˆ๋‹ค [8]. ์ด๋ฅผ ํ†ตํ•ด ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ์™€ ๊ฐ™์€ ๋กœ์ง์ด ์‹œ์Šคํ…œ์˜ ๋ชจ๋“  ์„œ๋น„์Šค์—์„œ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ์œ ์ง€๋˜๋„๋ก ์žฌ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค [9]. * **์ง€์†์ ์ด๊ณ  ์ ์ง„์ ์ธ ์‹ค์ฒœ** ๋ฆฌํŒฉํ† ๋ง์€ ํ•œ ๋ฒˆ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด(ํŠนํžˆ ๋ ˆ๊ฑฐ์‹œ)๋ฅผ ๋’ค์—Ž๋Š” ๋ฐฉ์‹์œผ๋กœ๋Š” ๊ถŒ์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค [10]. ๋Œ€์‹  ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ SOLID ์›์น™์„ ์ ์ง„์ ์œผ๋กœ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค [10]. ๋‚˜์•„๊ฐ€ ์ผํšŒ์„ฑ์— ๊ทธ์น˜์ง€ ์•Š๊ณ , ๊ฐœ๋ฐœ์ž๋“ค์ด ์ •๊ธฐ์ ์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์™€ ํŒŒ์ผ ๊ตฌ์กฐ๋ฅผ ์žฌ๊ฒ€ํ† ํ•˜์—ฌ ์ผ๊ด€๋œ ํ๋ฆ„์„ ์œ ์ง€ํ•˜๋„๋ก ํŒ€ ๋‹จ์œ„์˜ ์ •๊ธฐ์ ์ธ ๋ฆฌํŒฉํ† ๋ง ์„ธ์…˜์„ ์šด์˜ํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์€ ์ „๋žต์ด๋‹ค [5, 11]. ## โš–๏ธ Trade-offs & Caveats - **๋ฆฌ๋ทฐ ์ง€์—ฐ์˜ ๋ถ€์ž‘์šฉ**: ์ฝ”๋“œ ๋ฆฌ๋ทฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋„ˆ๋ฌด ๋А๋ฆฌ๋ฉด ๊ฐœ๋ฐœ์ž๋“ค์€ ๋ฆฌํŒฉํ† ๋ง์ด๋‚˜ ์ฝ”๋“œ ์ •๋ฆฌ๋ฅผ ๊ธฐํ”ผํ•˜๊ฒŒ ๋˜์–ด ์žฅ๊ธฐ์ ์œผ๋กœ ๊ธฐ์ˆ  ๋ถ€์ฑ„๊ฐ€ ๋ˆ„์ ๋ฉ๋‹ˆ๋‹ค. ๋น ๋ฅธ ๋ฆฌ๋ทฐ ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„๊ฐ€ ๊ฑด๊ฐ•ํ•œ ๋ฆฌํŒฉํ† ๋ง ๋ฌธํ™”๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. - **์‚ฌํ›„ ๋น„์šฉ vs ์‚ฌ์ „ ์„ค๊ณ„**: ๊ฐœ๋ฐœ ์™„๋ฃŒ ํ›„์˜ ๋ฆฌํŒฉํ† ๋ง์€ ๋น„์šฉ์ด ๋งŽ์ด ๋“ญ๋‹ˆ๋‹ค. ์•„ํ‚คํ…์ฒ˜ ๋ฆฌ๋ทฐ๋ฅผ ํ†ตํ•œ ์‚ฌ์ „ ์„ค๊ณ„ ๊ฒ€ํ† (Shift-Left)๊ฐ€ ๋Œ€๊ทœ๋ชจ ๋ฆฌํŒฉํ† ๋ง์„ ์˜ˆ๋ฐฉํ•˜๋Š” ๊ฐ€์žฅ ํšจ์œจ์ ์ธ ์ •์ฑ…์ž…๋‹ˆ๋‹ค. --- * **์„ฑ๊ธ‰ํ•œ ์ถ”์ƒํ™”(Premature Abstraction)์˜ ์œ„ํ—˜:** ์ค‘๋ณต์„ ์ค„์ด๊ธฐ ์œ„ํ•œ DRY ์›์น™์„ ๋ฌด๋ฆฌํ•˜๊ฒŒ ์ ์šฉํ•˜์—ฌ ์„ฑ๊ธ‰ํ•˜๊ฒŒ ์ถ”์ƒํ™”๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด ๋ถˆํ•„์š”ํ•œ ๋ณต์žก์„ฑ์ด ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ๋‹ค. ์ฝ”๋“œ๊ฐ€ ์ตœ์†Œ ๋‘ ๋ฒˆ ์ด์ƒ ์ค‘๋ณต๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•œ ํ›„(Rule of Three) ์ถ”์ƒํ™”๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋˜๋ฉฐ, ๋•Œ๋กœ๋Š” ์•ฝ๊ฐ„์˜ ์ฝ”๋“œ ์ค‘๋ณต์ด ๋ณต์žกํ•˜๊ฒŒ ๊ผฌ์ธ ์ถ”์ƒํ™”๋ณด๋‹ค ๊ฐ€๋…์„ฑ์ด ๋†’๊ณ  ๋œ ๋ณต์žกํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋งน๋ชฉ์ ์ธ ์›์น™ ์ค€์ˆ˜๋Š” ํ”ผํ•ด์•ผ ํ•œ๋‹ค [12]. * **์ „๋ฉด ์žฌ์ž‘์„ฑ(Complete Rewrite)์˜ ๋น„ํšจ์œจ์„ฑ:** ๊ทœ๋ชจ๊ฐ€ ํฐ ๋ ˆ๊ฑฐ์‹œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋‹จ๋ฒˆ์— ์ „์ฒด ๋ฆฌํŒฉํ† ๋งํ•˜๋ ค๋Š” ์‹œ๋„๋Š” ์‹คํŒจํ•  ํ™•๋ฅ ์ด ๋†’๋‹ค [10]. ์„ค๊ณ„ ์ดˆ๊ธฐ์ธ ์•„ํ‚คํ…์ฒ˜ ๋‹ค์ด์–ด๊ทธ๋žจ ๋‹จ๊ณ„์—์„œ ๋‹ค์ด์–ด๊ทธ๋žจ์„ ๊ณ ์น˜๋Š” ๊ฒƒ์€ ์ €๋ ดํ•˜์ง€๋งŒ, ์ด๋ฏธ ์ž‘์„ฑ๋œ ๋Œ€๊ทœ๋ชจ ์ฝ”๋“œ๋ฅผ ์ „๋ถ€ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์€ ๋ง‰๋Œ€ํ•œ ๋น„์šฉ๊ณผ ์‹œ๊ฐ„์ด ์†Œ๋ชจ๋˜๋Š” ํŠธ๋ ˆ์ด๋“œ์˜คํ”„๊ฐ€ ์žˆ๋‹ค [13]. * **์˜ค๋ž˜๋œ ๋ ˆ๊ฑฐ์‹œ ๋ธ”๋ก์˜ ๋ฆฌ์Šคํฌ:** ์•„๋ฌด๋„ ์†๋Œ€์ง€ ๋ชปํ•œ ํฌ๊ณ  ๋ณต์žกํ•œ ์ฝ”๋“œ ๋ธ”๋ก(๊ฐ€์žฅ ๊ธด ์ฝ”๋“œ ๋ธ”๋ก)์€ ์„ฃ๋ถˆ๋ฆฌ ๋ฆฌํŒฉํ† ๋งํ•˜๊ธฐ ๋‘๋ ค์šด ๋Œ€์ƒ์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋‹ค๋ฅธ ์ฝ”๋“œ์— ๋น„ํ•ด ์—‰๋ง์ผ ๊ฐ€๋Šฅ์„ฑ์ด ๋งค์šฐ ๋†’์•„ ์ˆ˜์ • ์‹œ ์‹œ์Šคํ…œ ์•ˆ์ •์„ฑ์— ์˜ํ–ฅ์„ ๋ฏธ์น  ๋ฆฌ์Šคํฌ๊ฐ€ ๋”ฐ๋ฅธ๋‹ค [14]. ## ๐Ÿ”— Knowledge Connections - [[Technical-Debt|Technical Debt]]: ๋ฆฌํŒฉํ† ๋ง์ด ์ƒํ™˜ํ•˜๊ณ ์ž ํ•˜๋Š” ๋น„์šฉ. - Automated Testing: ๋ฆฌํŒฉํ† ๋ง์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ์•ˆ์ „๋ง. - Code Health: ๋ฆฌํŒฉํ† ๋ง์˜ ๊ถ๊ทน์ ์ธ ์ง€ํ–ฅ์ . - Single-purpose PR: ๋ฆฌํŒฉํ† ๋ง ์‹œ ์ค€์ˆ˜ํ•ด์•ผ ํ•  PR ์ •์ฑ…. - [[Architecture Review (แ„‹แ…กแ„แ…ตแ„แ…ฆแ†จแ„Žแ…ฅ แ„†แ…ตแ†พ แ„‰แ…ฅแ†ฏแ„€แ…จ แ„…แ…ตแ„‡แ…ฒ)|Architecture Review]]: ๋Œ€๊ทœ๋ชจ ๋ฆฌํŒฉํ† ๋ง์„ ์˜ˆ๋ฐฉํ•˜๋Š” ์„ ์ œ์  ๋Œ€์‘. --- --- ### Related Concepts #### [์ฝ”๋“œ ํ’ˆ์งˆ ๋ฐ ๋ถ„์„ ๊ธฐ์ค€] - [[์ฝ”๋“œ ์•…์ทจ (Code Smells)]] - ์—ฐ๊ฒฐ ์ด์œ : ๋ฆฌํŒฉํ† ๋ง์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ์ง€์ (๋น„๋Œ€ํ•œ ํด๋ž˜์Šค, ์žฅํ™ฉํ•œ ๋ฉ”์„œ๋“œ, ์ค‘๋ณต ์ฝ”๋“œ ๋“ฑ)์„ ์‹๋ณ„ํ•˜๋Š” ๊ทผ๋ณธ์ ์ธ ๊ธฐ์ค€์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [2, 3]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋Œ€๊ทœ๋ชจ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์ฝ์„ ๋•Œ ์–ด๋–ค ํ˜•ํƒœ์˜ ์ฝ”๋“œ๊ฐ€ ๊ธฐ์ˆ ์  ๋ถ€์ฑ„๋ฅผ ์œ ๋ฐœํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๋ฌด์—‡๋ถ€ํ„ฐ ๋ฆฌํŒฉํ† ๋งํ•ด์•ผ ํ•˜๋Š”์ง€ ๊ตฌ์ฒด์ ์ธ ์ฆ์ƒ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค. - [[ํด๋ฆฐ ์ฝ”๋“œ (Clean Code)]] - ์—ฐ๊ฒฐ ์ด์œ : ์ง€์†์ ์ธ ๋ฆฌํŒฉํ† ๋ง ์ž‘์—…์ด ๊ถ๊ทน์ ์œผ๋กœ ์ง€ํ–ฅํ•˜๋Š” ๋ชฉํ‘œ์ด์ž ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [2, 3]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ๋†’๊ณ  ๊ฐ€๋…์„ฑ์ด ์ข‹์€ ์ฝ”๋“œ๋ž€ ๋ฌด์—‡์ธ์ง€, ํŒ€ ์ฐจ์›์—์„œ ์–ด๋–ค ์ฝ”๋“œ ํ’ˆ์งˆ์„ ์ง€ํ–ฅํ•ด์•ผ ํ•˜๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค. #### [์„ค๊ณ„ ์›์น™ ๋ฐ ํ•ด๋ฒ• ํŒจํ„ด] - [[DRY ์›์น™ (Don't Repeat Yourself)]] - ์—ฐ๊ฒฐ ์ด์œ : ๋…ผ๋ฆฌ๋‚˜ ์ •๋ณด์˜ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฆฌํŒฉํ† ๋ง์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ๊ฐ€์žฅ ์šฐ์„ ์ ์œผ๋กœ ๊ณ ๋ ค๋˜๋Š” ํ•ต์‹ฌ ์„ค๊ณ„ ์›์น™์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [7, 15]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ฉ”์„œ๋“œ ์ถ”์ถœ์ด๋‚˜ ๋ฒ ์ด์Šค ํด๋ž˜์Šค ํ™œ์šฉ ๋“ฑ์„ ํ†ตํ•ด ๋…ผ๋ฆฌ์  ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๋Š” ์‹ค๋ฌด์  ํŒ๋‹จ ๊ธฐ์ค€์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋‹ค [16]. - [[SOLID ์›์น™]] - ์—ฐ๊ฒฐ ์ด์œ : ๋ ˆ๊ฑฐ์‹œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฆฌํŒฉํ† ๋งํ•˜๊ฑฐ๋‚˜ ์ ์ง„์ ์œผ๋กœ ๊ฐœ์„ ํ•  ๋•Œ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ์œ ์—ฐ์„ฑ์„ ๋†’์ด๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ์˜ 5๊ฐ€์ง€ ๊ฐ€์ด๋“œ๋ผ์ธ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [10, 17]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์ด๋‚˜ ์˜์กด์„ฑ ์—ญ์ „ ๋“ฑ์„ ํ†ตํ•ด ์ฝ”๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ถ„๋ฆฌํ•˜๊ณ  ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•œ ๊ณ„์ธต์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค [10, 18]. - [[๋””์ž์ธ ํŒจํ„ด (Design Patterns)]] - ์—ฐ๊ฒฐ ์ด์œ : ๋ฆฌํŒฉํ† ๋ง ์ค‘ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ๊ตฌ์กฐ์  ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋„์ž…ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„์˜ ํ‘œ์ค€ ํ…œํ”Œ๋ฆฟ(์ƒ์„ฑ, ๊ตฌ์กฐ, ํ–‰์œ„ ํŒจํ„ด)์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [19, 20]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์กฐ๊ฑด๋ฌธ ๋‚จ์šฉ์„ ๋‹คํ˜•์„ฑ์œผ๋กœ ๋ฐ”๊พธ๊ฑฐ๋‚˜, ๊ฐ์ฒด ๊ฐ„ ํ†ต์‹ ์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ์•„ํ‚คํ…์ฒ˜ ํ•ด๋ฒ•(์˜ˆ: Factory, Strategy, Observer)์„ ์ ์šฉํ• ์ง€ ๊ตฌ์ฒด์  ์•„์ด๋””์–ด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค [21, 22]. ### Deeper Research Questions - ์ฝ”๋“œ๋ฒ ์ด์Šค ๋‚ด ํŠน์ • ์˜์—ญ์ด ๋ฆฌํŒฉํ† ๋ง์ด ํ•„์š”ํ•  ๋งŒํผ '๊ธฐ์ˆ ์  ๋ถ€์ฑ„'๊ฐ€ ๋ˆ„์ ๋˜์—ˆ๋Š”์ง€๋ฅผ ์ •๋Ÿ‰์ , ์ •์„ฑ์ ์œผ๋กœ ์ง„๋‹จํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ๋ฉ”ํŠธ๋ฆญ(Metric)์€ ๋ฌด์—‡์ธ๊ฐ€? - ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๋ ค๋Š” DRY ์›์น™๊ณผ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ ์‚ฌ์ด์—์„œ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ, '์„ฑ๊ธ‰ํ•œ ์ถ”์ƒํ™”(Premature abstraction)'๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•œ ๋ช…ํ™•ํ•œ ์‹ค๋ฌด ์ง€์นจ์€ ์–ด๋–ป๊ฒŒ ์„ธ์šธ ์ˆ˜ ์žˆ๋Š”๊ฐ€? - ๊ฐ€๋™ ์ค‘์ธ ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ์—์„œ ๋ฆฌํŒฉํ† ๋ง์„ ์ง„ํ–‰ํ•  ๋•Œ, ์‹œ์Šคํ…œ์˜ ์™ธ๋ถ€ ๋™์ž‘์ด๋‚˜ ๊ธฐ์กด ํด๋ผ์ด์–ธํŠธ API ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํŒŒ๊ดดํ•˜์ง€ ์•Š๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ๋‚ด๋ถ€ ๋กœ์ง๋งŒ ์ ์ง„์ ์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก ์€ ๋ฌด์—‡์ธ๊ฐ€? - ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ํฌ๊ธฐ๊ฐ€ ๋ฐฉ๋Œ€ํ•œ ํ™˜๊ฒฝ์—์„œ, ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์˜ ์†๋„๋ฅผ ์ €ํ•˜์‹œํ‚ค์ง€ ์•Š์œผ๋ฉด์„œ ํŒ€์˜ ์ผ์ƒ์ ์ธ ์Šคํฌ๋Ÿผ ์›Œํฌํ”Œ๋กœ์šฐ ๋‚ด์— '์ •๊ธฐ์ ์ธ ๋ฆฌํŒฉํ† ๋ง ์„ธ์…˜'์„ ์–ด๋–ป๊ฒŒ ์กฐํ™”๋กญ๊ฒŒ ํ†ตํ•ฉํ•  ๊ฒƒ์ธ๊ฐ€? - ๋ฆฌํŒฉํ† ๋งํ•  ์ฝ”๋“œ๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ์ˆ˜์ •์•ˆ์„ ์ œ์•ˆํ•˜๋Š” ์ž๋™ํ™”๋œ AI ์ฝ”๋“œ ๋ถ„์„ ๋„๊ตฌ(์˜ˆ: Qodo, DeepSource ๋“ฑ)๊ฐ€ ์ง€๋‹Œ ํ•œ๊ณ„์ ์€ ๋ฌด์—‡์ด๋ฉฐ, ์ธ๊ฐ„ ๊ฐœ๋ฐœ์ž์˜ ์•„ํ‚คํ…์ฒ˜์  ํŒ๋‹จ์ด ๊ฐœ์ž…๋˜์–ด์•ผ ํ•˜๋Š” ์˜์—ญ์€ ์–ด๋””์ธ๊ฐ€? ### Practical Application Contexts - **Implementation:** ๋น„๋Œ€ํ•ด์ง„ ๋ฉ”์„œ๋“œ์—์„œ ๋ณ€์ˆ˜๋ฅผ ์ถ”์ถœ(Extract Variable)ํ•˜๊ฑฐ๋‚˜, ์ค‘์ฒฉ๋œ ๋‹ค์ค‘ ์กฐ๊ฑด๋ฌธ์„ ๊ฐ€๋“œ ํด๋กœ์ฆˆ(Guard Clauses)๋ฅผ ์‚ฌ์šฉํ•ด ๋ถ„ํ•ดํ•จ์œผ๋กœ์จ ๋กœ์ง์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๋Š” ์‹ค์ œ ๊ตฌํ˜„ ์ž‘์—…์— ์ง์ ‘ ์ ์šฉ๋œ๋‹ค [2, 3]. - **System Design:** ํ•˜๋‚˜์˜ ๊ฑฐ๋Œ€ํ•œ ๋ฉ์–ด๋ฆฌ(Monolith)๋กœ ๋ฌถ์ธ ๋ ˆ๊ฑฐ์‹œ ์‹œ์Šคํ…œ์„, ์ „์ฒด ์žฌ์ž‘์„ฑ ์—†์ด ์ธํ„ฐํŽ˜์ด์Šค์™€ ์ฑ…์ž„์„ ๋ถ„๋ฆฌํ•˜๋Š” ์ ์ง„์ ์ธ ๋ฆฌํŒฉํ† ๋ง์„ ํ†ตํ•ด ๋А์Šจํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋œ ์„ค๊ณ„๋กœ ์œ ๋„ํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ด๋‹ค [10]. - **Operation / Maintenance:** ๋ฌธ์ œ์„ฑ ์žˆ๋Š” ์ข…์†์„ฑ์ด ์ˆœํ™˜ ์˜์กด์„ฑ(Cyclic Dependencies)์œผ๋กœ ๊ตณ์–ด์ง€๊ธฐ ์ „์—, ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋‹จ๊ณ„๋‚˜ ์œ ์ง€๋ณด์ˆ˜ ๊ณผ์ •์—์„œ ์„ ์ œ์ ์œผ๋กœ ๋ฆฌํŒฉํ† ๋งํ•˜์—ฌ ์‹œ์Šคํ…œ์˜ ์•ˆ์ •์„ฑ๊ณผ ์šด์˜์„ฑ์„ ๋ณดํ˜ธํ•œ๋‹ค [4, 5]. - **Learning Path:** ํฌ๊ณ  ๋ณต์žกํ•œ ๋‚ฏ์„  ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ํ•™์Šตํ•  ๋•Œ, '์•„๋ฌด๋„ ๋ฆฌํŒฉํ† ๋งํ•˜์ง€ ์•Š๊ณ  ๋ฐฉ์น˜๋œ ๊ฐ€์žฅ ๊ธด ์ฝ”๋“œ ๋ธ”๋ก'์„ ์ฐพ์•„ ๊ทธ ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๊ณ  ๊ฐœ์„  ๋ฐฉํ–ฅ์„ ๊ตฌ์ƒํ•ด ๋ณด๋Š” ํ›ˆ๋ จ์„ ํ†ตํ•ด ์ฝ”๋“œ ๋ฆฌ๋”ฉ ๋Šฅ๋ ฅ์„ ๋‹จ๋ จํ•  ์ˆ˜ ์žˆ๋‹ค [1, 14]. - **My Project Relevance:** ๋ฐฉ๋Œ€ํ•œ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ๋ฆฌ๋ทฐํ•  ๋•Œ, ์ž‘์„ฑ๋œ ์ฝ”๋“œ๊ฐ€ ๊ธฐ์กด ์•„ํ‚คํ…์ฒ˜๋ฅผ ์œ„๋ฐ˜ํ•˜์ง€ ์•Š๋Š”์ง€, ๋˜๋Š” ํ•œ ๊ณณ์—์„œ ๋„์ž…๋œ ์ถ”์ƒํ™” ํŒจํ„ด์— ๋งž์ถฐ ๋‹ค๋ฅธ ๊ด€๋ จ ์ฝ”๋“œ๋“ค์ด ์ผ๊ด€๋˜๊ฒŒ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜(Refactor) ๋˜์—ˆ๋Š”์ง€ ์ ๊ฒ€ํ•˜๋Š” ๊ธฐ์ค€์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค [8, 9]. ### Adjacent Topics - [[์ฝ”๋“œ ๋ฆฌ๋ทฐ (Code Review)]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ํƒ€์ธ์ด ์ˆ˜์ •ํ•œ ์ฝ”๋“œ๋ฅผ ๊ฒ€ํ† ํ•˜๋ฉด์„œ ๊ตฌ์กฐ ๊ฐœ์„ , ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐœ์ˆ˜ ์ถ•์†Œ ๋“ฑ ์ž ์žฌ์ ์ธ ๋ฆฌํŒฉํ† ๋ง ๋ฐฉํ–ฅ์„ฑ์„ ์ œ์•ˆํ•˜๊ณ  ๋…ผ์˜ํ•˜๋Š” ํŒ€ ๋‚ด ํ’ˆ์งˆ ๋ณด์ฆ ๊ณผ์ •์œผ๋กœ ์ง€์‹์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค [23, 24]. - [[๋ ˆ๊ฑฐ์‹œ ๋ชจ๋”๋‹ˆ์ œ์ด์…˜ (Legacy Modernization)]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋‹จ์ผ ํ•จ์ˆ˜๋‚˜ ํด๋ž˜์Šค์˜ ๊ตฌ์กฐ ๊ฐœ์„ ์„ ๋„˜์–ด์„œ, ์˜ค๋ž˜๋œ ์‹œ์Šคํ…œ์„ ํ˜„๋Œ€์  ์•„ํ‚คํ…์ฒ˜(๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค, ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ ๋“ฑ)๋กœ ์ „ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜ํ–‰๋˜๋Š” ๊ฑฐ์‹œ์ ์ด๊ณ  ์ „๋ฉด์ ์ธ ์‹œ์Šคํ…œ ๋ฆฌํŒฉํ† ๋ง(Re-architecture) ๊ณผ์ •์œผ๋กœ ํ™•์žฅํ•ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค [25, 26]. --- *Last updated: 2026-05-02* ## ๐Ÿงช ๊ฒ€์ฆ ์ƒํƒœ (Validation) - **์ •๋ณด ์ƒํƒœ:** draft - **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** A - **๊ฒ€ํ†  ์ด์œ :** Datacollector์—์„œ ์ž๋™ ์ถ”์ถœ๋œ ์œ„ํ‚ค ๋ฐ์ดํ„ฐ์˜ ์ดˆ๊ธฐ ํ†ตํ•ฉ. ## ๐Ÿงฌ ์ค‘๋ณต ๊ฒ€์‚ฌ (Duplicate Check) - **๊ธฐ์กด ์œ ์‚ฌ ๋ฌธ์„œ:** None - **์ฒ˜๋ฆฌ ๋ฐฉ์‹:** CREATE - **์ฒ˜๋ฆฌ ์ด์œ :** ์‹ ๊ทœ ์ง€์‹ ์ฒด๊ณ„ ๋„์ž