BigQuery 결제 데이터로 월별 AI 비용 리포트 자동화
Vertex AI로 LLM을 쓰기 시작하면 매달 "이번 달 AI에 얼마 썼지?"를 확인하는 일이 은근히 번거로워진다. 결제 콘솔을 열고 기간을 바꾸고 필터를 거는 일을 매번 반복하게 되기 때문이다. 결제 데이터를 BigQuery로 내보내 두면 이 과정을 SQL 한 번으로 끝낼 수 있고, 예약 쿼리를 걸면 월별 리포트가 자동으로 쌓인다. 실제로 세팅한 순서 그대로 정리한다.
1단계 — 결제 데이터 BigQuery 내보내기 설정
먼저 결제 데이터가 흘러 들어올 자리를 만들고 내보내기를 켠다.
- BigQuery 콘솔에서 데이터셋을 하나 만든다(예:
billing_export). 위치(리전)는 한번 정하면 바꾸기 어려우니 신중히 고른다. - 결제 콘솔에서 결제(Billing) → 결제 데이터 내보내기(Billing export) 메뉴로 이동한다. 결제 계정 관리 권한이 필요하다.
- 표준 사용량 비용(Standard usage cost) 항목에서 설정 수정을 눌러 프로젝트와 방금 만든 데이터셋을 지정하고 저장한다.
- 몇 시간 뒤 데이터셋에 테이블이 생겼는지 확인한다.
한 가지를 꼭 기억해야 한다. 내보내기는 설정한 시점 이후의 데이터만 쌓인다. 과거 청구 내역은 소급 적재되지 않으므로(공식 문서 기준), 리포트가 당장 필요 없더라도 내보내기만큼은 지금 바로 켜 두는 것이 좋다. 첫 데이터가 보이기까지는 몇 시간 정도 걸릴 수 있다.
내보내기 종류는 세 가지다. 표준 내보내기는 gcp_billing_export_v1_결제계정ID 이름의 테이블로 서비스·SKU 단위 비용이 쌓이고, 상세 내보내기(gcp_billing_export_resource_v1_...)는 리소스 단위까지 내려가는 대신 용량이 크다. 가격 내보내기(cloud_pricing_export)는 단가표라서 비용 집계와는 용도가 다르다. 월별 AI 비용 리포트 목적이라면 표준 내보내기로 충분하다.
2단계 — 모델별 비용 집계 쿼리
테이블에서 주로 쓰는 필드는 service.description(서비스명), sku.description(과금 항목), cost(비용), credits(크레딧·할인), usage_start_time(사용 시각), invoice.month(청구 월)이다. Vertex AI에서 쓴 Claude·Gemini 같은 모델 사용료는 서비스 "Vertex AI" 아래에서 SKU 설명에 모델 이름이 들어간 형태로 잡히므로, SKU 단위로 묶으면 모델별 지출이 나온다.
SELECT
invoice.month AS invoice_month,
sku.description AS sku_name,
ROUND(SUM(cost)
+ SUM(IFNULL((SELECT SUM(c.amount) FROM UNNEST(credits) AS c), 0)), 2) AS net_cost
FROM `your-project-id.billing_export.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX`
WHERE service.description = 'Vertex AI'
AND usage_start_time >= TIMESTAMP('2026-07-01')
GROUP BY 1, 2
ORDER BY net_cost DESC;
포인트는 두 가지다. 첫째, cost만 더하면 할인 전 금액이라 실제 부담액과 다르다. credits를 합산해야 크레딧·무료 사용량이 반영된 순비용이 나온다. 둘째, 테이블이 시간 파티션이므로 usage_start_time 조건을 항상 걸어야 스캔 비용이 커지지 않는다.
AI 비용 전체를 보고 싶다면 WHERE 절의 서비스 필터를 넓히면 된다. 예를 들어 Cloud Run에 올린 LLM 백엔드까지 포함해 보려면 service.description IN ('Vertex AI', 'Cloud Run')처럼 여러 서비스를 나열한다. 서비스명 표기는 계정·시점에 따라 다를 수 있으니, 먼저 필터 없이 서비스 목록만 뽑아 실제 표기를 확인하고 필터를 만드는 것이 시행착오를 줄인다.
3단계 — 월 단위 리포트 예약 쿼리
매달 손으로 돌리지 않도록 BigQuery의 예약 쿼리(Scheduled Query)를 건다. 지난달 비용을 집계해 리포트 테이블에 추가하는 쿼리를 만들어 두면 된다.
SELECT
FORMAT_DATE('%Y-%m', DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH)) AS report_month,
service.description AS service_name,
sku.description AS sku_name,
ROUND(SUM(cost)
+ SUM(IFNULL((SELECT SUM(c.amount) FROM UNNEST(credits) AS c), 0)), 2) AS net_cost
FROM `your-project-id.billing_export.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX`
WHERE invoice.month = FORMAT_DATE('%Y%m', DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH))
GROUP BY 1, 2, 3;
- BigQuery 콘솔에서 위 쿼리를 실행해 결과를 확인한다.
- 쿼리 편집기 상단의 예약(Schedule) 버튼을 눌러 새 예약 쿼리를 만든다.
- 반복 주기를 매월로, 실행일을 매월 초(예: 2일)로 잡는다. 월초 며칠은 전월 데이터 정산이 마무리되는 기간이라 하루 이틀 여유를 두는 편이 안전하다.
- 결과 저장 대상 테이블(예:
billing_export.monthly_ai_cost)을 지정하고 쓰기 방식은 "테이블에 추가"로 둔다.
이렇게 하면 매달 초 리포트 테이블에 지난달 서비스·모델별 순비용이 한 줄씩 쌓인다.
4단계 — 결과를 시트·대시보드로 내보내기
숫자를 보는 방법은 취향대로 고르면 된다. 구글 시트에서 데이터 → 데이터 커넥터 → BigQuery 연결(Connected Sheets)로 리포트 테이블을 붙이면 시트에서 바로 피벗과 차트를 만들 수 있다. 시각화를 제대로 하고 싶다면 Looker Studio에서 BigQuery를 데이터 소스로 연결해 월별 추이 차트를 만든다. 한 번 만들어 두면 데이터가 쌓일 때마다 대시보드가 자동으로 갱신된다.
5단계 — 예산 알림 연동
리포트는 지나간 돈의 기록이고, 사고를 막는 것은 예산 알림이다. 결제 콘솔의 예산 및 알림(Budgets and alerts)에서 예산을 만들고 임계값을 걸어 둔다.
- 범위를 결제 계정 전체 또는 특정 프로젝트·서비스(Vertex AI)로 좁힐 수 있다.
- 임계값은 보통 50% / 90% / 100% 세 단계로 걸어 예산 소진 속도를 단계적으로 감지한다.
- 기본은 이메일 통지이고, Pub/Sub 주제로 알림을 보내면 슬랙 웹훅 호출이나 자동 조치 같은 프로그램 연동도 가능하다.
주의할 점 하나. 예산 알림은 통지일 뿐 지출을 자동으로 차단하지 않는다. 알림을 받으면 어떤 SKU가 튀었는지 위에서 만든 집계 쿼리로 바로 확인하는 흐름을 만들어 두는 것이 이 세팅의 핵심이다.
정리하면 파이프라인은 단순하다. 내보내기를 켜서 데이터를 쌓고, 집계 쿼리를 예약해 월별 테이블을 만들고, 시트나 대시보드로 보고, 예산 알림으로 사고를 막는다. 처음 세팅에 반나절이면 충분하고 그 뒤로는 매달 자동으로 굴러간다. AI 비용이 커지기 전에 미리 깔아 두면 나중에 분석할 과거 데이터도 그만큼 길게 남는다.
함께 보면 좋은 글: Vertex AI 모델별 토큰 사용량과 비용 추적 / 구글 클라우드 API 사용량 실시간 모니터링 방법
※ 이 글의 메뉴 경로·테이블 구조는 2026년 기준이며 변경될 수 있습니다.
댓글
댓글 쓰기