한줄 요약
AI API 키를 클라이언트 코드에 노출하면 13시간 만에 수천만 원 청구가 현실이 된다.
AI 기능을 외주 프로젝트에 붙이는 일이 늘면서, API 요금 폭탄은 이제 에이전시가 실제로 마주치는 리스크가 됐다. 문제는 기술적 실수가 아니라 '빠르게 붙이자'는 압박 속에서 보안 설정을 건너뛰는 것이다. 클라이언트는 청구서를 보고 나서야 에이전시에 책임을 묻는다.
어떻게 요금이 폭발하는가
AI API 키가 브라우저에서 직접 실행되는 클라이언트 사이드 코드에 포함되면, 그 키는 사실상 공개된 것이다. 누구든 개발자 도구를 열면 키를 꺼낼 수 있다. 자동화 봇은 이를 수집해 대량 요청을 보낸다. 실제 사용자 트래픽과 무관하게 API 호출이 발생하기 때문에, 이상 징후를 알아챌 때는 이미 수십만 원에서 수천만 원이 쌓인 뒤다.
특히 위험한 구조는 다음과 같다.
- 프론트엔드 JavaScript 코드에 API 키를 하드코딩하거나 환경변수로 주입
- 제한(Restriction) 없는 범용 API 키를 그대로 사용
- 예산 알림을 설정했지만 실시간이 아닌 수 시간 지연된 알림에 의존
알림이 오는 시점에는 이미 피해가 누적된 상태다. 알림은 예방이 아니라 사후 통보에 가깝다.
에이전시가 놓치기 쉬운 설정 세 가지
1. API 키 제한(Restriction) 설정
키를 발급받는 것만큼, 그 키의 사용 범위를 제한하는 것이 필수다. 특정 API 서비스만 허용하고, HTTP 리퍼러나 IP 주소 기반으로 호출 출처를 제한해야 한다. 범용 키는 다른 Google Cloud 서비스까지 접근 가능한 경우가 많아 피해 범위가 커진다.
2. 서버 사이드로 AI 호출 이관
클라이언트에서 직접 AI API를 호출하는 구조를 피해야 한다. Cloud Functions, Cloud Run, 또는 자체 백엔드 서버를 경유하게 만들면 API 키가 외부에 노출되지 않는다. 요청 횟수 제한, 사용자 인증 연동, 이상 트래픽 탐지도 서버 사이드에서 훨씬 효과적으로 구현할 수 있다.
3. 지출 한도(Spend Cap) 설정
예산 알림과 지출 한도는 다르다. 알림은 초과 후 통보이고, 지출 한도는 초과 시 서비스를 차단한다. 프로젝트 단위로 월 지출 한도를 설정해두면, 이상 사용이 발생해도 피해 규모가 통제 가능한 범위 안에 머문다. 클라이언트 프로젝트라면 반드시 이 설정을 납품 체크리스트에 포함해야 한다.
에이전시와 클라이언트 사이 책임 소재는 어디에 있나
요금 폭탄이 발생했을 때 클라우드 제공사는 '본인 프로젝트에서 발생한 유효한 사용'으로 판단한다. 이의 제기가 받아들여지지 않는 경우가 많다. 즉, 누가 호출했든 프로젝트 소유자가 비용을 부담한다.
에이전시 입장에서 이건 계약 리스크다. 납품 전 보안 설정이 완료됐음을 문서화하지 않으면, 이후 분쟁에서 불리한 위치에 선다. 반대로 보안 체크리스트를 납품 프로세스에 포함하고 클라이언트에게 서명을 받아두면, 운영 이후 발생하는 문제에 대한 책임 소재가 명확해진다.
클라이언트에게 설명해야 하는 운영 리스크
AI 기능은 붙이기 쉽지만 운영은 다르다. 클라이언트는 API 요금이 사용량에 비례한다는 것은 알아도, 외부 봇이 자신의 API 키를 악용할 수 있다는 사실은 모르는 경우가 많다.