기술 부채의 정의
사전적인 정의는 다음과 같습니다.
현 시점에서 더 오래 소요될 수 있는 더 나은 접근방식을 사용하는 대신 쉬운(제한된) 솔루션을 채택함으로써 발생되는 추가적인 재작업의 비용을 반영하는 소프트웨어 개발의 한 관점이다.
기술 부채는 금전적인 채무와 비유될 수 있다.
– 위키백과
워드 커닝햄(Ward Cunningham) 이 1992년도에 사용한 표현으로, 소프트웨어 개발에서 빠른 개발이나 기능 출시를 위해 나중에 처리하도록 미루어진 기술적인 문제를 말합니다. 이러한 문제들은 나중에 수정되어야 하지만, 미뤄진 만큼 처리하기에 더욱 복잡하고 비용이 많이 들어가게 됩니다.
결국, 나중에 개발해야 만 하는 추가적인 작업 형태로 남아 마치 갚아야 할 부채처럼 된다는 것입니다.
평균적인 소프트웨어 개발자는 기술 부채를 처리하는 데 일주일에 13시간 이상을 쓴다.
– 2018년 스트라이프(Stripe)의 Developer Coefficient 보고서
이와 같이 기술 부채를 관리하는데, 많은 시간을 투입해야 하는 것으로 나타났으며, 시스템이나 애플리케이션이 복잡하고, 커질수록 더욱 많은 시간을 투입해야 합니다.
이외에도, 마틴 파울러는 2009년 그의 블로그에서 기술 부채 사분면을 제시하였으며, 소프트웨어 개발 과정에서 “빠른 구현” 이라는 효과는 나타낼 수도 있지만 결국에는 “유지보수 노력 증가”라는 대가를 치루게 된다는 점을 설명하면서, 기술 부채의 중요성을 강조하고 있습니다.
기술 부채의 종류
기술 부채는 다양한 형태로 나타날 수 있으며, 예를 들어, 설계 부채, 코드 부채, 테스트 부채, 인프라 부채 등이 있습니다.
설계 부채
- 소프트웨어 설계 단계에서 적절한 설계를 제대로 수행하지 않았거나 설계 결함을 미처 수정하지 못하여 생기는 부채
- 소프트웨어의 설계가 미흡하거나 부적절하게 이루어졌을 때, 나중에 해당 소프트웨어를 수정하거나 유지 보수하는 과정에서 발생하는 추가적인 비용과 시간
코드 부채
- 개발자가 프로그램 코드를 작성할 때, 시간이나 예산 등의 제한으로 인해 충분한 품질을 보장하지 못하고 미루는 코드 작성 작업
- 소프트웨어 개발의 초기 단계에서는 효과적으로 비용을 절감할 수 있지만, 이후에 시스템을 유지 보수/업그레이드/기능 추가 시 많은 비용과 시간이 들어감
테스트 부채
- 소프트웨어 개발 과정에서 충분한 테스트를 수행하지 않아 생기는 부채
- 시스템의 기능이나 성능을 충분히 검증하지 않거나, 불완전한 테스트를 수행하여 발견하지 못한 결함으로 인해 시스템이나 소프트웨어의 품질 저하되며, 이후 품질 향상을 위해 많은 비용과 시간이 들어감
인프라 부채
- 소프트웨어 개발 및 운영을 위한 인프라 구성에 대한 부채
- 개발자가 시스템 운영을 위한 서버나 DB 등의 인프라 구성을 미리 준비하지 않은 채 개발을 진행하여, 시스템의 초기 버전은 빠르게 출시할 수 있지만, 이후 시스템 규모가 확장되거나 사용자 수가 증가하면 인프라 구성이 부족한 상황이 발생하게 되어, 시스템의 성능 저하나 서버 다운 등의 문제가 발생
기술 부채의 원인
기술적인 결함
- 시스템/소프트웨어 대한 적절하지 않은 설계 또는 코드의 품질 관리를 하지 않는 등의 이유
시간 및 예산 제약
- 개발 프로젝트의 일정이 매우 촉박하거나, 예산이 제한되어 있는 경우 개발자들은 충분한 테스트나 코드 리팩토링을 수행하지 않아 발생
기술적인 부족함
- 새로운 기술을 익히는데 시간이 부족한 경우나, 충분한 경험이 없는 경우 발생 가능성이 높음
업무 환경
- 개발 프로젝트를 위한 업무 환경이 부적절하거나, 커뮤니케이션에 문제가 있어 일부 정보나 요구사항을 놓치는 경우
이외에도 업무 우선순위, 기술적인 한계 등 여러 원인이 있을 수 있습니다.
기술 부채 최소화하는 방안
코드 리뷰
- 다른 개발자들이 작성한 코드를 검토하고, 잠재적인 기술 부채를 예방할 수 있음
- 코드의 가독성, 유지보수성, 확장성 등을 개선하고, 문제가 발생했을 때 빠르게 대처할 수 있도록 도와줌
테스트 자동화
- 개발자가 작성한 코드를 자동으로 검증하고, 문제를 미리 파악할 수 있음
- 잠재적인 기술 부채를 미리 예방할 수 있으며, 개발자가 코드를 수정하거나 추가할 때마다 자동으로 테스트가 수행되므로 코드의 신뢰성을 높일 수 있음
지속적인 통합/배포
- 코드 변경 사항을 빠르게 반영하고, 문제를 빠르게 파악하고 해결할 수 있음
- 개발자들은 코드 변경에 대한 실시간 피드백을 받으므로, 문제가 발생했을 때 빠르게 대처할 수 있음
기술 부채 관리
- 기술 부채를 발생시키는 원인을 파악하고, 관리할 수 있는 프로세스를 도입하여 최소화할 수 있음
- 기술 부채를 쌓이지 않도록 예방하고, 발생했을 때는 빠르게 대처하여 안정적인 소프트웨어 개발을 진행할 수 있도록 노력해야 함
최신 기술 도입
- 새로운 기술이 나올 때마다 최신 기술을 도입하여 기술 부채를 최소화할 수 있음
- 최신 기술을 도입하면 개발 시간이 단축되고, 더욱 효율적으로 개발할 수 있음
기술 부채를 최소화하기 위해서는 프로젝트 초기부터 적절한 기술 선택과 설계, 코드 품질 관리, 충분한 테스트, 그리고 지속적인 개선과 리팩토링을 수행해야 합니다. 또한, 기술 부채를 적극적으로 모니터링하고, 적절한 대응 전략을 수립하여 신속하게 해결하는 것이 필요합니다. 이러한 노력을 통해 기술 부채를 최소화하고, 높은 품질과 안정성을 갖춘 소프트웨어를 개발하는 것이 가능합니다.
기술 부채 관리의 중요성
기술 부채는 소프트웨어 개발 프로젝트에서 매우 중요한 문제이며, 기술 부채가 높아질수록 프로젝트 진행에 대한 위험이 높아질 수 있습니다.
높은 기술 부채는 미래에 프로젝트를 더욱 복잡하게 만들어서, 수정과 유지 보수 비용이 늘어날 수 있으며, 회사와 고객에게 추가적인 비용과 불편함을 초래할 수 있습니다. 또한, 품질이 낮아질 가능성이 높아져서, 불편한 사용자 경험과 기능 오류를 초래할 수 있습니다.
따라서, 기술 부채를 적절하게 관리하고 최소화하는 것이 매우 중요합니다. 기술 부채를 관리함으로써, 프로젝트의 일정과 예산을 준수하는 데 도움을 주며, 프로젝트의 품질과 안정성을 유지하는 데에도 중요합니다. 또한, 기술 부채를 최소화하면 개발자들은 보다 많은 시간과 에너지를 현재의 개발 과제에 집중할 수 있으며, 개발자들의 생산성과 만족도를 높이는데 도움을 줍니다.
마치며 …
기술 부채는 피할 수 없는 것이며, 모든 조직에서 발생할 수 있는 문제입니다.
개발자들은 기술 부채에 대한 인식을 높이고, 팀 전체적으로 기술 부채를 예방하고 관리할 수 잇는 문화를 구축해야 할 것입니다.
팀내에서도 기술 부채를 관리하고 있는지에 대해 한번쯤 검토해 보아야 할 것이며, 저희가 개발하고 있는 제품/서비스를 지속적으로 발전해나가려면, 기술 부채들을 조금씩은 해소해나가면서 개발 진행할 수 있도록 해야할 것입니다.
기술 부채를 최소화하기 위한 방안 및 프로세스 개선에 대해서도 본부 차원에서 고민해봐야 할 문제로 보입니다.
관련 기사
- https://melv1n.com/what-is-technical-debt/
- https://namu.wiki/w/기술적 부채
- https://www.itworld.co.kr/insider/238829
- https://yozm.wishket.com/magazine/detail/1331/
- https://www.bzpp.co.kr/viewplus/viewplus/ST170328A00001
- https://www.2e.co.kr/news/articleView.html?idxno=207765
- https://giljae.com/2022/08/08/기술-부채의-유형과-관리-방법.html