❓1. 기술 부채란?
기술 부채(Technical Debt)는 소프트웨어 시스템의 설계 또는 구현등에서 사용하는 소프트웨어 엔지니어링에 관련한 은유적 표현이다. 이 단어는 컴퓨터 개발자인 워드 커닝햄(Ward Cunningham)에 의하여 처음 만들어진 단어다. (워드 커닝햄은 최초로 위키(Wiki)의 개념을 만들었다.) 금융업에서 말하는 부채와 같이 시간이 지남에 따라 이자가 누적되는 것처럼 기술 부채는 보통 코드의 완성도, 가독성, 유지 관리성, 확장성과 같은 장기적인 고려 사항보다 기한 준수 또는 비용 절감과 같은 단기 목표를 우선시할 때 발생한다. 빠른 개발을 위하여 지름길을 선택하거나 비용적인 면에서 무리하게 타협하기 위해 코드를 작성하다 보면 기술 부채가 늘어나게 되는 것이다.
🚩 2. 기술 부채 증가의 결과
기술 부채는 촉박한 기한, 제한된 리소스, 전문성 부족 또는 계속 되는 요구 사항 변경과 같은 다양한 이유로 발생할 수 있는데 기술 부채의 형태는 열악한 아키텍처, 불완전하거나 부적합한 문서, 비효율적이거나 잘못 구조화된 코드, 부적절한 테스트 또는 오래된 인프라 등등 다양한 형태를 띨 수 있다. 이러한 각 형태의 기술적 부채는 시간이 지남에 따라 알게 모르게 누적된다. 이런 기술적 부채는 아래와 같은 결과를 불러온다.
- 소프트웨어 품질 저하: 읽거나 이해하기가 까다롭거나 디버그하기 어려운 코드로 이어져 오류를 식별하고 수정하기 어렵게 만든다.
- 유지 관리 비용 증가: 기술 부채는 소프트웨어를 유지 관리하고 업데이트하는 데 필요한 시간과 노력을 증가시켜 비용 증가와 생산성 저하를 초래할 수 있다.
- 오류 및 실패 위험 증가: 기술 부채로 인해 깨지기 쉽고 오류가 발생하기 쉬우며 테스트하기 어려운 코드가 생성되어 시스템 오류 및 보안 침해의 위험이 증가할 수 있다.
- 민첩성 감소: 기술적 부채는 변화하는 비즈니스 요구 사항이나 시장 조건에 적응하기 어렵게 만들 수 있으며, 이는 IT 프로젝트의 경쟁 우위를 감소시킬 수 있다.
🚩 3. 기술 부채의 증가를 예방하는 법
기술 부채의 주요 문제 중 하나는 한 눈에 보이지 않으면서 부채가 발생하더라도 그 정도에 따라 즉시 체감하기 어렵다는 것이다. 기술 부채는 문제가 없어보이는 코드로 설계와 구현을 했더라도, 시간이 지남에 따라 부채가 점진적으로 축적될 수 있으며 실제 누적된 기술 부채의 비용은 개발 프로세스 후반 더 나아가 소프트 웨어가 출시된 이후까지도 명확하게 알 수 없어 높아질 수 있다.
기술 부채를 아래와 같은 방법과 기술들을 적극 활용해서 기술 부채의 증가에 따른 리스크를 미리 대비하거나 사전에 예방하면서 기술 부채를 효과적으로 관리할 수 있다
- 모범 사례 채택: 개발자들은 코드 분석과 검토, 자동화된 테스트 및 지속적인 통합을 통하여 모범 사례를 채택하여 기술 부채 발생을 줄일 수 있습니다. 코드 품질 및 문서화에 대한 표준과 지침을 정해두면 시간이 지남에 따라 코드를 보다 효과적으로 유지 보수 및 관리하고 확장할 수 있다.
- 기술 부채의 우선 순위 지정: 개발자들은 부채가 소프트웨어 시스템에 가할 영향과 긴급성에 따라 기술 부채 심각도의 우선 순위를 정해야 합니다. 기술 부채를 추적하고 각 항목에 심각도 순위를 할당함으로써 개발자들은 가장 중요한 문제가 먼저 해결되도록 할 수 있다.
- 코드 리팩토링 및 재설계: 개발자들은 코드를 리팩토링하고 재설계하여 품질, 유지 관리성 및 성능을 개선하면서, 기술적 부채를 해결할 수 있다. 이 말은 곧 알고리즘 최적화 또는 모듈성과 확장성을 개선하기 위한 코드 재구성, 재작성을 말하기도 한다.
- 이해 관계자와의 커뮤니케이션: 개발자들은 프로젝트에 관련한 모든 관계자 즉, 프로젝트의 관리자와 고객 및 최종 사용자 등에게 기술적 부채의 영향을 전달해야 한다. 소프트웨어 시스템의 빠른 출시를 위한 지름길을 택하거나 절충하는 것과 관련된 장단점과 위험을 사전에 설명함으로써 개발자 팀은 프로젝트에 관련된 모든 관계자들이 기술적 부채 관리의 중요성을 이해할 수 있도록 해야 한다.
✔마치며
결론적으로 기술 부채는 눈에 잘 보이지 않고 체감하기 힘든 IT개념이지만, IT 프로젝트에서 흔히 발생하는 문제다. 기술 부채가 증가함에 따른 부정적인 영향에 경각심을 갖고 올바른 방법과 도구와 기술로 이를 세심하고 주의깊게 관리하는 것은 개발자들의 끊임없는 숙제다. 그리고 어쩌면 개발자 자신이 어떠한 소프트웨어 시스템 설계를 뜯어볼 때, 기술 부채를 느낀다는 것은 현재 작성된 코드를 분석할 수 있을 수준으로 코드 분석과 검토 능력이 성장했다는 뜻이다. 또한 현재의 코드보다 품질 좋고 적합한 코드를 알고 부채를 해소하고 있는 행위는, 과거의 나보다 오늘날의 내가 한층 성장하여 더 높은 수준의 개발 영역으로 나아가고 있는 모습을 실시간으로 느낄 수 있는 기회일 것이다.