# [[Extreme Programming (XP)]] ## πŸ“Œ Brief 단기 Summary Extreme Programming(XP)은 μΌ„νŠΈ 벑(Kent Beck)이 μ°½μ‹œν•œ μ• μžμΌ μ†Œν”„νŠΈμ›¨μ–΄ 개발 λ°©λ²•λ‘ μœΌλ‘œ, 집쀑적인 νŒ€ ν˜‘μ—…κ³Ό μ½”λ“œ ν’ˆμ§ˆ μ œμ–΄λ₯Ό κ°•μ‘°ν•©λ‹ˆλ‹€ [1, 2]. 이 방법둠은 λ¦¬νŒ©ν† λ§μ΄ 개발 λΉ„μš©μ„ μ ˆκ°ν•œλ‹€κ³  μ£Όμž₯ν•˜λ©°, ν”„λ‘œμ νŠΈ 수λͺ… μ£ΌκΈ° μ „λ°˜μ— 걸쳐 "λ¬΄μžλΉ„ν•˜κ²Œ λ¦¬νŒ©ν† λ§(refactor mercilessly)"ν•  것을 κ·œμΉ™μœΌλ‘œ μ˜Ήν˜Έν•©λ‹ˆλ‹€ [3, 4]. λ˜ν•œ, ν…ŒμŠ€νŠΈ 주도 개발(TDD)κ³Ό κ²°ν•©ν•˜μ—¬ μ½”λ“œλ₯Ό μž‘κ³  μœ μ§€λ³΄μˆ˜ν•˜κΈ° μ‰¬μš΄ λ‹¨μœ„λ‘œ μ§€μ†μ μœΌλ‘œ λΆ„ν• ν•˜κ³  κ°œμ„ ν•˜λŠ” 과정을 μ†Œν”„νŠΈμ›¨μ–΄ 개발 주기의 ν•„μˆ˜μ μΈ λΆ€λΆ„μœΌλ‘œ μ—¬κΉλ‹ˆλ‹€ [5-7]. ## πŸ“– Core Content * **지속적이고 λ¬΄μžλΉ„ν•œ λ¦¬νŒ©ν† λ§ (Continuous & Merciless Refactoring):** XPλŠ” ν”„λ‘œμ νŠΈ 전체 수λͺ… μ£ΌκΈ° λ™μ•ˆ μ½”λ“œλ₯Ό λŠμž„μ—†μ΄ κ΅¬μ‘°ν™”ν•˜κ³  κ°œμ„ ν•˜λŠ” 것을 핡심 μ‹€μ²œλ²•μœΌλ‘œ μ‚ΌμŠ΅λ‹ˆλ‹€ [3, 4]. λ¦¬νŒ©ν† λ§μ€ λ‹¨μˆœνžˆ μ½”λ“œλ₯Ό μ •λ¦¬ν•˜λŠ” 것을 λ„˜μ–΄ 개발 λΉ„μš©μ„ μ ˆκ°ν•˜λŠ” 경제적 ν–‰μœ„λ‘œ κ°„μ£Όλ˜λ©°, 'ν•¨μˆ˜ μΆ”μΆœν•˜κΈ°(Extract Method)'와 같은 기법을 톡해 μ½”λ“œλ₯Ό 더 μ΄ν•΄ν•˜κΈ° 쉽고 μœ μ§€λ³΄μˆ˜ν•˜κΈ° μ‰¬μš΄ μž‘μ€ λ‹¨μœ„λ‘œ λΆ„ν• ν•©λ‹ˆλ‹€ [7]. * **ν…ŒμŠ€νŠΈ 주도 개발과의 κ²°ν•© (Integration with TDD):** XP 원칙에 뿌리λ₯Ό λ‘” ν…ŒμŠ€νŠΈ 주도 개발(TDD)κ³Ό ν•¨κ»˜ μ‹€μ²œλ  λ•Œ, λ‹¨μœ„ ν…ŒμŠ€νŠΈ(Unit Test)λŠ” λ‹¨μˆœν•œ ν’ˆμ§ˆ 보증 도ꡬλ₯Ό λ„˜μ–΄ μ½”λ“œ 섀계λ₯Ό μœ„ν•œ 도ꡬ가 λ©λ‹ˆλ‹€ [5]. XPλ₯Ό λΉ„λ‘―ν•œ μ• μžμΌ 방법둠을 μ§€μ§€ν•˜λŠ” μ‚¬λžŒλ“€μ€ λΉ λ₯Έ λ‹¨μœ„ ν…ŒμŠ€νŠΈλ₯Ό λ°”νƒ•μœΌλ‘œ μ•„μ£Ό μž‘μ€ ν”„λ‘œκ·Έλž¨ λ³€ν™˜μ„ 반볡적으둜 μˆ˜ν–‰ν•˜λŠ” λ¦¬νŒ©ν† λ§ 과정을 μ†Œν”„νŠΈμ›¨μ–΄ 개발 주기의 ν•„μˆ˜ λΆˆκ°€κ²°ν•œ λΆ€λΆ„μœΌλ‘œ μ„€λͺ…ν•©λ‹ˆλ‹€ [6]. * **사전 섀계와 λ¦¬νŒ©ν† λ§μ˜ κ· ν˜• (Upfront Design and Refactoring):** 극단적인 ν”„λ‘œκ·Έλž˜λ¨Έ(Extreme Programmers)듀은 ν”νžˆ μ½”λ“œλ₯Ό λ¨Όμ € μž‘μ„±ν•œ λ’€ λ¦¬νŒ©ν† λ§μ„ 톡해 ν˜•νƒœλ₯Ό μž‘μ•„κ°€λŠ” λ°©μ‹λ§Œμ„ μ˜Ήν˜Έν•˜λŠ” κ²ƒμœΌλ‘œ λ¬˜μ‚¬λ˜κΈ°λ„ ν•©λ‹ˆλ‹€ [8]. κ·ΈλŸ¬λ‚˜ μ‹€μ œλ‘œ 였직 λ¦¬νŒ©ν† λ§μ—λ§Œ μ˜μ‘΄ν•˜λŠ” 것은 κ°€μž₯ 효율적인 μž‘μ—… 방식이 μ•„λ‹ˆλ©°, XP ν”„λ‘œκ·Έλž˜λ¨Έλ“€ μ—­μ‹œ μ½”λ”©κ³Ό λ¦¬νŒ©ν† λ§μ„ μ‹œμž‘ν•˜κΈ° 전에 CRC μΉ΄λ“œ 등을 ν™œμš©ν•˜μ—¬ 타당성 μžˆλŠ” 초기 μ†”λ£¨μ…˜μ„ λ„μΆœν•˜λŠ” μˆ˜μ€€μ˜ 사전 섀계(Upfront Design)λ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€ [8]. * **νŒ€ ν˜‘μ—…κ³Ό μ œμ–΄ (Team Collaboration and Control):** XP μ‹€μ²œλ²•μ€ νŒ€μ΄ μžμ‹ μ˜ μž‘μ—…μ— λŒ€ν•œ ν†΅μ œλ ₯을 ν™•λ³΄ν•˜κ³ , κ°•λ ₯ν•˜κ²Œ ν˜‘μ—…ν•˜λ©°, μž‘λ™ν•˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μ§€μ†μ μœΌλ‘œ μ œκ³΅ν•  수 μžˆλ„λ‘ λ•λŠ” 역할을 ν•©λ‹ˆλ‹€ [2]. ## βš–οΈ Trade-offs & Caveats * **느린 ν…ŒμŠ€νŠΈ μ†λ„λ‘œ μΈν•œ 병λͺ© ν˜„μƒ:** XP ν™˜κ²½μ—μ„œμ˜ λ¦¬νŒ©ν† λ§μ€ μ•„μ£Ό μž‘μ€ μ½”λ“œλ₯Ό λ³€κ²½ν•˜κ³  μ¦‰μ‹œ 정확성을 κ²€μ¦ν•˜λŠ” 맀우 반볡적인(iterative) 사이클을 λ”°λ¦…λ‹ˆλ‹€ [6]. λ”°λΌμ„œ λ‹¨μœ„ ν…ŒμŠ€νŠΈκ°€ 맀우 λΉ λ₯΄κ²Œ μ‹€ν–‰λ˜μ§€ μ•ŠμœΌλ©΄, ν”„λ‘œκ·Έλž˜λ¨Έκ°€ ν…ŒμŠ€νŠΈ μ™„λ£Œλ₯Ό κΈ°λ‹€λ¦¬λŠ” 데 λ„ˆλ¬΄ λ§Žμ€ μ‹œκ°„μ„ ν—ˆλΉ„ν•˜κ²Œ λ˜μ–΄ 이 반볡적인 ν”„λ‘œμ„ΈμŠ€ μžμ²΄κ°€ μ‹€μš©μ„±μ„ μžƒκ²Œ λ˜λŠ” μ œμ•½μ΄ μžˆμŠ΅λ‹ˆλ‹€ [6]. * **사전 섀계 μƒλž΅μ˜ λΉ„νš¨μœ¨μ„±:** λ¦¬νŒ©ν† λ§λ§ŒμœΌλ‘œ μ™„λ²½ν•œ 섀계λ₯Ό λ„μΆœν•  수 μžˆλ‹€λŠ” μ˜€ν•΄κ°€ μžˆμœΌλ‚˜, μ•„λ¬΄λŸ° 섀계 없이 μ½”λ”© ν›„ λ¦¬νŒ©ν† λ§λ§Œ μ§„ν–‰ν•˜λŠ” 것은 κ°€μž₯ 효율적인 μž‘μ—… 방식이 μ•„λ‹™λ‹ˆλ‹€ [8]. XPμ—μ„œλ„ μ½”λ“œλ₯Ό μž‘μ„±ν•˜κΈ° μ „ CRC μΉ΄λ“œμ™€ 같은 도ꡬλ₯Ό μ‚¬μš©ν•΄ 초기 섀계λ₯Ό μˆ˜ν–‰ν•΄μ•Ό ν•˜λŠ” νƒ€ν˜‘μ μ΄ μ‘΄μž¬ν•©λ‹ˆλ‹€ [8]. ## πŸ”— Knowledge Connections ### Related Concepts #### [관계 μœ ν˜• A (개발 방법둠 및 μ‹€μ²œλ²•)] - [[Test-Driven Development (TDD)]] - μ—°κ²° 이유: XPλŠ” TDD 원칙과 깊이 μ—°κ΄€λ˜μ–΄ 있으며, λ¦¬νŒ©ν† λ§ μ‹œ μ½”λ“œκ°€ μ•ˆμ „ν•˜κ²Œ λ³€κ²½λ˜μ—ˆμŒμ„ μ¦‰κ°μ μœΌλ‘œ 보μž₯ν•˜λŠ” λ‹¨μœ„ ν…ŒμŠ€νŠΈκ°€ ν•„μˆ˜μ μž…λ‹ˆλ‹€ [5, 6]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: μžλ™ν™”λœ ν…ŒμŠ€νŠΈκ°€ μ–΄λ–»κ²Œ λ¦¬νŒ©ν† λ§μ˜ μ•ˆμ „λ§(Safety net)이자 섀계 λ„κ΅¬λ‘œ κΈ°λŠ₯ν•˜λŠ”μ§€ νŒŒμ•…ν•  수 μžˆμŠ΅λ‹ˆλ‹€. - [[Agile Software Development]] - μ—°κ²° 이유: XPλŠ” μ• μžμΌ μ†Œν”„νŠΈμ›¨μ–΄ 개발의 λŒ€ν‘œμ μΈ 방법둠 쀑 ν•˜λ‚˜λ‘œ, 지속적 톡합 및 배포, 반볡적 λ¦¬νŒ©ν† λ§μ„ ν†΅ν•œ 민첩성 확보λ₯Ό κ³΅μœ ν•©λ‹ˆλ‹€ [2, 6]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: λ³€ν™”ν•˜λŠ” μš”κ΅¬μ‚¬ν•­ μ†μ—μ„œ 지속적인 λ¦¬νŒ©ν† λ§μ΄ μ–΄λ–»κ²Œ μ• μžμΌμ˜ 핡심 κ°€μΉ˜λ₯Ό μ‹€ν˜„ν•˜λŠ”μ§€ 이해할 수 μžˆμŠ΅λ‹ˆλ‹€. #### [관계 μœ ν˜• B (섀계 및 κ΅¬ν˜„ 도ꡬ)] - [[Extract Method]] - μ—°κ²° 이유: XPμ—μ„œ λ³΅μž‘ν•œ ꡬ쑰λ₯Ό μž‘κ³  μœ μ§€λ³΄μˆ˜ν•˜κΈ° μ‰¬μš΄ λ‹¨μœ„λ‘œ μͺΌκ°€ λ•Œ ν•΅μ‹¬μ μœΌλ‘œ μ‚¬μš©λ˜λŠ” λ¦¬νŒ©ν† λ§ κΈ°λ²•μž…λ‹ˆλ‹€ [7]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: μ½”λ“œλ₯Ό μ–΄λ–»κ²Œ 더 μž‘κ³  응집도 높은 쑰각으둜 λ‚˜λˆ„μ–΄ 섀계적 κ°œμ„ μ„ μ΄λ£¨λŠ”μ§€ κ·Έ 절차적 λ©”μ»€λ‹ˆμ¦˜μ„ 배울 수 μžˆμŠ΅λ‹ˆλ‹€. - [[CRC Cards]] - μ—°κ²° 이유: XPμ—μ„œ 본격적인 μ½”λ”© 및 λ¦¬νŒ©ν† λ§ μ „, 객체의 μ±…μž„κ³Ό ν˜‘λ ₯을 κ°€λ³κ²Œ μ„€κ³„ν•˜μ—¬ 초기 μ•„ν‚€ν…μ²˜ λ°©ν–₯성을 μž‘λŠ” 데 μ‚¬μš©λ˜λŠ” λ„κ΅¬μž…λ‹ˆλ‹€ [8]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: 사전 섀계와 점진적 λ¦¬νŒ©ν† λ§ μ‚¬μ΄μ˜ κ· ν˜•μ„ λ§žμΆ”λŠ” 방법을 이해할 수 μžˆμŠ΅λ‹ˆλ‹€. ### Deeper Research Questions - Extreme Programmingμ—μ„œ κ°•μ‘°ν•˜λŠ” 'λ¬΄μžλΉ„ν•œ λ¦¬νŒ©ν† λ§(refactor mercilessly)' 원칙을 λŒ€κ·œλͺ¨μ˜ λ…Έν›„ν™”λœ λ ˆκ±°μ‹œ μ‹œμŠ€ν…œ(Legacy System)에 μ μš©ν•  λ•Œ 초기 ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό ν™•λ³΄ν•˜λŠ” μ ˆμ°¨λŠ” μ–΄λ–»κ²Œ κ΅¬μ„±λ˜μ–΄μ•Ό ν•˜λŠ”κ°€? - XP ν”„λ‘œμ„ΈμŠ€μ˜ λ¦¬νŒ©ν† λ§ 반볡 μ£ΌκΈ°μ—μ„œ λ‹¨μœ„ ν…ŒμŠ€νŠΈμ˜ μ‹€ν–‰ 속도가 μž„κ³„μΉ˜λ₯Ό λ„˜μ–΄ 느렀질 경우, 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ ν…ŒμŠ€νŠΈ 격리 및 μ•„ν‚€ν…μ²˜ κ°œμ„  기법은 무엇인가? - CRC μΉ΄λ“œλ₯Ό ν†΅ν•œ κ°€λ²Όμš΄ 사전 섀계(Upfront Design)κ°€ 이후 μ§„ν–‰λ˜λŠ” 반볡적 λ¦¬νŒ©ν† λ§μ˜ λ°©ν–₯μ„±κ³Ό μ–΄λ–»κ²Œ λ™κΈ°ν™”λ˜λ©°, 섀계적 결함을 쑰기에 λ°©μ§€ν•˜λŠ” 데 μ–΄λ–€ 역할을 ν•˜λŠ”κ°€? - 'ν•¨μˆ˜ μΆ”μΆœν•˜κΈ°(Extract Method)'와 같은 λ―Έμ‹œμ (micro) λ¦¬νŒ©ν† λ§ 기법듀이 XP νŒ€μ˜ 곡동 μ½”λ“œ μ†Œμœ κΆŒ(Collective Code Ownership) 및 μ½”λ“œ 리뷰 문화에 λ―ΈμΉ˜λŠ” 긍정적 μ‹œλ„ˆμ§€ νš¨κ³ΌλŠ” 무엇인가? - λΉ„μ¦ˆλ‹ˆμŠ€ μš”κ΅¬μ‚¬ν•­μ΄ κΈ‰λ³€ν•˜λŠ” ν™˜κ²½μ—μ„œ TDD와 XP의 λ¦¬νŒ©ν† λ§ 사이클이 μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜μ˜ μž₯기적 μœ μ—°μ„±(Extensibility)을 μ–΄λ–»κ²Œ 보μž₯ν•˜λŠ”κ°€? ### Practical Application Contexts - **Implementation:** μ½”λ“œλ₯Ό κ΅¬ν˜„ν•  λ•Œ, λ³΅μž‘ν•œ λ‘œμ§μ„ μž‘μ„±ν•œ 직후 'ν•¨μˆ˜ μΆ”μΆœν•˜κΈ°(Extract Method)' 기법을 μ μš©ν•˜μ—¬ μ½”λ“œμ˜ μ˜λ„λ₯Ό λͺ…ν™•νžˆ ν•˜κ³  크기λ₯Ό μž‘κ²Œ μœ μ§€ν•©λ‹ˆλ‹€ [7]. - **System Design:** μ΄ˆκΈ°λΆ€ν„° μ™„λ²½ν•œ ꡬ쑰λ₯Ό μ„€κ³„ν•˜λ € ν•˜κΈ°λ³΄λ‹€λŠ”, CRC μΉ΄λ“œλ₯Ό ν™œμš©ν•΄ 타당성 μžˆλŠ” 첫 번째 μ†”λ£¨μ…˜μ„ κ΅¬μƒν•œ λ’€, TDD와 지속적인 λ¦¬νŒ©ν† λ§μ„ 톡해 μ μ§„μ μœΌλ‘œ μ‹œμŠ€ν…œ 섀계λ₯Ό μ™„μ„±ν•΄ λ‚˜κ°‘λ‹ˆλ‹€ [8]. - **Operation / Maintenance:** κΈ°λŠ₯ μΆ”κ°€λ‚˜ 버그 μˆ˜μ •μ΄ ν•„μš”ν•  λ•Œ, λ¨Όμ € λ¦¬νŒ©ν† λ§μ„ 톡해 κΈ°μ‘΄ μ½”λ“œκ°€ 변경을 μˆ˜μš©ν•˜κΈ° μ‰¬μš΄ ꡬ쑰가 λ˜λ„λ‘ μ •λ¦¬ν•¨μœΌλ‘œμ¨ μœ μ§€λ³΄μˆ˜ λΉ„μš©μ„ μ ˆκ°ν•©λ‹ˆλ‹€ [3, 4]. - **Learning Path:** λ¦¬νŒ©ν† λ§ 원칙을 μ΄ν•΄ν•œ ν›„, TDDλ₯Ό ν•™μŠ΅ν•˜μ—¬ μ•ˆμ „ν•œ 변경을 보μž₯ν•˜λŠ” ν…ŒμŠ€νŠΈ μž‘μ„±λ²•μ„ 읡히고, μ΅œμ’…μ μœΌλ‘œ XP의 집쀑적인 νŒ€ ν˜‘μ—… 및 λ¬΄μžλΉ„ν•œ λ¦¬νŒ©ν† λ§ 사이클을 싀무에 μ μš©ν•˜λŠ” μˆœμ„œλ‘œ ν•™μŠ΅ν•©λ‹ˆλ‹€ [2, 5]. - **My Project Relevance:** ν˜„μž¬ μ§„ν–‰ 쀑인 ν”„λ‘œμ νŠΈμ—μ„œ κΈ°λŠ₯ κ΅¬ν˜„ 속도 μ €ν•˜λ₯Ό κ²ͺκ³  μžˆλ‹€λ©΄, XP의 지속적 λ¦¬νŒ©ν† λ§κ³Ό TDD 방식을 λ„μž…ν•˜μ—¬ μ½”λ“œμ˜ 가독성을 높이고 기술 λΆ€μ±„λ‘œ μΈν•œ 병λͺ© ν˜„μƒμ„ ν•΄μ†Œν•  수 μžˆμŠ΅λ‹ˆλ‹€. ### Adjacent Topics - [[Technical Debt]] - ν™•μž₯ λ°©ν–₯: λ¦¬νŒ©ν† λ§μ„ μ§€μ†ν•˜μ§€ μ•Šμ•„ μ½”λ“œκ°€ λΆ€νŒ¨ν•  λ•Œ λ°œμƒν•˜λŠ” λΉ„μš©μ  츑면을 ν•™μŠ΅ν•˜κ³ , XPκ°€ 이λ₯Ό μ–΄λ–»κ²Œ μƒν™˜ν•˜λŠ”μ§€ μ‘°μ‚¬ν•˜μ—¬ 경제적 정당성에 λŒ€ν•œ 이해λ₯Ό ν™•μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€. - [[Code Smells]] - ν™•μž₯ λ°©ν–₯: λ¬΄μžλΉ„ν•œ λ¦¬νŒ©ν† λ§μ˜ λŒ€μƒμ΄ λ˜λŠ” μ½”λ“œμ˜ ꡬ쑰적 결함 징후듀을 νŒŒμ•…ν•˜μ—¬, μ–Έμ œ λ¦¬νŒ©ν† λ§μ„ μˆ˜ν–‰ν•΄μ•Ό ν•˜λŠ”μ§€μ— λŒ€ν•œ 직관을 κΈ°λ₯Ό 수 μžˆμŠ΅λ‹ˆλ‹€. --- *Last updated: 2026-05-03*