유지보수는 쉬운 일이 아닙니다

맥북 위에 핸드폰이 올려져있고, 하얀 노트가 좌측에 놓여있는 사진

가끔 소프트웨어 유지보수는 신규 개발보다 쉬워서, 어렵지 않게 할 수 있는, 지루한 일이라는 이야기를 들을 때가 있다. 유지하고 보수하는 일이 개인의 성향과 맞지 않아 지루할 수 있다고는 생각하지만, 쉬운 일이라는 데에는 몇 가지 이유로 동의하지 않는다.

레거시 코드를 유지보수할 때는 아주 작은 부분마저도 쉽게 고치기 어렵다. 코드의 정글을 지나, 어렵게 문제의 심장부로 보이는 곳까지 찾아갔지만 눈앞에는 마치 영화 속 시한폭탄처럼 알 수 없는 빨간 줄, 노란 줄, 파란 줄이 놓여있다. 고민하다가 파란 줄을 잘랐다.  여기저기서 오류가 터진다. 사이드 이펙트가 찾아왔다. 자동화된 테스트라도 있으면 좋으련만, 그마저도 없다면 이때부터는 '웰컴 투 더 헬’이다. 그래서 레거시에 뭔가를 추가하거나 수정하는 작업은 새로운 코드를 작성할 때 보다 더 예민하고 넓은 시야로 코드를 봐야 한다. 한 마디로 어렵다는 소리.

유지보수할 때는 창의력을 발휘하기도 어렵다. 기존의 체계가 생각을 제약한다. 제약을 더 많이 받기 때문에 더 많은 창의력이 필요하지만, 생각을 강하게 제약하는 체계 안에서 새로운 해법을 찾는다는 건 결코 쉬운 일이 아니. 이런 환경을 즐기는 성향이 아니라면 미치고 팔짝 뛸 만한 상황이다. 그만큼 수고롭다. 간단하게 할 수 있는 일을 멀리 돌아가는 느낌 또한 유쾌하지 않다. 기존 체계가 깔끔하고 유연하다면 참 좋으련만, 그런 레거시 코드는 보이지 않는다. 그래서 우리는 보통 레거시라는 단어에, 오랜 세월 쌓이고 쌓여 딱딱하게 굳어져 이제는 어쩔 수 없는 녀석이란 의미를 담는다.

로버트 L. 글래스는 자신이 저서인 '소프트웨어 크리에이티비티'에서, “소프트웨어 제작이라는 복잡한 세상에서 (위반해서는 안 되는 체계적인 제약을 받으며 창의력을 발휘하는) 유지보수보다 더 복잡한 활동은 없으리라 생각한다"라고 했다. 유지보수는 이처럼 어렵고, 많은 비용을 필요로하는 활동이다. 

그래서 유지보수하기 좋은 코드를 작성하는 일은 사업적 측면과 무관하지 않다. 요즘처럼 변경이 상수인 시대에 잦은 변경을 받아들일 수 없어서, 소프트웨어를 재개발해야 한다면 회사는 큰 비용을 치러야만 한다. 클린 코드나 테스트 자동화가 이야기하는 가치는 결코 사업 그 자체와 동떨어져 있지 않다. 그런 의미에서 더 나은 코드를 찾아 끊임없이 고민하는 일은 내일의 나, 너, 팀, 그리고 회사까지, 관련 있는 모두를 위한 배려이자 직업 개발자의 의무가 아닐까. 

글을 쓰다보니 유지보수를 가볍게 생각하는 사람은 클린 코드나 테스트 자동화가 말하는 가치에 공감하기는 어렵겠다는 생각이 스친다.

아, 그렇구나. 그런 거였어.