LLM API를 서비스에 붙이면 비용이 트래픽보다 빨리 는다. 대부분은 기능을 붙이는 데 집중하느라 비용 쪽 설정을 나중으로 미룬다. 그런데 GCP에서 Vertex AI를 쓰기 시작할 때 기본 상태를 열어 보면, 막혀 있는 것이 거의 없다. 예산은 없고, 토큰 할당량은 사실상 무제한이다.
처음에 걸어 둘 것은 네 가지다. 순서대로 예산 알림, 토큰 할당량, 프로젝트 분리, 인증 점검이다. 각각이 막는 것과 못 막는 것이 다르니 하나만 걸고 안심하면 안 된다.
비용은 어디서 불어나나
LLM 과금은 입력 토큰과 출력 토큰을 따로 센다. 단가는 출력이 더 비싼 경우가 많아서 출력 길이부터 의심하게 되는데, 실제로 먼저 불어나는 건 입력인 경우가 많다. 입력은 코드가 조용히 늘리기 쉽다.
입력 토큰이 늘어나는 대표 경로는 이렇다.
- 대화 히스토리 누적. 매 요청에 이전 대화를 통째로 붙이면 대화가 길어질수록 요청 하나의 입력이 선형으로 는다. 요약하거나 최근 N턴만 보낸다.
- RAG 과다 첨부. 검색 결과를 넉넉하게 붙이면 품질이 좋아 보이지만, 문서 몇 개가 요청마다 붙으면 그게 입력의 대부분이 된다. 상위 몇 개로 자르고 길이 상한을 둔다.
- 재시도 반복. 실패 시 같은 요청을 그대로 다시 보내는 로직은, 장애가 났을 때 입력 비용을 몇 배로 만든다. 재시도 횟수와 백오프를 정해 둔다.
- 캐싱 없음. 시스템 프롬프트처럼 매번 똑같은 앞부분은 컨텍스트 캐싱 대상이다. 안 쓰면 같은 토큰을 매번 정가로 낸다.
비용이 늘었을 때 어디서 늘었는지는 청구서를 쪼개 보면 나온다. 결제 보고서에서 서비스 → 프로젝트 → 리전 → SKU 순서로 그룹을 바꿔 가며 본다. Vertex AI는 모델별로, 입력과 출력별로 SKU가 따로 있어서 ... Text Input SKU가 늘었는지 ... Text Output SKU가 늘었는지가 바로 보인다. 늘어난 SKU를 찾으면 그 기간에 무엇을 배포했는지와 맞춰 본다. 할당량을 조이는 것보다 이쪽이 근본 해결이다.
예산 알림: 알림일 뿐 차단이 아니다
가장 먼저 할 일은 예산을 하나 만드는 것이다. 예산이 없으면 비용이 몇 배가 돼도 아무 알림이 오지 않는다.
예산에서 오해하기 쉬운 점이 있다. GCP 예산은 알림 장치다. 금액을 넘어도 과금은 그대로 계속된다.
설정은 단순하게 한다.
- 예산은 하나만 만들고, 그 금액에 50%, 75%, 100% 같은 비율 임계값을 건다. 금액별로 예산을 여러 개 만드는 것보다 관리가 쉽다.
- 실제 지출 기준 알림과 함께 예측 지출 기준 알림을 켠다. “이 추세면 월말에 넘는다"를 미리 알려 주기 때문에 실무에서는 이게 제일 쓸모 있다.
- 범위는 처음엔 결제 계정 전체로 잡는다. 어느 프로젝트에서 터질지 모르는 단계에서는 넓게 보는 게 낫다.
토큰 할당량 거는 법
예산이 사후 알림이라면 할당량은 사용량 자체를 막는다. Vertex AI의 Gemini 모델에는 분당, 일당 입력 토큰 할당량이 모델별로 있다. 확인해 보면 기본값이 무제한인 항목이 많다.
설정 위치는 IAM 및 관리자 → 할당량이다. 필터에 input tokens per minute처럼 검색하면 모델별 항목이 나온다. 유형이 “할당량"인 항목만 수정할 수 있고 “시스템 한도"는 못 바꾼다.
여기서 조심할 함정이 하나 있다. 할당량 목록에 보이는 현재 사용량 숫자는 순간값이다. 그 숫자에 여유 배수를 걸면 평소 피크에서 막힌다. 실제로 확인해 보면 목록 숫자가 기간 피크의 몇 분의 일에 불과한 경우가 흔하다.
값은 이렇게 정한다.
- 항목 오른쪽 차트 아이콘을 눌러 기간을 7일, 가능하면 30일로 바꾼다.
- 그 기간의 최대 사용량을 확인한다. 월초 배치처럼 가끔 튀는 작업이 있으면 30일이 아니면 안 보인다.
- 최대값에 여유 배수(예: 5~10배)를 곱해 한도로 넣는다. 폭주를 막는 게 목적이지 평소 트래픽을 막는 게 아니다.
- 수정할 때 기존보다 크게 줄이면 “기존 트래픽에 영향이 있을 수 있다"는 경고가 뜬다. 피크 기준으로 계산했다면 진행해도 된다.
분당 한도는 폭주를 막고, 일당 한도는 하루 최대 비용을 정한다. 비용 관점에서는 일당 한도가 더 강하다. 다만 하루 사용량은 요일·월초에 따라 편차가 커서 30일 피크를 보고 정해야 한다. 쓰는 모델이 여러 개라면 각 모델마다 따로 걸어야 한다는 것도 놓치기 쉽다.
할당량으로 못 막는 것
할당량을 걸어도 두 가지는 남는다.
월 누적 상한. 분당 한도는 순간 폭주만 막는다. 한도 아래에서 한 달 내내 돌면 비용은 그대로 쌓인다. 진짜 월 상한이 필요하면 예산의 지출 한도 적용 기능(현재 프리뷰)을 써야 한다. 이 기능은 한도에 닿으면 해당 서비스 사용을 실제로 일시중지한다. 운영 중인 서비스라면 장애와 같으니, 쓰더라도 개발·실험용 프로젝트에만 거는 게 현실적이다.
인증. Gemini를 호출하는 경로가 두 가지라는 점을 헷갈리기 쉽다.
| 경로 | 인증 | 걸 수 있는 제한 |
|---|---|---|
Gemini API (generativelanguage.googleapis.com) | API 키 | 키별 리퍼러·IP·앱 제한, API 제한 |
Vertex AI (aiplatform.googleapis.com) | 서비스 계정 + IAM | 권한 범위, 키 관리 |
API 키 제한을 아무리 걸어도 Vertex AI 비용은 막히지 않는다. Vertex AI에서 키 관리는 곧 서비스 계정 관리다. 서비스 계정 JSON 키가 몇 개 발급돼 있는지, 안 쓰는 키가 남아 있지 않은지, aiplatform.user 권한을 가진 주체가 너무 많지 않은지 본다. 키 파일 자체를 없애려면 Workload Identity Federation으로 옮기는 방법이 있다.
프로젝트 분리. 성격이 다른 워크로드(서비스용, 실험용, 앱 인증용 등)를 한 프로젝트에 두면 청구서에서 비용이 섞여 원인을 찾기 어렵다. 프로젝트를 나눠 두면 예산 범위와 할당량도 따로 걸 수 있다.
체크리스트
| 설정 | 위치 | 기준값 정하는 법 | 막는 것 |
|---|---|---|---|
| 예산 + 비율 임계값 | 결제 → 예산 및 알림 | 월 예상 비용, 50/75/100% | 아무것도 막지 않음(알림) |
| 예측 지출 알림 | 같은 예산 안 | 예산과 동일 | 월말 초과를 미리 알림 |
| 분당 입력 토큰 한도 | IAM 및 관리자 → 할당량 | 7~30일 차트 피크 × 여유 배수 | 순간 폭주 |
| 일당 입력 토큰 한도 | 같은 곳 | 30일 일 피크 × 여유 배수 | 하루 최대 비용 |
| 모델별 무제한 항목 | 같은 곳 | 안 쓰는 모델은 낮게 | 안 쓰던 모델로의 우회 |
| 서비스 계정 키 점검 | IAM → 서비스 계정 | 미사용 키 삭제 | 키 유출 시 무단 호출 |
| 프로젝트 분리 | 리소스 관리 | 워크로드 성격별 | 비용 섞임 |
토큰 사용량을 생산성 지표로 보면 안 된다는 이야기를 쓴 적이 있다. 비용 쪽에서도 비슷하다. 토큰은 많이 쓴다고 좋은 게 아니고, 어디서 쓰이는지 보이는 상태가 먼저다. 할당량 화면 자체가 처음이라면 GCP 할당량 초과 에러를 다룬 글에 메뉴 위치를 적어 두었다.
자주 묻는 질문
Q. GCP 예산을 넘으면 과금이 멈추나요?
멈추지 않습니다. 예산은 임계값에 도달했을 때 알림을 보낼 뿐이고 과금은 계속됩니다. 실제로 사용을 멈추려면 예산의 지출 한도 적용 기능(프리뷰)을 써야 하는데, 한도에 걸리면 해당 서비스가 일시중지됩니다.
Q. API 키를 제한하면 Vertex AI 비용도 막히나요?
막히지 않습니다. Vertex AI는 API 키가 아니라 서비스 계정과 IAM 권한으로 인증합니다. API 키 제한은 Gemini API 같은 키 기반 API에만 적용됩니다. Vertex AI 쪽은 서비스 계정 키와 권한을 점검해야 합니다.
Q. 토큰 할당량 값은 어떻게 정하나요?
할당량 목록에 보이는 현재 사용량은 순간값이라 기준으로 쓰면 안 됩니다. 해당 항목의 차트를 열어 7일, 가능하면 30일 기간의 최대 사용량을 확인하고, 그 값에 여유 배수를 곱해 정합니다.