레거시라는 단어는 유산이라는 뜻이다. 이 단어 안에는 특정한 가치를 가지고 있지 않다. 물려 받은 유산이 좋은 것인지 나쁜 것인지 알 수 없기 때문이다. 다만 소프트웨어 업계에서는 이 단어가 꽤나 부정적인 뜻을 가지고 있는 것 같다. 레거시에 대한 이미지는 대부분 '잘 구조화 되어 있지 않은', '테스트가 잘 되어있지 않은', '복잡한', '구식의' 등의 단어를 연상하게 한다.
개발자로 일을 시작한지 얼마 안되었을 때, 제대로 짜여져있지 않은 레거시 코드들을 보며 이전 작업자들을 이해할 수 없다는 식으로 생각한 적이 있었다. '왜 이렇게 작업을 했지', '나라면 더 잘 짰을 것 같은데' 이런 생각을 하면서 말이다.
그런데 개발자로 조금 더 일을 해보니 생각이 달라졌다. 첫 번째로 바뀐 생각은 내가 했어도 더 잘 작업하지 못했을 것 같다는 것이다. 어쩌면 내가 더 안 좋은 결과물을 만들 수 있었을 것이다. 주어진 일정 속에서 요구사항을 충족하는 코드 결과물을 만들어 보니 내가 작업한 것도 별반 다르지 않았다. 아마 제일 큰 이유는 내가 부족해서일 것이다. 내 실력과 지식, 경험이 부족해서, 또는 일정이 여유롭지 않아서, 촉박한 상황 가운데서 계속해서 변경작업을 해야되서 내가 봐도 후회스럽고 아쉬운 코드들을 만들어 왔다. 아마 이 레거시 코드를 작업하는 상황도 크게 다르지 않았을 것이다.
두 번째로는 설사 그 코드들이 객관적으로 좋지 못할지라도 그 코드로 인해 회사는 사업을 지속할 수 있었다는 것이다. 이러니 저러니 해도 그 서비스, 프로그램을 통해 매출을 만들었고 고객을 만들어서 지금까지 왔을 것이다. 그래서 나도 채용되어서 일을 할 수 있었을 것이다.
새로운 회사로 온지 얼마 안되어서 잘 정리가 안된 코드를 종종 만나고 파악하게 된다. 지금 그런 코드를 보면 그 당시의 급박함과 야근을 불사하면서까지 열정적으로 달려온 팀원들의 모습이 그려진다. 아무 것도 없을 때부터 무엇인가를 만들기 위해 빠르게 실험하고 기능을 추가하면서 달려왔을 것이다. 그런 상황 속에서 뒤를 돌아보고 정리할 여유가 충분했을까? 아마 그렇지는 않았을 것 같다.
지금 이 시점에 레거시 코드들을 만난 내가 할 일은 그 작업물과 작업자를 존중하고, 혹여나 이 작업을 해오면서 지친 동료들이 있다면 고생했다고, 더 재미 있게 좋은 것들을 함께 만들어보자고 격려하는 일 밖에는 없다.
내가 본 개발자들 중에 자기가 할 수 있는 것보다 더 안좋게 작업하는 사람은 본 적이 없다. 적어도 자기가 아는 한도 안에서 최선을 다해 코드를 작성하고 개발을 한다. 그게 설령 최고의 방법이 아니라고 할지라도 자신이 할 수 있는 최선의 방법으로 작업을 한다.
물론 미래 지향적으로 생각했을 때 고쳐나가고 바꿔나가야할 레거시 코드들이 있겠지만, 레거시는 지금까지 지나왔던 모든 것의 흔적이다. 물론 그것들이 다루기 어렵고, 잘 정리 되지 않은 코드일지라도 절대로 그것을 무시하거나 폄하할 수 있는 것은 아니다.
'프로그래밍' 카테고리의 다른 글
mac 로컬 환경 https 구성 (0) | 2019.08.01 |
---|