클린 코드, 기술 부채, 성공적인 프로젝트

클린 코드, 기술 부채, 성공적인 프로젝트

클린 코드는 왜 중요한가?

프로젝트를 일정하게 예측 가능한 속도로 개발하기 위해서는 유지 보수성이 뛰어난 코드가 필수적인데, 클린 코드는 프로젝트의 유지 보수성을 향상시켜주고 이는 기술 부채를 감소시키는 선순환을 일으켜 프로젝트가 성공적으로 진행 될 수 있게 도와준다.

차를 운전한다고 가정해보자. 차에 아무런 문제가 없고, 목적지까지의 도로가 아주 깨끗하게 관리되어 있으며, 다른 차들도 거의 없어 교통정체조차 일어나지 않는다면 목적지에 도착하는 시점을 꽤 정확하게 예측할 수 있을 것이다. 하지만 목적지까지 운전하는 도중 자연재해로 도로가 파손되어 먼 길을 돌아가야 한다거나, 차에 문제가 생겨 중간에 정비소에 들러야 한다면 도착 시점을 특정하기가 매우 어려울 것이다.

소프트웨어 개발도 이와 비슷하다. 일정하게 예측 가능한 속도로 개발하기 위해서는 기존의 코드를 최대한 짧은 시간 안에 최대한 정확하게 파악할 수 있어야 한다. 그래서 소프트웨어 개발에서 코드의 가독성은 매우 중요한 요소 중 하나이다. 코드를 파악하기도, 기존의 코드를 수정하기도 매우 어렵다면 새로운 요구사항이 들어올 때마다 그동안 차곡차곡 쌓아왔던 기술 부채를 해결하기 위한 추가적인 작업을 거쳐야 할 것이고, 이러면 요구사항에 대한 중요한 개발 작업은 매끄럽게 진행될 수 없을 것이다.

기술 부채는 개발자의 올바르지 않았던 결정이나, trade-off를 고려한 적당한 타협의 결과로 생긴 소프트웨어의 결함을 의미한다. 대부분의 부채는 이자를 유발하는데, 코드는 지금 바꾸는 것보다 미래에 변경하는 것이 대부분 더 어려우므로 부채라는 단어가 딱 어울린다. 기술 부채가 발생했다는 것은 내일은 코드를 수정하기가 더 어렵고 내일모레는 더더욱 어려워질 것이라는 의미이다.

개발팀이 제시간에 클라이언트가 원하는 것을 제공할 수 없어 기존의 코드를 개선하기 위해 멈춘다는 것은 기술 부채에 대한 이자를 지불한다는 뜻이다. 기술 부채는 지금 당장 정신 사납게 시끄러운 경고음을 내는 그런 문제는 아니다. 기술 부채는 프로젝트에 전역적으로 흩어져 있는 잠재적인 문제이며, 이것들은 언젠가 깨어나 프로젝트 진행에 제동을 거는 돌발 변수가 될 것이다. 현재 본인이나 동료가 마주친 문제는 과거에 잘못 작성 된 코드로 인해 발생한 문제일 수도 있다. 그러니 코드를 작성할 때, 현재 마주친 문제를 적절하게 해결하기 위해 충분한 시간을 투자하지 않고 또 다시 지름길로 가기로 결정한다면 그 코드를 유지 보수하게 될 미래의 본인이나 동료가 어떠한 어려움을 겪게 될지 한 번쯤은 충분한 시간을 들여 고민을 해 보자.


© 2022. All rights reserved.