안녕하세요. 인포그랩 프로덕트 팀에서 백엔드 엔지니어로 근무하는 Andy입니다. 프로젝트를 진행하다 보면 여러 가지 이유로 기술 부채가 쌓이는데요. 기술 부채를 어감상 부정적으로 생각하기 쉽지만 모든 기술 부채가 나쁜 건 아닙니다. 이를 잘 관리하면 개발을 진전시키는 데 도움이 되죠. 그러나 기술 부채를 잘 관리하지 못하면 개발 생산성과 비즈니스에 부정적 영향을 미칠 수 있는데요. 따라서 평소 기술 부채 특징과 관련 모범 관행을 학습하는 건 매우 중요합니다. 이 글에서는 기술 부채 개념과 유형, 해결 방법을 살펴보고, 인포그랩 프로덕트 팀의 기술 부채 관리 방식을 소개하겠습니다.
기술 부채 개념과 유형
‘기술 부채(Technical Debt)’ 용어 정의는 1992년 컴퓨터 프로그래머 워드 커닝햄이 고안했습니다. 이는 ‘시간이 더 걸릴 수 있는 더 나은 접근 방식을 취하는 대신 쉽지만 제한된 솔루션을 선택할 때 필요한, 향후 재작업의 암묵적 비용’입니다. 또는 ‘가장 효과적인 솔루션이 아닌 가장 빠른 솔루션을 선택하면서 발생한 추가 작업 비용’을 뜻하기도 하죠.
소프트웨어 엔지니어인 크리스 리코미니, 드미트리 리아보이는 『필독! 개발자 온보딩 가이드: 지속 가능한 소프트웨어와 원활한 협업 문화를 이해하는 프로페셔널 개발자의 탄생』에서 기술 부채를 이렇게도 설명합니다.
금융 부채와 마찬가지로 기술 부채에도 원금과 이자가 있다. 원금은 수정해야 할 원래의 단점을 의미한다. 이자는 본질적인 단점을 수정하지 않고 코드를 개선할 때 발생하는 비용을 뜻하며, 차선책을 택해 구현하면서 점차 복잡도가 올라가는 것을 의미한다. 이와 같은 차선책이 계속 복제되고 자리를 잡다 보면 이자도 더 늘어난다. 점점 더 많은 코드가 복잡해지고 결함도 생겨난다.
기술 부채 개념은 시간이 지나면서 더 구체화됐는데요. 2009년 소프트웨어 엔지니어 마틴 파울러는 기술 부채를 2차원 매트릭스로 설명하며, 아래 그림과 같이 유형을 구분했습니다.