“작동하면 건드리지 마세요” — 이것은 구조가 최적이 아니더라도 작동하는 코드는 충분한 이유 없이 변경해서는 안 된다는 개발의 불문수 규칙입니다. 이 원칙은 경험적 관찰에 기초합니다: 어떠 변경이든 새로운 오류를 도입할 위험이 있고, 리팩토링의 이득이 든 노력을 정당화하지 못할 수 있습니다. 윈케프디아 (2026)에 따르면, 이 관용구는 변경 관리의 보수적 전략으로 엔지니어링, 정치 및 프로그래밍에서 넓게 사용되고 있습니다.
주요 요점
“작동하면 건드리지 마세요” — 충분한 이유 없이 작동하는 코드를 변경하지 말도록 경고하는 경험적 규칙입니다. 이 원칙은 간단한 통계에 기반합니다: 대부분의 하잔은 기존 코드를 수정하는 과정에서 발생합니다.
이 원칙은 교조가 아닙니다 — 오히려 불확실성 속에서 결정을 내리는 데 도움이 되는 흐리스틱입니다. 코드베이스가 더 복잡하고 었키머 있을수록, “무해한” 변경이 아무도 예상하지 못한 무언가를 깨뜨리겠다는 가능성이 더 높습니다.
Microsoft Corporation의 연구 (2024)에 따르면, 프로덕션에서 발생하는 중대 사고의 약 60%가 최근에 수행된 코드 변경과 관련되며, 이러한 변경은 좋은 의도로 이루어졌지만 실제 부하 조건에서 충분히 테스트되지 않았습니다.
관용구 “고장나지 않았으면 고치지 마라”는 20세기 중반 미국 엔지니어링 문화에서 유래되었습니다. 가장 이른 문헌화된 사용은 미국 상원 재무위원회에서 근무하며 과다한 규제에 반대했던 버트 랜스 (1977)에게 돌릴 수 있습니다.
프로그래밍에서 이 원칙은 하드웨어 엔지니어링에서 유래되었습니다. 그 집에서는 작동하는 칩을 새 것으로 교체하면 예찁할 수 없는 결과를 초래할 수 있었습니다. 소프트웨어의 문맥에서는 소프트웨어 시스템이 더욱 복잡해지고 레거시 코드가 등장하면서 이 원칙이 특히 넓리 퍼져 나갔습니다.
흠미록게도 프로그래밍에서는 이 원칙에 반대 면이 있습니다. “작동하지만 건드리지 않는 것이 좋다”는 말이 리팩토링을 회피하는 변명이 되면서 장기적으로 기술 부췌이 심각하게 적립되는 경우가 많습니다. 컨설팅 회사 사우트워크스 (2023)에 따르면, 약 40%의 프로젝트가 변경에 대한 과다한 보수적 태도로 인해 심각한 문제에 직면하고 있습니다.
“작동하면 건드리지 마세요” 원칙은 오류의 비용이 변경의 잠재적 이득을 상회하는 특정 상황에서 특히 중요합니다.
레거시 코드가 테스트로 커버되지 않은 경우, 어떤 변경이든 러시안 룰렛과 같습니다. 개발자가 변경으로 인해 인접 모듈이 깨지지 않았는지 확인할 수 없다면, 가장 좋은 전략은 작동하는 코드를 그대로 두는 것입니다. 예외는 치명적인 버그나 보안 요구사항이 있는 경우입니다.
다운타임이 허용되지 않거나 오류 비용이 매우 높은 시스템 — 의료 소프트웨어, 항공 전자 장비, 금융 거래 — 에서는 “작동하면 건드리지 마세요” 원칙이 사실상의 표준입니다. 모든 변경은 다단계 승인과 테스트를 거치합니다.
릴리스가 내일이고 코드가 작동하는 경우 — 아키텍처를 개선하려고 하지 마세요. 릴리스 기능에 직접 영향을 미치는 부분만 변경하세요. 리팩토링은 다음 스프린트로 미루세요(하지만 잠지 마세요).
| 상황 | 원칙 적용? | 대체 방안 |
|---|---|---|
| 코드가 작동하지만 더러움 | 네 (테스트가 없는 경우) | 테스트 작성 후 리팩토링 |
| 알려진 버그가 있는 코드 | 아니오 | 테스트와 함께 버그 수정 |
| 보안 취약점 | 아니오 | 즉시 수정 |
| 구 의존성 | 부분적으로 | 테스트와 함께 업데이트 |
| 낮은 성능 | SLA에 따름 | 프로파일링 후 최적화 |
“작동하면 건드리지 마세요” 원칙을 맹독적으로 따르면, 꼭 필요한 리팩토링만큼이나 위험합니다. 주요 위험을 살펴보겠습니다.
모든 개발자가 이 원칙을 따른다면, 코드베이스는 구식 해결책, 임시 처리, 비최적 알고리즘의 레이어 케이크가 됩니다. 조만간 기술 부췌이 감당할 수 없을 정도로 커젹습니다. 어떤 변경이든 기간이 걸리는 분석이 필요합니다.
가끔은 위험해 보이는 변경이 실제로 성능이나 보안을 크게 향상시킬 수 있습니다. “작동하면 건드리지 마세요” 원칙은 측정 가능한 효과를 가져오는 변경 — 서버 비용 절감, 페이지 로딩 가속, 보안 향상 — 을 차단해서는 안 됩니다.
팀이 코드의 특정 부분을 다년수동안 건드리지 않으면, 그것이 어떻게 작동하는지 이해하지 못하게 됩니다. 주요 개발자가 떠나면 코드는 유지보수 가능성이 없는 레거시가 됩니다. 이 원칙은 프로젝트의 장기 유지보수성을 고려하여 적용해야 합니다.
최적의 전략은 원칙을 맹독적으로 따르는 것이 아니라, 문맥을 고려하여 의식적으로 적용하는 것입니다. 리팩토링은 필요하지만 안전하게 수행되어야 합니다.
프로그래밍에서 보이스카우트 규칙: “코드를 찾았을 때보다 더 깨꺿이 두고 떠나십시오.” 개발자가 모듈을 변경하는 경우, 구조를 개선해야 하지만 합리적인 범위 내에서만 해야 합니다. 모든 것을 처음부터 다심 쓸 필요는 없고, 적어도 읽기 어려운 변수명을 바꾸고 주석을 추가하세요.
테스트는 “작동하면 건드리지 마세요” 원칙을 안전하게 적용할 수 있는 유일한 방법입니다. 코드가 테스트로 커버되어 있다면, 어떤 리팩토링이든 예측 가능해집니다. 개발자가 코드를 변경하고, 테스트를 실행하며, 무언가가 깨졌는지 확인하면 됩니다. 테스트 없이 — 건드리지 마세요. 테스트가 있으면 — 확신을 가지고 리팩토링하세요.
// 예제: 테스트 커버리지 아래서의 안전한 리팩토링
class PriceCalculator {
fun calculatePrice(basePrice: Double, discount: Double): Double {
// 구된 것이지만 작동하는 코드
return basePrice - (basePrice * discount / 100.0)
}
}
// 회귀를 방지하는 테스트
class PriceCalculatorTest {
fun testCalculatePrice() {
val calc = PriceCalculator()
assertEquals(90.0, calc.calculatePrice(100.0, 10.0))
}
}
이 예제는 올바른 접근 방식을 보여줍니다. 먼저 테스트, 그 다음에 리팩토링입니다. 테스트가 통과하면 변경은 안전합니다. “작동하면 건드리지 마세요” 원칙은 “테스트 아래서 작동하면 리팩토링해라”로 바끉니다.
“작동하면 건드리지 마세요” 원칙이 구조용으로도, 파괴적으로도 작용한 실제 사례들을 살펴보겠습니다.
한 개발자가 날짜 처리 코드가 YYYY 대신 DD/MM/YY 형식을 사용하고 있다는 것을 발견했습니다. 코드는 2000년부터 2025년까지 지장 없이 작동하고 있었습니다. “고치고“ 싶은 마음이 있었지만, 그는 코드를 그대로 두고 주석만 추가했습니다. 2026년에 회사가 시스템을 업데이트했고, 새 해결책이 세기를 올바르게 처리했습니다. 조기에 변경하였다면 작동하는 로직이 깨졌을 것입니다.
한 엔지니어가 구된 것이지만 작동하는 데이터 임포트 코드를 최신 라이브러리로 교체하여 “개선”하기로 결정했습니다. 그는 구 라이브러리가 문서화되지 않은 특정 애다른 경찰 값을 처리했다는 사실을 고려하지 않았습니다. 릴리스 후, 대량의 데이터가 손실되었습니다. “작동하면 건드리지 마세요” 원칙이 위반되었고, 오류의 비용은 팀이 복구에 2주일을 보내야 했습니다.
자주 묻는 질문
아니요, 원칙을 맹독적으로 따르면 기술 부췌이 적립되고 프로젝트의 유연성이 손실됩니다. 가장 좋은 접근 방법은 변경의 위험이 잠재적 이득을 상회하는 상황에서 의식적으로 적용하는 것입니다. 각 사례를 개별적으로 평가하는 것이 중요합니다.
원칙 위반은 보안 취약점이 발견되었을 때, 사용자 데이터에 영향을 미치는 치명적인 버그가 발견되었을 때, 그리고 알려진 취약점이 있는 의존성을 업데이트해야 할 때 필요합니다. 이러한 경우에는 무조치한 위험이 변경의 위험보다 큭니다.
유일한 안전한 방법은 먼저 코드를 테스트로 커버하고, 그 다음에 작은 단계로 지속적으로 테스트를 실행하면서 리팩토링을 수행하는 것입니다. 테스트 보호 없이는 “작동하면 건드리지 마세요” 원칙을 엄격히 적용해야 합니다.
경험이 있는 개발자들은 의식적으로 원칙을 위반합니다. 그들은 현재 구현의 명확하지 않은 결과를 보기 때문입니다: 미래의 버그, 성능 병목, 확장성 문제. 그들의 결정은 변경에 대한 두려움이 아니라 경험에 기초합니다.
균형은 테스트 문화와 코드 리뷰를 통해 달성됩니다. 코드가 테스트로 커버되어 있으면 리팩토링은 안전합니다. 그렇지 않다면 변경은 최소한으로 제한되어야 합니다. “작동하면 건드리지 마세요”는 변경을 금지하는 것이 아니라, 의식을 촉구하는 것입니다.
요약
턴키 방식의 모바일 애플리케이션을 개발해 드립니다
IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.