User Tools

Site Tools


blog:why_code_regresses

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
blog:why_code_regresses [2026/01/11 14:01] – created hyjeongblog:why_code_regresses [2026/01/11 14:07] (current) – [회귀는 실력의 문제가 아니라 규모의 문제다] hyjeong
Line 11: Line 11:
 그리고 대부분의 개발자는 한 번쯤 이른바 //회귀(regression)// 를 경험한다. 그리고 대부분의 개발자는 한 번쯤 이른바 //회귀(regression)// 를 경험한다.
  
----+----
  
 ===== 코드는 텍스트가 아니라 ‘상태의 합’이다 ===== ===== 코드는 텍스트가 아니라 ‘상태의 합’이다 =====
Line 18: Line 18:
 그것은 수많은 **가정, 전제, 상태**가 얽혀 있는 구조물이다. 그것은 수많은 **가정, 전제, 상태**가 얽혀 있는 구조물이다.
  
-* 이 함수는 이런 값이 들어온다는 가정 +  * 이 함수는 이런 값이 들어온다는 가정 
-* 이 플래그는 여기서만 바뀐다는 믿음 +  * 이 플래그는 여기서만 바뀐다는 믿음 
-* 이 호출은 항상 이 순서로 이루어진다는 암묵적 전제+  * 이 호출은 항상 이 순서로 이루어진다는 암묵적 전제
  
 우리는 보통 **눈앞에 보이는 문제 하나**를 고친다. 우리는 보통 **눈앞에 보이는 문제 하나**를 고친다.
Line 28: Line 28:
 다른 곳에서 과거의 버그가 다시 살아난다. 다른 곳에서 과거의 버그가 다시 살아난다.
  
----+----
  
 ===== “이제 안 쓰는 코드”는 생각보다 잘 죽지 않는다 ===== ===== “이제 안 쓰는 코드”는 생각보다 잘 죽지 않는다 =====
Line 41: Line 41:
 특히 다음과 같은 코드들은 매우 위험하다. 특히 다음과 같은 코드들은 매우 위험하다.
  
-* 디버그를 위해 남겨둔 분기 +  * 디버그를 위해 남겨둔 분기 
-* 실험하다가 주석 처리한 로직 +  * 실험하다가 주석 처리한 로직 
-* “혹시 몰라서” 유지한 예외 처리+  * “혹시 몰라서” 유지한 예외 처리
  
 새 기능이 추가되는 순간, 새 기능이 추가되는 순간,
 이 유령 같은 코드들이 다시 호출되며 과거를 재현한다. 이 유령 같은 코드들이 다시 호출되며 과거를 재현한다.
  
----+----
  
 ===== 사람의 기억은 Git 로그보다 짧다 ===== ===== 사람의 기억은 Git 로그보다 짧다 =====
Line 59: Line 59:
 **사람의 기억은 설계 의도를 오래 보존하지 못하기 때문**이다. **사람의 기억은 설계 의도를 오래 보존하지 못하기 때문**이다.
  
-* 당시 왜 이런 구조를 선택했는지 +  * 당시 왜 이런 구조를 선택했는지 
-* 어떤 대안을 포기했는지 +  * 어떤 대안을 포기했는지 
-* 어떤 버그를 피하기 위한 우회였는지+  * 어떤 버그를 피하기 위한 우회였는지
  
 이런 맥락은 코드에 온전히 남아 있지 않다. 이런 맥락은 코드에 온전히 남아 있지 않다.
 그래서 우리는 **같은 실수를, 더 세련된 형태로 반복**한다. 그래서 우리는 **같은 실수를, 더 세련된 형태로 반복**한다.
  
----+----
  
 ===== 회귀는 실력의 문제가 아니라 규모의 문제다 ===== ===== 회귀는 실력의 문제가 아니라 규모의 문제다 =====
Line 78: Line 78:
 **시스템이 커졌다는 신호**에 가깝다. **시스템이 커졌다는 신호**에 가깝다.
  
-* 기능은 늘었고 +  * 기능은 늘었고 
-* 실행 경로는 많아졌으며 +  * 실행 경로는 많아졌으며 
-* 상호작용은 예측하기 어려워졌다+  * 상호작용은 예측하기 어려워졌다
  
 이 상태에서 과거의 안정성을 그대로 유지하는 것은 이 상태에서 과거의 안정성을 그대로 유지하는 것은
 개인의 실력이 아니라 **구조와 도구의 문제**다. 개인의 실력이 아니라 **구조와 도구의 문제**다.
  
----+----
  
 ===== 그래서 우리는 기록하고, 분리하고, 되돌릴 수 있어야 한다 ===== ===== 그래서 우리는 기록하고, 분리하고, 되돌릴 수 있어야 한다 =====
Line 92: Line 92:
 하지만 **되돌아가는 비용**은 줄일 수 있다. 하지만 **되돌아가는 비용**은 줄일 수 있다.
  
-* 무엇을 고쳤는지가 아니라 *왜* 고쳤는지를 남기는 커밋 메시지 +  * 무엇을 고쳤는지가 아니라 **왜** 고쳤는지를 남기는 커밋 메시지 
-* “이건 여기까지만 책임진다”는 명확한 경계 +  * “이건 여기까지만 책임진다”는 명확한 경계 
-* 언제든 이전 상태로 돌아갈 수 있는 구조+  * 언제든 이전 상태로 돌아갈 수 있는 구조
  
 이것들은 단순한 개발 습관이 아니다. 이것들은 단순한 개발 습관이 아니다.
 **시간과 싸우는 방법**에 가깝다. **시간과 싸우는 방법**에 가깝다.
  
----+----
  
 ===== 맺으며 ===== ===== 맺으며 =====
blog/why_code_regresses.1768107665.txt.gz · Last modified: by hyjeong