잡담··6 min read

1년 전에 쓴 내 코드를 다시 읽으면

레거시 코드 리팩토링하다가 범인이 나였다. git blame이 이렇게 무서운 명령어였나.

git blame을 치는 순간

레거시 코드를 리팩토링하고 있었다. 도저히 이해가 안 되는 함수가 하나 있었다. 변수명은 temp2, 주석은 없고, if문이 4단계로 중첩되어 있었다. 대체 누가 이걸 이렇게 짠 거지.

git blame을 쳤다.

범인은 나였다. 1년 2개월 전의 나. 커밋 메시지는 "fix: 급한 수정"이었다.

(그때 뭐가 그렇게 급했는지 기억도 안 난다.)

과거의 나와 대화하고 싶다

진심으로 1년 전의 나한테 묻고 싶은 게 있다. 왜 이렇게 했어? 어떤 맥락에서 이게 최선이라고 판단한 거야?

근데 생각해보면 답은 뻔하다. 급해서. 일정이 빡빡해서. "나중에 고치지 뭐" 하면서. 그 나중이 1년 뒤가 될 줄은 몰랐겠지.

내가 찾은 문제점 목록:

  • 같은 로직이 3군데에 복붙되어 있었다
  • 에러 핸들링이 catch 안에서 console.log만 찍고 있었다
  • 타입이 전부 any였다 (이건 진짜 변명의 여지가 없다)
  • 매직 넘버 86400이 아무 설명 없이 박혀 있었다 (초 단위 하루라는 걸 알아내는 데 4분 걸렸다)

근데 이상하게 안심도 된다

처음에는 창피했다. 이걸 내가 짰다고? 근데 좀 시간이 지나니까 이상하게 안심이 됐다.

1년 전 코드가 지금 보면 형편없다는 건, 그만큼 내가 성장했다는 뜻이니까. 만약 1년 전 코드를 보고 "아 괜찮은데?" 하면 그게 더 무서운 거다. 1년 동안 제자리였다는 뜻이니까.

성장의 증거가 이런 식으로 나타날 줄은 몰랐다. 과거의 코드를 보고 소름끼치는 게 성장이라니.

지금 코드도 1년 뒤에는 똑같을까

이게 진짜 무서운 생각이다.

지금 내가 "깔끔하게 잘 짰다"고 생각하는 코드도 1년 뒤에는 "이게 뭐야" 하게 될 확률이 높다. 어쩌면 확실하다.

그러면 지금 뭘 해야 하나. 완벽한 코드를 짜려고 2주를 쓰나? 아니다. 어차피 미래의 내가 보면 부족할 거다. 그러면 적당히 짜나? 그것도 좀 그렇다.

결국 그때 아는 최선을 다하되, 나중에 수정할 수 있게 구조만 잘 잡아두는 게 답인 것 같다. 근데 이 "구조를 잘 잡는다"는 게 또 1년 뒤에 보면 부족하겠지. 끝이 없다.

진짜 문제는 주석이 없는 거다

코드 스타일이야 변할 수 있다. 근데 주석이 없는 건 범죄에 가깝다. 1년 전의 나는 왜 이 로직이 이렇게 되어야 하는지를 아무 데도 안 남겼다. "코드가 곧 문서다"라는 말을 너무 맹신했던 것 같다.

코드가 곧 문서인 건 맞다. 잘 짠 코드에 한해서. 내 코드처럼 temp2 같은 변수명을 쓰면 코드는 문서가 아니라 암호다.

(솔직히 지금도 가끔 주석 안 달긴 한다.)

리팩토링은 3일 걸렸다

결국 그 함수를 다시 짰다. 3일 걸렸다. 원래 작업 추정치는 반나절이었다. PM한테 "예상보다 복잡합니다"라고 말했는데, 솔직히 "제가 1년 전에 대충 짜서 그렇습니다"가 정확한 말이었다.

리팩토링하면서 테스트도 추가했다. 기존에 테스트가 0개였다. 이것도 1년 전의 나 탓이다.

다 끝나고 PR 올리면서 생각했다. 1년 뒤의 내가 이 코드를 보면 뭐라고 할까. 아마 또 한숨을 쉬겠지. 그래도 최소한 주석은 달아놨으니까, 한숨 횟수는 좀 줄어들지 않을까.

모르겠다. 1년 뒤에 직접 확인해보는 수밖에.

관련 글