GCP 요금 폭탄 막는 법 — 예산 알림·할당량·비용 통제
이 글은 「GCP 기초」 연재의 세 번째 글이다. 앞 편이 "얼마까지 공짜인가"였다면 이번은 반대편이다. 클라우드 요금 사고는 예산을 조금 넘기는 방식으로 오지 않는다. 잘 돌아가다가 하룻밤 사이에 자릿수가 바뀐다. 이 글에서는 사고가 나는 전형적인 경로를 먼저 보고, 예산 알림 → 할당량 → 자동 차단 세 겹을 실제로 거는 순서를 짚는다. 이미 나간 돈을 분석하는 이야기가 아니라, 나가기 전에 막는 이야기다.
요금 사고는 대개 이 세 갈래다
첫째는 반복 호출이다. 재시도 로직이 잘못 걸린 코드나 무한 루프가 밤새 API를 두드린다. 요청 단가가 낮아도 횟수가 붙으면 금액은 금방 커진다.
둘째는 끄는 걸 잊은 리소스다. 실습으로 띄운 VM, 붙여 둔 GPU, 만들어 놓고 안 지운 로드밸런서와 고정 외부 IP는 아무 일도 하지 않으면서 시간당 요금을 만든다.
셋째는 유출된 자격 증명이다. 서비스 계정 키 파일이 공개 저장소에 올라가면 남이 내 프로젝트에서 자원을 쓴다. 이 경우는 앞의 둘보다 알아채기가 훨씬 어렵다.
세 경우의 공통점은 사람이 보고 있지 않은 시간에 진행되고, 청구서를 봐야 알게 된다는 것이다. 그래서 사후 분석보다 사전 차단이 먼저다.
1차 방어선 — 예산 및 알림
예산 만들기 첫 단계. "알림만"과 "지출 한도 적용" 중 무엇을 고르느냐에 따라 이후 화면이 달라진다
콘솔의 결제 → 예산 및 알림에서 만든다. 정의 → 범위 → 금액 → 작업 네 단계로 진행되는데, 첫 단계인 정의에서 성격이 완전히 다른 두 가지 중 하나를 고르게 된다.
- 알림만 — 모든 서비스에서 쓸 수 있다. 임계값을 넘으면 메일이 오지만 지출은 계속된다.
- 지출 한도 적용 — 일부 서비스에서만 쓸 수 있고 미리보기 단계다. 한도에 닿으면 지정한 서비스의 사용량이 실제로 일시 중지된다.
이 둘은 대체재가 아니다. 지출 한도는 대상 서비스가 제한적이라 이것만 믿을 수 없고, 알림만으로는 아무것도 막지 못한다. 그래서 아래 순서로 겹쳐 거는 것이다. 범위는 결제 계정 전체·특정 프로젝트·특정 서비스 중에서 고르고, 그다음 금액과 임계값 규칙을 정한다.
작업 단계에서 임계값 비율과 그에 해당하는 금액을 정한다. 기본값으로 세 개가 들어가 있고 필요하면 기준을 더 추가할 수 있다. "알림만" 모드에서는 각 임계값마다 트리거 기준을 실제 지출과 예상 지출 중에서 고를 수 있는데, 여기에 예상 지출 기준 규칙을 하나 더 추가해 두는 것을 권한다. 실제 지출 100%에서 오는 알림은 이미 늦은 알림이지만, 예상 기준은 "이 추세면 월말에 예산을 넘긴다"는 시점에 온다.
"알림만" 모드의 작업 단계. 임계값 비율마다 알림을 받을 금액을 정한다
다만 반드시 알아야 할 한계가 있다. 공식 문서가 분명히 경고하듯, 알림 전용 예산은 사용량이나 지출을 자동으로 막아 주지 않는다. 메일이 올 뿐이다. 방어선이 하나로 끝나면 안 되는 이유가 이것이다.
2차 방어선 — 할당량으로 상한을 건다
서비스로 필터링한 할당량 목록. 각 항목의 값을 기본값보다 낮게 재정의하면 그 선에서 요청이 거부된다
할당량(Quota)은 서비스별로 쓸 수 있는 요청 수와 리소스 수의 상한이다. 보통은 늘려 달라고 요청하는 대상으로 알려져 있지만, 개인 사용자에게 더 중요한 쓰임은 반대다. 기본값보다 낮게 내리는 것이다.
콘솔의 IAM 및 관리자 → 할당량 및 시스템 한도에서 서비스로 필터링한 뒤, 값을 기본값보다 작게 재정의하면 그 선에서 요청이 거부된다. 예산 알림과 결정적으로 다른 점은, 알림은 돈이 나간 뒤에 오지만 할당량은 과금이 생기기 전에 요청 자체를 막는다는 것이다. 다만 모든 서비스가 재정의를 지원하지는 않으므로 해당 서비스 문서를 함께 확인해야 한다.
실습 프로젝트라면 하루 요청 수를 자기가 예상하는 양의 두세 배 선에서 잘라 두는 것만으로도 무한 루프 사고를 대부분 막을 수 있다.
3차 방어선 — 자동으로 끊는 장치
트리거 기준을 실제 지출·예상 지출 중에서 고를 수 있고, 하단에서 Pub/Sub 주제를 연결해 자동 차단을 붙인다
예산에는 이메일 말고 Pub/Sub 알림을 붙일 수 있다. 예산을 만들 때 Pub/Sub 주제를 지정하면, 현재 비용과 예산 금액, 넘어선 임계값 정보가 담긴 메시지가 주기적으로 발행된다. 이 주제를 구독하는 함수를 하나 두면 슬랙으로 보내거나, 더 나아가 프로젝트의 결제 연결을 끊어 과금을 멈출 수 있다.
# 결제 연결 상태 확인
gcloud billing projects describe your-project-id
# 비상시 결제 연결 해제 (모든 유료 서비스가 멈춘다)
gcloud billing projects unlink your-project-id
결제 연결을 끊으면 그 프로젝트의 유료 서비스가 전부 멈춘다는 점은 각오해야 한다. 운영 중인 서비스에 그대로 걸면 장애가 되므로, 자동 차단은 실습 프로젝트에만 거는 것이 현실적이다.
직접 함수를 만들기 전에, 앞서 본 지출 한도 적용 예산을 먼저 확인해 보는 편이 낫다. 예산 만들기 첫 단계에서 이 모드를 고르면 코드 없이 같은 목적을 달성할 수 있다. 한도에 닿으면 지정한 서비스의 사용량이 자동으로 일시 중지되고, 한도를 해제할 때까지 그대로 유지된다.
다만 두 가지를 감안해야 한다. 미리보기 단계이고 지원 대상 서비스가 제한적이라 쓰려는 서비스가 목록에 없을 수 있다. 또 이 모드에서는 임계값에 트리거 기준(실제 지출·예상 지출)을 고를 수 없고, "지출 한도는 더 빠른 보고를 위해 총 예상 비용을 기준으로 트리거된다"는 안내가 화면에 붙는다. 예상보다 이르게 멈출 수 있다는 뜻이라, 운영 중인 서비스보다는 실습 프로젝트에 어울린다.
결제 계정을 나누는 전략
방어선을 다 걸어도 사고 범위 자체를 줄여 두는 것이 낫다. 실습용 프로젝트와 남에게 보여 주는 서비스를 서로 다른 결제 계정에 붙이면, 한쪽에서 사고가 나 결제를 끊어도 다른 쪽은 살아 있다. 결제 계정을 하나만 쓰더라도, 최소한 프로젝트는 반드시 분리해 두어야 예산과 할당량을 따로 걸 수 있다.
한 달에 한 번, 5분 점검
거창한 대시보드보다 위 다섯 줄을 매달 같은 날 훑는 쪽이 오래간다. 특히 첫 줄이 중요하다. 결제 보고서를 SKU 기준으로 묶어 상위 항목만 봐도, 내 돈을 쓰는 것이 무엇인지 이름으로 드러난다.
지출 추이를 좀 더 본격적으로 분석하고 싶다면 BigQuery 결제 데이터로 월별 AI 비용 리포트 자동화 쪽으로 넘어가면 된다. 이 글이 나가기 전에 막는 이야기라면, 그쪽은 이미 나간 돈을 뜯어보는 이야기다. 호출 단위로 실시간 사용량을 보고 싶다면 구글 클라우드 API 사용량 실시간 모니터링 방법이 맞다.
마무리
세 겹을 다 걸어도 완벽하지는 않다. 다만 예산 알림만 걸어 둔 상태와, 할당량으로 상한을 내리고 자동 차단까지 붙여 둔 상태는 사고가 났을 때 금액의 자릿수가 다르다. 오늘 할 일은 하나면 충분하다. 실습 프로젝트에 낮은 금액으로 예산을 하나 만들고, 예측 지출 임계값을 추가하는 것이다.
다음 편에서는 셋째 갈래였던 자격 증명 문제를 정면으로 다룬다. IAM의 기본 개념과 서비스 계정, 그리고 키 파일 없이 인증하는 방법이다.
· · · 연재 순서 · · ·
(이전) GCP 무료로 어디까지 되나 — 무료 등급과 크레딧 활용법
(다음) GCP IAM 기초 — 서비스 계정과 권한, 최소 권한 원칙
※ 이 글의 설정 경로와 기능 상태는 2026년 8월 기준이며 요금·메뉴 구성은 자주 변경됩니다.
댓글
댓글 쓰기