# [[Code Rot (코드 부패 / 소프트웨어 부패)]]

## 📌 Brief Summary
코드 부패(Code Rot) 또는 소프트웨어 부패란 소프트웨어 개발 과정에서 지속적인 리팩토링 없이 코드 변경과 기능 추가가 누적되면서 초기 설계의 구조적 무결성이 점차 무너지고 복잡도가 상승하는 현상을 의미한다 [1, 2]. 이는 중복 코드, 건강하지 못한 의존성, 잘못된 책임 할당 등 코드 내의 혼란과 잡동사니가 증가하는 상태로 나타난다 [1]. 시간이 지남에 따라 코드를 읽고 설계를 파악하기 어려워지며, 설계 보존을 어렵게 만들어 부패 속도를 더욱 가속화한다 [3].

## 📖 Core Content
*   **원인 및 발생 과정:** 요구사항 변화나 단기적인 목표 달성을 위해 소프트웨어의 전체적인 설계를 완전히 이해하지 못한 채 코드를 지속적으로 변경할 때 발생한다 [2, 3]. 코드를 만지고 수정하는 사람이 많아질수록 코드 부패가 발생할 확률은 더욱 높아지며 [4], 이는 자연스러운 엔트로피 증가로 인해 소프트웨어가 체계적인 공학(engineering)에서 단순 해킹(hacking) 수준으로 가라앉는 과정이다 [2, 5].
*   **주요 증상:** 소프트웨어가 코드 부패를 겪고 있음을 알리는 대표적인 징후는 '코드 스멜(Code Smells)'이다 [6]. 구체적으로는 중복된 코드, 클래스나 패키지 간의 건강하지 못한 의존성, 클래스 책임의 불량한 할당, 하나의 메서드나 클래스에 너무 많은 책임이 부여되는 등의 형태로 나타난다 [1].
*   **부패의 누적 효과:** 코드의 구조 상실은 누적되는 성질이 있다 [3]. 코드를 읽어서 설계를 파악하기가 어려워지면 원래의 설계를 유지하기가 힘들어지고, 결과적으로 시스템의 쇠퇴와 부패는 더욱 빠른 속도로 통제하기 어렵게 진행된다 [3].
*   **대응 방안:** 리팩토링은 이러한 소프트웨어의 부패(decay)를 방지하고 자연스러운 엔트로피 증가에 저항하여 시스템의 유연성을 회복시키는 핵심 해결책이다 [2, 7]. 규칙적이고 지속적인 리팩토링은 코드의 형태를 올바르게 유지시키고 설계의 쇠퇴를 멈추게 한다 [3, 8].

## ⚖️ Trade-offs & Caveats
코드 부패를 해결하기 위해 리팩토링을 수행하는 것은 장기적인 유지보수성에 기여하지만, 단기적으로는 기능 추가나 버그 수정과 달리 표면적으로 드러나는 즉각적인 이득이나 새로운 기능을 제공하지 않는 것처럼 보일 수 있다 [9-11]. 부패를 걷어내기 위한 구조적 변경은 세심하게 진행하지 않으면 기존에 작동하던 기능에 예기치 않은 미묘한 버그나 회귀(regression)를 유발할 위험을 동반한다 [12, 13]. 

특히 테스트 코드가 없는 심하게 부패한 레거시 코드의 경우, 안전망 없이 공중 곡예를 하는 것과 같아 코드를 명확하게 정리하는 것 자체가 극도로 위험하고 어려운 작업이 된다 [12, 14, 15]. 또한, 코드의 부패 정도가 너무 심해 버그를 잡고 시스템을 안정화할 수 없을 지경에 이르렀다면, 무리하게 리팩토링을 시도하기보다는 처음부터 다시 작성(Rewrite)하는 편이 나을 수 있다 [16, 17]. 마감 기한이 임박한 상황에서는 리팩토링으로 인한 이점보다 지연으로 인한 비즈니스 손실이 클 수 있으므로 코드 부패 해결을 일시적으로 유보해야 할 때도 있다 [18, 19].

---
*Last updated: 2026-05-03*