# 8,000달러를 낭비해 버린 1줄의 코드

> Clean Markdown view of GeekNews topic #20618. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=20618](https://news.hada.io/topic?id=20618)
- GeekNews Markdown: [https://news.hada.io/topic/20618.md](https://news.hada.io/topic/20618.md)
- Type: GN+
- Author: [xguru](https://news.hada.io/@xguru)
- Published: 2025-05-01T08:38:28+09:00
- Updated: 2025-05-01T08:38:28+09:00
- Original source: [pietrasiak.com](https://pietrasiak.com/one-line-of-code-that-did-cost-dollar8000)
- Points: 2
- Comments: 1

## Topic Body

- macOS용 화면 녹화 앱 **Screen Studio의 자동 업데이트 버그**로 인해, **250MB 파일이 5분마다 반복 다운로드**되는 문제가 발생함  
- 결과적으로 한 달간 **2PB(2,000,000GB)의 트래픽**이 Google Cloud에서 발생하며 **약 $8,000의 요금 폭탄**으로 이어짐  
- 원인은 단순한 코드 누락으로, **업데이트 다운로드 후 반복 요청을 멈추는 로직을 빠뜨린 것**임  
- 일부 사용자에겐 **인터넷 서비스 해지 등 실질적 피해**까지 발생했고, 개발팀은 책임을 통감함  
- **클라우드 비용 경고 설정, 비용 유발 코드 검토, 업데이트 서버 제어 장치 마련** 등의 교훈을 강조함  
  
---  
  
### 사고 개요  
  
- Screen Studio는 macOS용 **데스크탑 화면 녹화 앱**으로, **자동 업데이트 기능**이 있음  
- 업데이트 파일 용량은 **약 250MB**이며, 앱은 **5분마다 서버를 확인**함  
- 버그로 인해 업데이트가 감지된 후에도 **5분 간격 요청이 중단되지 않고 계속 다운로드**됨  
  
### 비극적 리팩터의 시작  
  
- 기존에는 업데이트 팝업이 녹화 중 방해가 되어 UX 문제가 있었음  
- 이를 개선하기 위한 리팩터 중, **업데이트 후 타이머를 정지하는 로직을 제거해버림**  
- 그 결과, 업데이트 파일이 **반복 다운로드되는 로직이 앱 내에 내장된 상태**가 됨  
  
### 무서운 컨텍스트: 백그라운드 실행 상태  
  
- 사용자 중 상당수가 앱을 **수 주간 백그라운드 상태로 실행**한 채로 사용 중이었음  
- 이 상태에서 수천 개의 인스턴스가 **5분마다 250MB를 자동 다운로드**함  
  
### 수치로 보는 재앙  
  
- 5분마다 다운로드 = **하루 288회**  
- 사용자 1인당 일일 다운로드 트래픽 = **72GB**  
- 약 30일간 지속, 1천 명의 사용자 가정 시:  
  - **250MB × 288 × 30 × 1,000 = 약 2PB 트래픽**  
- Google Cloud에서 발생한 예상 요금: **약 $8,000**  
  
### 연쇄 실수들  
  
- **Google Cloud 비용 알림이 설정되지 않음**  
- 기존 월 요금 $300 수준으로 안일하게 생각  
- 최종적으로는 **신용카드 한도 초과로 거래가 차단되며 문제 인지**  
  
### 사용자 피해  
  
- 한 사용자는 이 트래픽으로 인해 **ISP(인터넷 제공업체)에서 서비스 계약 해지** 통보를 받음  
- 해당 지역에 대체 공급자 없음 → 심각한 생활 불편  
- 팀은 **책임 인정 및 비용 보상 제안**, 다행히 상황은 원만히 해결됨  
- 하지만 **사용자에게 해를 끼친 경험**은 개발자에게 깊은 반성을 남김  
  
### 교훈 요약  
  
- **클라우드 비용 알림은 필수**  
- **자동 업데이트 로직은 매우 신중하게 작성**할 것  
- **비용 유발 가능성이 있는 모든 코드는 특별히 검토**할 것  
- **서버 제어 신호(예: 강제 업데이트 플래그)** 를 설계에 포함할 것  
- **클라우드 사용 상태를 정기적으로 점검**할 것

## Comments



### Comment 38047

- Author: neo
- Created: 2025-05-01T08:38:28+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=43829006) 
- 미래에 웹 검색을 통해 이 스레드를 찾는 사람들을 위해: screen.studio는 macOS 화면 녹화 소프트웨어로, 5분마다 업데이트를 확인함. 그러나 이 게시물에서 설명된 버그는 5분마다 250MB의 업데이트 파일을 다운로드하는 것임
  - 개발자들은 이 모든 것을 정상으로 간주하지만, 실제 다운로드로 인해 $8000의 대역폭 요금이 발생함
  - 요약: 화면 녹화 소프트웨어가 5분마다 업데이트를 확인함. 이는 한 시간에 12번임
  - 나는 개발자의 판단을 신뢰하는 정도에 따라 소프트웨어를 선택함. 이 판단이 합리적인지 고려해 보길 바람

- Screen Studio는 macOS용 화면 녹화기임. 데스크톱 앱임. 최신 버전을 쉽게 설치할 수 있도록 자동 업데이트가 필요하다고 주장함
  - 그러나 자동 업데이트는 여러 부정적인 결과를 초래함
  - 사용자의 동의 없이 업데이트를 다운로드하여 클라이언트에 트래픽을 유발함
  - 5분마다 반복적으로 다운로드가 계속됨. 사용자가 측정된 연결에 있는지 감지했는지 의문임
  - 업데이트 팝업이 흐름을 방해하는 버그가 있음
  - 팝업 자체가 사용자에게 나쁜 경험을 줌. 앱을 닫을 때 허용하고 나머지는 백그라운드에서 처리하는 것이 좋음
  - 일부 사용자는 앱의 아웃고잉 연결을 주의 깊게 살피며, 5분마다 업데이트 확인은 과도함. 앱 실행 중에 할 필요가 없음. 시작 시 확인하고 종료 시 물어보는 것이 좋음
  - 위의 모든 문제를 초래한 앱의 추가 복잡성. 개발자에게 비용이 발생함
  - 앱 스토어가 이 경우 업데이트를 처리하는 완벽한 방법이 될 수 있음

- 화면 녹화기와 같은 중요하지 않은 앱의 개발자가 5분마다 업데이트를 확인해야 한다고 생각하는 것이 터무니없음
  - 하루에 한 번이면 충분할 것임

- 정말로 5분마다 업데이트를 확인해야 하는지 의문임. 시작 시 한 번이면 충분하며, 사용자가 며칠 동안 켜두는 경우에도 하루에 한 번 또는 그보다 적게 확인할 수 있음

- 나는 코드 리뷰에 대해 항상 엄격함. 한 번은 매니저가 QA에 더 맡기라고 했을 때 "우리는 모두 직장을 잃을 수 있음. 우리는 항상 나쁜 코드 한 줄로 직장을 잃을 수 있음"이라고 대답함
  - 주니어 또는 경험 많은 개발자가 잠재적인 PII 유출을 작성하는 경우가 많음. 대부분의 시스템에서 법적 문제를 일으킬 수 있는 가능성이 매우 큼

- 수천 명의 사용자가 데이터 요금제에서 불필요하게 소모한 대역폭에 대한 문제
  - 이러한 부주의한 실수가 인터넷 사용자 모두에게 혼잡을 초래할 수 있음
  - 만약 이 실수가 $8000의 비용이 아니라 Google Cloud의 무료 요금제나 다른 계획으로 해결되었다면, 여전히 심각한 버그로 간주하고 신속하게 수정했을지 의문임
  - 얼마나 많은 잘못된 설계가 트래픽을 생성하고 공통 자원을 소모하고 있는지

- 내가 Mac 데스크톱 애플리케이션을 배포했을 때:
  - 우리는 Sparkle을 사용하여 업데이트를 처리했음. 그들의 자체 업데이트를 선택한 것은 잘못된 선택이었음
  - 우리의 애플리케이션은 매우 복잡했고 Mono와 함께 배포되었음. 그러나 10MB 정도였음. Windows 버전은 2MB였고 32비트 및 64비트 바이너리를 포함했음. 그들이 250MB의 화면 녹화기를 배포하는 이유가 궁금함
  - 그들은 교훈을 얻지 못한 것 같음. 전체 기사는 그들을 어리석게 보이게 함

- '더 나은 테스트'가 요약에서 언급되지 않은 것이 놀라움
  - '코드를 신중하게 작성하라'는 제안이 초보적인 실수처럼 보임
  - 개발자가 사용자 기기를 테스트 베드로 사용하는 것이 매우 좌절스러움

- 나는 서드파티 라이브러리 채택에 대해 보수적임 (각 라이브러리가 장기적으로 문제를 일으킬 가능성이 있기 때문임), 그러나 앱 업데이트는 가치가 있음
  - 이는 기본적으로 하나의 큰 엣지 케이스이며, 앱에 심각한 버그가 있을 경우 복구 계획의 중요한 부분임
  - 이 버그는 그들의 자체 업데이트의 유일한 문제가 아님. 5분마다 확인하는 것은 미친 짓임. 그들이 이에 대해 깊이 생각하지 않았다는 것을 보여줌

- 나는 Proxy Auto-Configuration (PAC) 파일을 사용하는 검열 방지 프록시 서비스를 운영 중임
  - 파일에 잘못된 JS가 포함되어 있거나, 파일 크기가 1MB를 초과하면, 시스템 전체에 구성된 경우 모든 앱이 서버에 요청을 계속 보내는 문제가 발생함
  - 이는 내 서버를 DDoS 공격하고 BGP 수준에서 IP를 차단하는 결과를 초래했음
  - 500,000명 이상의 사용자가 매일 사용함. 내 웹 서버는 월 $20의 VPS로 무제한 트래픽을 제공함. 덕분에 나는 OP와 같은 상황에 처하지 않았음
