brunch

플레이키 테스트의 경제학

불안정성이 조직에 미치는 실제 비용 분석

by 제임스

"테스트가 또 실패했네요. 다시 돌려볼까요?"


매일 아침 스탠드업 미팅에서 들리는 이 한마디가 얼마나 많은 비용을 발생시키는지 아시나요? Google Testing Blog(2016)에 따르면 사내 테스트의 약 16%가 일정 수준의 플레이키(Flaky) 특성을 보였다고 합니다. 이로 인한 개발자 생산성 손실은 조직 전체에 상당한 영향을 미칩니다. (참고: https://testing.googleblog.com/2016/05/flaky-tests-at-google-and-how-we.html)

플레이키 테스트란 코드 변경 없이도 때로는 성공하고 때로는 실패하는 비결정적(non-deterministic) 테스트를 의미합니다. 마치 양자역학의 슈뢰딩거의 고양이처럼, 테스트를 실행하기 전까지는 성공할지 실패할지 알 수 없는 상태죠. 이런 불확실성이 단순한 기술적 문제를 넘어 조직 전체의 경제적 손실로 이어진다는 사실, 정량적으로 분석해본 적 있으신가요?



플레이키 테스트의 숨겨진 비용 구조

직접 비용: 개발자 시간의 낭비

Microsoft Research의 2019년 논문 "Root Causing Flaky Tests in a Large-Scale Industrial Setting"에서는 대규모 상용 프로젝트에서도 비동기와 타이밍 이슈가 플레이키 테스트의 주요 원인으로 반복 관찰되며, 이로 인한 개발자 생산성 저하가 심각하다고 보고했습니다. (참고: https://www.microsoft.com/en-us/research/publication/root-causing-flaky-tests-in-a-large-scale-industrial-setting/)

플레이키 테스트가 발생시키는 직접 비용을 제대로 이해하려면, 먼저 개발자의 일상을 들여다봐야 합니다. CI/CD 파이프라인에서 테스트가 실패했다는 알림을 받은 개발자는 즉시 하던 작업을 멈추고 실패 원인을 파악해야 합니다. 로그를 확인하고, 로컬에서 테스트를 재실행하고, 디버거를 돌려보는 과정이 시작됩니다. 그런데 로컬에서는 테스트가 성공합니다. 다시 CI에서 실행하면 이번엔 성공할 수도, 실패할 수도 있습니다.

이런 상황에서 개발자는 딜레마에 빠집니다. 실제 버그일 가능성을 무시할 수 없기 때문에 더 깊이 파고들어야 하지만, 동시에 플레이키 테스트일 가능성도 높습니다. 결국 몇 시간을 투자한 끝에 타이밍 이슈나 테스트 순서 의존성 같은 문제를 발견하게 됩니다. 프로덕션 코드는 전혀 문제가 없었던 것이죠.

업계 평균을 기준으로 간단한 계산을 해보겠습니다. 100명의 개발자가 있는 조직에서 각자 주당 2시간씩 플레이키 테스트 대응에 시간을 쓴다고 가정하면, 주당 총 200시간이 손실됩니다. 이를 연간으로 환산하면 10,400시간이며, 개발자 평균 시급을 보수적으로 추정했을 때 상당한 금액의 손실로 이어질 수 있습니다. 하지만 이것은 빙산의 일각에 불과합니다. 컨텍스트 스위칭 비용, 집중력 저하로 인한 생산성 감소, 팀 전체의 사기 저하 등 측정하기 어려운 간접 비용까지 고려하면 실제 손실은 훨씬 더 큽니다.

더욱 심각한 것은 이런 경험이 반복되면서 개발자들이 학습된 무기력에 빠진다는 점입니다. "어차피 플레이키 테스트일 거야"라는 생각이 퍼지면서, 진짜 버그를 찾아내려는 노력이 줄어들게 됩니다. 이는 조직 전체의 품질 문화를 훼손하는 결과로 이어집니다.


기회비용: 늦어지는 배포와 기능 출시

Google, Spotify, Uber 등의 엔지니어링 블로그에서 공통적으로 언급되는 문제는 플레이키 테스트로 인한 CI/CD 파이프라인 재실행입니다. 업계 조사에 따르면, 이로 인해 평균 배포 시간이 30~40% 증가한다고 보고되고 있습니다.

현대 소프트웨어 개발에서 배포 속도는 경쟁력의 핵심입니다. 특히 SaaS 비즈니스 모델에서는 새로운 기능을 얼마나 빨리 고객에게 전달할 수 있느냐가 시장 점유율을 좌우합니다. 플레이키 테스트는 이 배포 파이프라인의 병목이 됩니다.

구체적인 시나리오를 생각해보겠습니다. 금요일 오후, 중요한 기능 릴리즈를 앞두고 있습니다. 모든 코드 리뷰가 완료되었고, 제품 팀도 대기 중입니다. 그런데 CI 파이프라인에서 테스트가 실패합니다. 개발자들은 긴급히 확인에 들어가지만, 재실행하니 성공합니다. 안도의 한숨을 쉬며 다시 배포를 시도하지만, 이번엔 다른 테스트가 실패합니다. 이런 과정이 반복되면서 배포는 계속 지연됩니다.

결국 금요일 저녁 배포는 포기하고 월요일로 미뤄집니다. 주말 동안 경쟁사는 유사한 기능을 먼저 출시할 수도 있고, 마케팅 캠페인 일정도 조정해야 합니다. 고객들은 약속된 기능을 기다리다 실망하게 됩니다. 이 모든 것이 플레이키 테스트 때문입니다.

더 중요한 것은 이로 인한 시장 기회 손실입니다. Amazon 출신 Greg Linden이 2006년 블로그에서 공유한 관찰에 따르면, 페이지 지연 100ms가 매출에 유의미한 영향을 줄 수 있다고 합니다(업계에서 널리 인용). 기능 출시가 하루만 늦어져도 경쟁사에 시장을 빼앗길 수 있는 현실에서, 플레이키 테스트로 인한 배포 지연은 치명적일 수 있습니다.

또한 개발 팀의 모멘텀 손실도 무시할 수 없습니다. 빠른 피드백 루프는 애자일 개발의 핵심인데, 플레이키 테스트는 이 루프를 느리게 만듭니다. 개발자들은 자신의 코드가 프로덕션에 반영되는 것을 보며 성취감을 느끼고 다음 작업에 대한 동기부여를 얻는데, 배포 지연은 이런 긍정적 사이클을 방해합니다.


신뢰 비용: 늑대소년 효과

가장 위험한 것은 '늑대소년 효과'입니다. 이솝 우화에서 양치기 소년이 거짓으로 "늑대가 나타났다!"고 외치기를 반복하자, 마을 사람들이 더 이상 그의 말을 믿지 않게 되었고, 정작 진짜 늑대가 나타났을 때는 아무도 도와주지 않았다는 이야기처럼, 플레이키 테스트도 똑같은 현상을 만들어냅니다. 개발자들이 테스트 실패를 "어차피 플레이키일 거야"라고 간주하고 무시하기 시작하면, 실제 버그를 놓치게 되는 것이죠.

이 문제의 심각성을 보여주는 실제 사례가 있습니다. GitLab의 2017년 데이터베이스 사고 포스트모템을 보면, 6시간의 데이터 손실이 발생했습니다. 여러 포스트모템에서 테스트 신뢰성 저하가 사전 탐지 실패로 이어질 수 있음을 지적하듯, 신뢰할 수 없는 테스트는 오히려 위험을 증가시킬 수 있습니다. (참고: https://about.gitlab.com/blog/2017/02/01/gitlab-dot-com-database-incident/)

플레이키 테스트가 만들어내는 신뢰 비용은 세 가지 차원에서 나타납니다. 첫째, 개발자와 테스트 간의 신뢰 붕괴입니다. 테스트가 신뢰할 수 없다고 판단되면, 개발자들은 테스트 결과를 무시하기 시작합니다. "어차피 플레이키니까 다시 돌리면 되겠지"라는 안일한 생각이 퍼지면서, 실제 문제를 놓치게 됩니다. 월요일에 플레이키, 화요일에 플레이키, 수요일에도 플레이키... 그러다 목요일에 나타난 진짜 버그마저 플레이키로 착각하고 배포를 진행하는 것입니다.

둘째, 팀 간 신뢰의 훼손입니다. QA 팀이 보고한 버그를 개발 팀이 "플레이키 테스트 때문일 거야"라고 무시하거나, 반대로 개발 팀이 "테스트가 불안정해서 확신할 수 없어"라고 책임을 회피하는 상황이 발생합니다. 이는 팀 간 협업을 방해하고 조직 전체의 효율성을 떨어뜨립니다.

셋째, 시스템에 대한 신뢰 상실입니다. 플레이키 테스트가 많아지면, 전체 테스트 스위트의 신뢰성이 의심받게 됩니다. 결국 "테스트는 믿을 수 없으니 수동으로 확인하자"는 퇴행적 접근이 나타나고, 이는 자동화의 이점을 완전히 무효화시킵니다.

이런 신뢰 비용은 장기적으로 조직의 품질 문화를 훼손시킵니다. 테스트 작성에 대한 동기가 사라지고, 품질에 대한 책임감이 흐려지며, 결국 제품 품질 저하로 이어집니다. 이는 고객 만족도 하락, 브랜드 가치 훼손, 궁극적으로는 비즈니스 실패로 연결될 수 있는 치명적인 문제입니다.



플레이키 테스트의 경제학적 모델링

플레이키 테스트의 총 비용을 수식으로 표현하면 다음과 같습니다.

총 비용 = 직접 비용 + 기회비용 + 신뢰 비용 + 컨텍스트 스위칭 비용

각 요소를 자세히 살펴보겠습니다.


직접 비용 계산

직접 비용은 가장 눈에 보이는 손실입니다. 하지만 많은 조직이 이 비용조차 제대로 측정하지 못하고 있습니다. 직접 비용을 정확히 계산하려면 다음 요소들을 모두 고려해야 합니다.

첫째는 디버깅 시간입니다. 플레이키 테스트 하나를 디버깅하는 데 평균 4~5시간이 소요된다는 연구 결과가 있습니다. 여기에 플레이키 테스트 수와 개발자 시급을 곱하면 기본적인 디버깅 비용이 나옵니다. 하지만 이것만으로는 부족합니다. 플레이키 테스트는 종종 여러 개발자가 동시에 경험하기 때문에, 중복된 디버깅 작업이 발생합니다. 같은 플레이키 테스트를 서로 다른 팀의 개발자 3~4명이 각자 디버깅하는 일도 흔합니다.

둘째는 재실행 비용입니다. CI/CD 파이프라인에서 테스트를 재실행할 때마다 컴퓨팅 리소스가 소비됩니다. 클라우드 환경에서는 이것이 곧 돈입니다. 일일 재실행 횟수에 CI/CD 인프라 비용을 곱하고 365일을 곱하면 연간 재실행 비용이 나옵니다. 대규모 기술 기업의 경우, 이 비용만 월간 수만 달러에 달한다고 업계에서는 추정하고 있습니다.

셋째는 대기 시간입니다. 테스트가 재실행되는 동안 개발자들은 기다려야 합니다. 이 대기 시간 동안 다른 작업을 하기도 하지만, 컨텍스트 스위칭으로 인한 효율성 저하는 피할 수 없습니다. 특히 배포를 앞두고 여러 팀이 대기하는 상황에서는 이 비용이 기하급수적으로 증가합니다.

넷째는 인프라 비용입니다. 플레이키 테스트로 인해 CI/CD 파이프라인이 막히면, 더 많은 빌드 에이전트나 테스트 환경이 필요하게 됩니다. 이는 추가적인 인프라 투자로 이어집니다. 또한 플레이키 테스트를 격리하고 관리하기 위한 별도의 시스템도 필요할 수 있습니다.


기회비용 계산

기회비용은 더 복잡하고 파괴적입니다. 단순히 지연된 시간만이 아니라, 그 시간 동안 창출할 수 있었던 가치를 모두 고려해야 합니다.

배포 지연 비용을 계산할 때는 여러 요소를 고려해야 합니다. 먼저 지연 시간에 시간당 예상 수익을 곱합니다. 이것은 직접적인 매출 손실입니다. 하지만 더 중요한 것은 경쟁 우위 손실입니다. 특히 B2B SaaS 시장에서는 특정 기능의 출시 시점이 계약 성사 여부를 좌우할 수 있습니다. 경쟁사보다 일주일 늦게 기능을 출시했다면, 그 일주일 동안 잃은 고객의 생애 가치를 모두 기회비용으로 봐야 합니다.

개발 속도 저하도 심각한 기회비용입니다. 플레이키 테스트로 인해 개발 사이클이 20% 느려진다면, 분기당 출시할 수 있는 기능 수가 그만큼 줄어듭니다. 각 기능이 창출할 수 있는 비즈니스 가치를 고려하면, 이는 엄청난 손실입니다. 특히 빠르게 성장하는 스타트업의 경우, 이런 속도 저하는 시장 기회를 완전히 놓치는 결과로 이어질 수 있습니다.

혁신 기회의 상실도 간과할 수 없습니다. 개발자들이 플레이키 테스트 대응에 시간을 빼앗기면, 새로운 아이디어를 실험하거나 기술 부채를 해결할 시간이 줄어듭니다. 이는 장기적으로 제품의 경쟁력을 약화시킵니다.


신뢰 비용의 정량화

신뢰 비용은 가장 측정하기 어렵지만 가장 치명적일 수 있습니다. 이를 정량화하려면 확률적 접근이 필요합니다.

놓친 버그의 비용은 다음과 같이 계산할 수 있습니다. 먼저 플레이키 테스트로 인해 실제 버그를 놓칠 확률을 추정합니다. 여기에 그 버그가 프로덕션에 배포될 확률을 곱하고, 프로덕션 버그가 일으킬 평균 장애 비용을 곱합니다. 대규모 서비스의 경우, 한 시간의 다운타임이 수백만 달러의 손실을 가져올 수 있다는 점을 고려하면, 이 비용은 어마어마합니다.

품질 저하로 인한 고객 이탈도 중요한 비용입니다. 플레이키 테스트로 인해 품질 검증이 제대로 이뤄지지 않으면, 사용자 경험이 악화됩니다. 이는 고객 이탈률 증가로 이어지고, 각 이탈 고객의 생애 가치만큼 손실이 발생합니다. B2B 기업의 경우, 한 명의 주요 고객 이탈이 연간 수십만 달러의 손실을 의미할 수 있습니다.

브랜드 가치 훼손은 더욱 측정하기 어렵지만 장기적으로 가장 큰 비용일 수 있습니다. 품질 문제로 인한 부정적 리뷰, 소셜 미디어에서의 비판, 업계 내 평판 하락 등은 모두 미래 수익에 영향을 미칩니다. 실제로 공개된 여러 장애 보고서를 보면, 테스트 신뢰성 부족이 주요 장애의 간접적 원인이 되었다는 분석이 자주 등장합니다.



실제 기업들의 대응과 ROI

Google: 플레이키 테스트 격리 시스템

Google은 사내에서 플레이키 테스트 문제를 체계적으로 해결하기 위한 여러 접근법을 개발했습니다. Google Testing Blog에 따르면, 이들은 테스트를 5회 연속 실행하여 플레이키 여부를 판정하는 시스템을 구축했습니다. (참고: https://testing.googleblog.com/2016/05/flaky-tests-at-google-and-how-we.html)

Google의 접근법의 핵심은 '격리'입니다. 플레이키로 판정된 테스트는 즉시 메인 테스트 스위트에서 분리되어 별도로 관리됩니다. 이렇게 하면 다른 개발자들의 작업이 방해받지 않으면서도, 플레이키 테스트가 완전히 무시되는 것을 방지할 수 있습니다. 격리된 테스트는 담당 팀에 자동으로 할당되고, 수정 기한이 설정됩니다. 기한 내에 수정되지 않으면 테스트는 삭제되거나 더 높은 우선순위로 에스컬레이션됩니다.

또한 Google은 플레이키 테스트의 패턴을 분석하여 근본 원인을 찾아내는 도구도 개발했습니다. 예를 들어, 특정 시간대에만 실패하는 테스트는 타임존 관련 문제일 가능성이 높고, 병렬 실행 시에만 실패하는 테스트는 리소스 경합 문제일 가능성이 높습니다. 이런 패턴 인식을 통해 더 빠르게 문제를 해결할 수 있습니다.

이러한 시스템 도입으로 Google은 플레이키 테스트 수를 크게 감소시켰다고 보고했습니다. 더 중요한 것은 개발자들의 테스트에 대한 신뢰가 회복되었다는 점입니다. 테스트 실패를 무시하는 문화가 사라지고, 품질에 대한 책임감이 강화되었습니다.


Uber: 통계적 접근법

Uber는 엔지니어링 블로그에서 플레이키 자동 탐지 및 감축 프로젝트를 공개했습니다(2021, 2024). 그들의 접근법은 통계와 머신러닝을 활용한 점이 특징입니다. (참고: https://www.uber.com/en-IN/blog/flaky-tests-overhaul/)

Uber의 "FlakyBot"은 베이지안 통계를 활용하여 테스트의 플레이키 확률을 계산합니다. 단순히 몇 번 실행해서 판단하는 것이 아니라, 과거 실행 이력, 코드 변경 패턴, 실패 시간대, 환경 변수 등 다양한 요소를 종합적으로 고려합니다. 이를 통해 95% 신뢰도로 플레이키 여부를 판정할 수 있다고 합니다.

지금 바로 작가의 멤버십 구독자가 되어
멤버십 특별 연재 콘텐츠를 모두 만나 보세요.

brunch membership
제임스작가님의 멤버십을 시작해 보세요!

소프트웨어 QA의 인식 개선을 위해 노력하고 있습니다. 쉽고 재밌는 주제로 다가가겠습니다.

100 구독자

오직 멤버십 구독자만 볼 수 있는,
이 작가의 특별 연재 콘텐츠

  • 총 9개의 혜택 콘텐츠
최신 발행글 더보기
작가의 이전글발표를 잘하는 사람은 대본이 없다