본문 바로가기
MegazoneCloud
← 전체 글
미분류

Understanding the GCP Billing System and Analyzing Billing Data

01. GCP 리소스 계층 구조 (Resource Hierarchy)

GCP의 모든 리소스는 최상위 조직부터 개별 서비스까지 상속 구조를 가진다. 상위 계층에서 설정한 IAM 권한과 정책은 하위로 자동 내려가므로, 조직의 실제 일하는 방식을 계층 구조에 반영해야 한다.

조직 >  폴더 > 프로젝트

  • 조직(Organization) & 도메인: 최상위 우산 역할이다. G Suite/Cloud Identity와 연동되며, 개인 계정이 아닌 회사 소유로 프로젝트가 귀속되어 퇴사자가 생겨도 리소스 제어권을 유지한다.
  • 폴더(Folder): 사업부, 개발팀, 환경(Dev/Stage/Prod)별로 구획을 나누는 논리적 단위이다. 폴더 단위로 IAM 권한을 부여하면 하위 프로젝트 관리가 유용해진다.
  • 프로젝트(Project): Compute Engine, BigQuery 등 실제 GCP 서비스가 동작하는 최소 실행 단위이다. 모든 리소스는 단 하나의 프로젝트에만 속한다.
  • 라벨 (Labels): 키-값 형태의 문자열로, 비용 관리 및 결제 데이터 필터링 목적 (IAM 권한 조건 사용 불가)
  • 태그 (Tags): 조직/폴더/프로젝트/리소스 수준에서 정의되는 제어용 태그로, IAM 권한 제어 및 조직 정책의 조건을 조건부 적용하는 용도

라벨(Label) vs 태그(Tag) 

주요 목적비용 추적 및 필터링권한 제어 및 보안 정책 적용
핵심 비유정산용 가계부 메모지출입 구역별 통제 스티커
적용 가능 범위리소스 수준 (VM, 버킷, BigQuery 등)조직, 폴더, 프로젝트, 리소스 전체 계층
상속여부상속 안 됨 (개별 리소스에 직접 할당)하위 계층으로 자동 상속됨
IAM/정책 연동불가 (IAM 조건문으로 사용 못 함)가능 (조건부 IAM 및 조직 정책에 활용)
BigQuery Export내보내기 가능 (labels 컬럼으로 제공)내보내기 지원 안 됨
중앙 관리 여부별도 사전 정의 필요 없음 (아무 키나 생성)조직/폴더 수준에서 키와 값을 미리 정의해야 함

실무 주요 GCP 태그 예시

environmentdev, stage, prod• prod 태그가 붙은 VM은 사용자 임의 삭제 금지

• dev 태그 환경에만 개발자 그룹 수정 권한 부여
data-sensitivitypublic, internal, confidential• confidential 태그가 붙은 Cloud Storage 버킷은 외부 공개 차단 (Org Policy)
network-accessinternal-only, internet-facing• internal-only 태그가 붙은 Compute Engine 인스턴스에는 외부 IP 할당을 자동 방지
compliancepci-dss, hipaa, gdpr• 규정 준수가 필요한 리소스를 그룹화하여 보안 감사팀 전용 읽기 권한 부여

* IAM의 실무 적용 팁

  • 개인 IAM 직접 할당 금지: 사용자 개개인에게 권한을 주지 말고, Cloud Identity 그룹을 만든 뒤 그룹에 권한을 할당해야 한다.
  • 최소 권한 원칙: 프로젝트 생성 권한 등 상속된 강력한 권한은 주기적으로 검토 및 제거한다.

02. 결제 계정(Billing Account) 및 권한 설정

리소스 구조를 세웠다면 대금을 지급하고 권한을 통제할 결제 체계를 연결해야 한다.

결제 구조 핵심 개념

  • 결제 계정 (Billing Account): GCP 리소스 비용을 정산하는 주체이다. (신용카드 기반의 셀프 서비스와 정구서 기반의 기업용 인보이스로 나뉨)
  • 결제 프로필 (Payments Profile): GCP 외에도 Google Ads, Workspace 등 Google 전체 서비스의 결제를 통합 관리하는 외부 프로필(payments.google.com)이다.

결제 IAM 역할 구분

  • Billing Account Viewer: 지출 내역 조회만 가능 (프로젝트 결제 변경 불가)
  • Billing Account User: 비용 조회 + 새 프로젝트 생성 시 이 결제 계정을 연결할 수 있는 권한
  • Billing Account Admin: 권한 할당, 프로젝트 연결/해제, 지원팀 티켓 제출 등 결제 계정 전체 제어

* Billing Account 관리의 실무 적용 팁

  • BigQuery Export는 첫날 즉시 “세부 사용량 비용” 으로 활성화: 결제 데이터 내보내기 설정 이전의 과거 데이터는 소급 적용되지 않으므로, 계정 생성 직후 활성화해야 향후 상세 분석이 가능하다. 설정 시 옵션은 단순 요약만 제공하는 Standard가 아닌, 리소스 수준의 세부 정보와 최신 약정 할인(CUD) 단가까지 포함되는 세부 사용량 비용 옵션을 선택해야 한다.
  • Admin 이중화: 결제 관리자는 담당자 부재를 대비해 최소 2명 이상 지정하거나 관리자 그룹을 활용한다.

03. 청구서(Invoice) vs 결제 보고서(Billing Reports)

비용 문제를 파악할 때는 목적에 맞춰 도구를 선택해야 한다.

주 목적재무 정산 (지불할 최종 금액 확인)원인 분석 (비용 급증 원인 및 트렌드 파악)
제공 주기매월 5 영업일 이내 (PDF/CSV)GCP 콘솔 내 실시간 제공
주요 내용최종 청구액, 세금, 계약 할인 적용 결과프로젝트/제품/SKU/지역별 세부 비용, 미래 예측

비용 급증 시 추적 3단계 패턴

  1. 트렌드 확인: 콘솔 내 [결제 > 보고서]에서 누적 비용 차트와 예상 비용 트렌드선 확인
  2. 프로젝트 격리: 우측 필터 창에서 비용이 튄 특정 프로젝트만 필터링
  3. SKU 심층 분석: 그룹화 기준을 Product → SKU로 단계별로 내려가며 원인이 된 특정 작업(예: BigQuery Analysis)을 타겟팅    

SKU(Stock Keeping Unit) : 재고 유지 단위. GCP 결제에서 구글이 청구서를 매기는 가장 세부적이고 구체적인 최소 청구 단위이다. 

Product vs SKU

Product가 ‘어떤 서비스인가’라면, SKU는 ‘그 서비스의 어떤 구체적인 자원/동작인가’를 보여준다.

개념GCP의 상위 서비스 이름서비스 내부에서 돈이 나가는 진짜 원인 항목
Compute EngineCompute Engine• N2 Instance Core running in Oregon (CPU 사용료)

• SSD Provisioned Space (SSD 용량)

• Static IP (고정 IP 비용)
BigQueryBigQuery• Analysis (SQL 쿼리 실행 및 데이터 스캔 비용)

• Active Storage (데이터 저장 비용)

• Long-term Storage (90일 이상 장기 보관 비용)

04. BigQuery 기반 결제 데이터 분석 실습 (SQL)

GCP 결제 데이터 내보내기(BigQuery Billing Export)를 설정하면, 표준 SQL을 통해 지출 내역을 다각도로 조회할 수 있다.

1) 유효 지출(Cost > 0) 데이터 전체 조회

무료 티어나 할인으로 0원이 찍힌 내역을 제외하고 실제 비용이 발생한 행만 골라낸다.

SELECT * 
FROM `billing_dataset.enterprise_billing` 
WHERE cost > 0;

2) 프로젝트 및 서비스별 비용 가독성 개선

복잡한 원본 컬럼명을 알기 쉬운 별칭(Alias)으로 변경하여 가공한다.

SELECT 
  project.name AS project_name,
  service.description AS service_name,
  location.country AS country,
  cost AS cost
FROM `billing_dataset.enterprise_billing`;

3) 서비스 및 SKU 조합 세부 항목(Line Item) 추출

서비스명과 세부 품목(SKU)을 하나의 문자열로 결합(CONCAT)하여 어떤 구체적인 리소스 항목들이 존재하는지 고유 목록을 추출한다.

SELECT 
  CONCAT(service.description, ' : ', sku.description) AS line_item 
FROM `billing_dataset.enterprise_billing` 
GROUP BY 1;

4) 항목별 발생 빈도(건수) 집계

각 세부 리소스 항목별로 결제 로그가 몇 건씩 청구되었는지 집계한다.

SELECT 
  CONCAT(service.description, ' : ', sku.description) AS line_item, 
  COUNT(*) AS num_records 
FROM `billing_dataset.enterprise_billing` 
GROUP BY line_item;

5) 프로젝트별 총 결제 금액 계산 (반올림 처리)

프로젝트별 전체 발생 비용을 합산(SUM)하고, 소수점 둘째 자리까지 반올림(ROUND)하여 실제 청구 금액 단위로 정산한다.

SELECT 
  project.name AS project_name,
  ROUND(SUM(cost), 2) AS total_cost 
FROM `billing_dataset.enterprise_billing` 
GROUP BY project.name;

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다