기술 부채 (technical debt)

컴퓨터과학·AI
한 줄 정의: 당장 빠른 선택을 위해 미룬 설계·품질 작업이 이자처럼 누적되는 비용을 가리키는 비유입니다.

쉽게 풀면

급하게 출시하려고 대충 짠 코드나 건너뛴 테스트는 지금은 시간을 벌어 주지만, 나중에 기능을 고칠 때마다 더 오래 걸리게 만듭니다. 빌린 돈에 이자가 붙듯 이 추가 비용이 계속 쌓인다는 뜻에서 부채라고 부릅니다. 갚는 방법은 리팩터링이나 테스트 보강처럼 미뤄 두었던 일을 실제로 하는 것입니다.

왜 중요한가

기술적 문제를 경영진과 논의할 수 있는 공통 언어를 제공했다는 점에서 실무적 가치가 큽니다. 부채를 일부러 지는 것이 합리적인 상황과 그냥 방치되는 상황을 구분하게 해 주어, 일정과 품질의 균형을 명시적으로 다룰 수 있게 합니다. 소프트웨어 유지보수 비용을 다루는 연구에서도 핵심 개념으로 쓰입니다.

논문에서는 이렇게 쓰입니다

"정적 분석 지표와 변경 소요 시간을 함께 추적해 모듈별 기술 부채 수준을 정량화하였다."

코드 품질 지표와 실제 작업 시간을 묶어 어느 부분이 얼마나 발목을 잡는지 수치로 나타냈다는 뜻입니다.

조금 더 깊게 보면

워드 커닝햄이 1992년에 제시한 비유로, 원래 취지는 형편없는 코드를 정당화하는 것이 아니라 현재 이해 수준에 맞춰 출시한 뒤 배운 것을 코드에 반영하라는 것이었습니다. 이후 의도했는지와 신중했는지를 두 축으로 나누는 사분면 분류가 널리 쓰입니다. 정량화 시도로는 정적 분석 도구가 추정하는 개선 소요 시간이 쓰이지만, 실제 변경 비용과의 상관은 제한적이라는 비판도 있습니다.

주의할 점

모든 지저분한 코드가 기술 부채인 것은 아니며, 앞으로 바뀔 일이 없는 부분은 갚을 필요가 없는 부채에 가깝습니다. 국소적인 코드 품질 문제를 지적하는 것과 달리, 기술 부채는 그로 인해 앞으로 치를 비용에 주목하는 경제적 관점의 개념입니다.

관련 용어