내년에 수행할 고도화 프로젝트를 준비하면서 복잡해진 구조를 어떻게 정리하고, 앞으로 어떤 방향으로 시스템을 개선해야 할지 고민하고 있습니다.

현재 담당하고 있는 시스템을 구성하고 있는 코드를 들여다보면 자꾸 눈에 들어오는 것이 있습니다. 분명 여러 서비스에서 공통으로 활용할 수 있는 기능인데도 특정 서비스와 강하게 결합되어 있는 경우가 많다는 것입니다.


1. 일정에 쫓긴 개발이 남기는 것

개발자라면 누구나 추상화와 캡슐화가 중요하다는 이야기를 많이 들어봤을 것입니다.

공통으로 사용할 수 있는 기능은 분리하고, 특정 서비스의 세부 구현은 최대한 감추면서 변화가 생겨도 영향 범위를 작게 만드는 것이 좋은 설계라는 것도 당연히 잘 알고 있을 것입니다.

하지만 현실에서는 항상 일정에 쫓기다 보니 공통 기능이 특정 서비스와 강하게 결합된 상태로 개발되는 경우가 많습니다.

처음에는 별문제가 없어 보입니다. 어쨌든 일정도 맞췄고 서비스도 정상적으로 동작합니다. 빠르게 개발했다고 칭찬을 받기도 합니다.

문제는 시간이 조금 지나면서 나타나기 시작합니다.

다른 서비스에서 비슷한 기능이 필요해지더라도 기존 코드를 그대로 가져다 쓰기가 어렵습니다. 공통 기능과 특정 서비스의 고유 로직이 강하게 얽혀 있기 때문입니다. 기존 구조에 맞지 않더라도 해당 기능을 억지로 끼워 넣게 되기도 합니다. 기존 서비스에 새로운 기능을 추가하거나 변경해야 할 때도 비슷한 문제가 생깁니다.

이런 과정이 반복되면 구조는 점점 복잡해지고, 작은 변경 하나에도 많은 부분을 함께 살펴봐야 하는 시스템이 되어갑니다. 결국 개발자는 점점 바빠지는데, 개발팀 전체의 속도는 오히려 느려지게 됩니다.

별것 아닌 개발 요청인데 왜 그렇게 시간이 오래 걸려?”

경영진이나 현업 부서에서 이런 의문을 가지는 것도 충분히 이해할 수 있습니다. 그리고 그런 개발팀을 책임지고 있는 팀장으로서 이런 질문을 들을 때마다 마음이 무거워지는 것도 사실입니다.


2. 개발팀의 레버리지

이런 상황은 단순한 코드 품질의 문제가 아니라, 기술 자산이 다음 개발의 힘으로 이어지지 못하는 데서 비롯되는 문제라고 생각합니다.

개발팀의 역량은 단순히 개발자의 수나 숙련도만으로 결정되는 것이 아닙니다.

시간이 지나면서 공통 모듈, 라이브러리, 플랫폼, 개발 표준과 같은 기술 자산이 쌓이고, 이를 새로운 개발에 다시 활용할 수 있어야 같은 인원으로도 더 많은 일을 할 수 있습니다. 한 번 해결한 문제를 다음 개발에서도 다시 활용할 수 있어야 훨씬 적은 노력과 시간으로 목표한 과업을 완수할 수 있기 때문입니다. 이런 힘이 개발팀의 레버리지입니다.

레버리지

“개발팀의 레버리지는 결국 이전의 결과물이 다음 개발을 얼마나 쉽게 만들어주느냐에 달려 있습니다.”

그런데 기존에 만든 기능이 특정 서비스에 강하게 묶여 재사용하기 어렵다면 상황은 달라집니다.

서비스가 늘어날수록 기술 자산이 쌓이는 것이 아니라 비슷한 기능과 코드가 여러 곳에 반복해서 만들어집니다. 관리해야 할 대상은 계속 늘어나는데, 새로운 개발을 시작할 때 활용할 수 있는 자산은 생각보다 많지 않습니다.

결국 개발자는 계속 바쁘게 일하지만, 이전에 했던 개발이 다음 개발의 속도를 높여주지 못합니다.

오히려 시스템이 복잡해질수록 변경에 필요한 확인 범위와 테스트 범위가 커지고, 개발팀 전체의 속도는 점점 느려지게 됩니다.


3. 한 번 만든 것이 다음 개발의 힘이 되는 구조

물론 모든 기능을 처음부터 공통화하거나 지나치게 추상화하는 것은 현실적이지 않습니다. 다만 비슷한 기능을 두 번째, 세 번째 다시 만들고 있다면 그때는 한 번쯤 멈춰서 공통화할 수 있는 부분이 없는지 살펴볼 필요가 있습니다.

이번 고도화 프로젝트에서는 단순히 기술 버전을 올리고 오래된 코드를 정리하는 데 그치지 않고, 지금까지의 개발 결과물이 다음 개발에도 활용될 수 있는 구조를 만드는 것을 중요한 목표로 삼아보고 싶습니다.

개발자 한 명 한 명이 더 바쁘게 일하는 것이 아니라, 지금까지 만들어온 기술 자산이 다음 개발을 조금 더 쉽게 만들어주는 팀.

이번 고도화 프로젝트를 통해 그런 레버리지가 높은 개발팀에 조금 더 가까워지고 싶습니다.