수명 - 壽命
Taegeun Moon
죽음은 적응성과 변화를 위한 대가이다
Ernst Mayr
프로그램에 대한 요구사항은 시간의 흐름에 따라 변화하며, 이에 부응하지 못한 프로그램은 그 수명을 다하고 사라지게 된다. 서비스 수준에서는 무신사 PC버전, 싸이월드 등이 사라졌고, 코드 레벨에서는 대부분 회사에서 하루에도 몇번씩 아래와 같은 일이 발생한다.
이 코드는 리팩토링 하는것보다 처음부터 새로 작성하는게 더 나을것 같아요.
이러한 결정의 배경에는 크게 두가지 원인이 있다.
- 코드 퀄리티가 좋지 못하게 작성되어 있다
- 초기 개발 단계에서 예측하지 못한 요구사항으로 인해 설계가 크게 바뀌어야 한다
처음부터 완벽한 코드를 작성하여 오래오래 수정 없이 사용할 수 있으면 좋을 것이다. 하지만 안타깝게도 대부분의 프로젝트에서 위 두가지 발생하며, 꽤 많은 코드들이 죽음을 맞이하게 된다.
죽음
본래부터 좋거나 나쁜 일은 없다. 생각이 그렇게 만들 뿐이다.
William Shakespeare
코드의 죽음을 초래하는 위 요인들은 무조건 질타해야 할 대상일까? 이 질문은 애초에 코드의 죽음에 대한 부정적인 시각을 내포하고 있다. 그렇다면 죽음은 부정적인 것일까?
죽음이 부정적인 사건이 아님을 이해하기 위해선, 죽음을 개체 단위가 아닌 집단의 단위에서 보아야 한다. 변화한 환경에 적합하지 못한 개체가 사라지면서, 그 자리를 환경에 적합한 개체가 대체하게 된다. 만약 그러지 못한다면 집단의 환경 적응력이 떨어지고, 어느 순간 집단 자체가 사라지는, 앞서 말한 서비스 종료와 같은 사건이 발생하는 것이다. 즉, 개체 단위의 죽음은 집단 단위의 수명을 늘리는 효과가 있다.
그렇다면 개체 단위인 코드 관점에서, 코드 퀄리티가 뛰어나고 미래의 요구사항을 반영한 완벽한 코드가 되지 못한 실패작일 뿐일까? 이 질문을 아주 일반화 한다면 아래와 비슷한 질문이라 생각한다.
옛날 사람들은 왜 자동차를 바로 만들지 않고 말을 타고 다녔을까?
그 이유는 인류가 승마 기술을 발명하는데 필요한 비용이 자동차 기술을 발명하는데 필요한 비용보다 훨씬 저렴하기 때문이다. 그리고 자동차 기술을 발명하기 까지 오랜 시간동안, 승마 정도의 기술이라도 인류에게 필요했고 큰 도움이 되었기 때문이다.
즉, 죽음은 슬퍼할 일이 아니며, 개체는 다음 세대가 나타나기까지 시간을 지탱하는 임무를 완수한 것이다. (물론 코드를 만들었던 개인의 입장에서 감정적으로 슬픈 일이긴 하다)
대가
물론 새로운 코드를 만드는것이 무조건 좋은 것은 아니다. 코드 새로 만들기 위해서는 비용이 들기 때문이다. 그런데 이 비용은 결국 언젠가는 지불 했어야 할 비용이다. 이를 설계 초반에 선지불하냐, 필요해 졌을 시점에 후지불 하냐의 차이일 뿐이다.
여기서 어려운 문제가 나온다. 너무 비용을 일찍 지불하면 결국 쓰지 않을 기능에 대한 비용을 지불하는 오버엔지니어링이 될 수 있고, 너무 비용을 늦게 지불하면 감당할수 없는 기술 부채가 되어 돌아오기도 한다. (이는 비용을 늦게 지불하는것 자체가 추가 비용을 만들기 때문이다)
따라서 현재 작성하는 코드가 어느정도의 수명을 가질지를 바탕으로, 어느정도 코드 퀄리티와 미래 요구사항을 고려할지 잘 계산해야 한다.