AI API 붙였더니 요금이 갑자기 튀었을 때
키가 화면·저장소에 새거나, 한도·재시도 없이 돌려서 청구가 커진 상황을 막는 순서를 정리합니다.
한 줄 결론
서비스 비밀번호(API key)는 서버 뒤에 두고, 호출 한도·로그·모델 선택을 코드와 대시보드 양쪽에서 막아야 합니다.
아래 내용은 초보 바이브코더를 위한 일반 안내입니다. 서비스·지역·약관에 따라 달라질 수 있으며, 실제 사업화·운영 전에는 해당 분야 전문가 확인이 필요합니다.
먼저 용어부터 — 그다음 실행 프롬프트
- API Key
- AI 서비스에 요청할 때 쓰는 비밀번호 같은 문자열
- max_tokens
- 답변 최대 길이 — 길수록 비용 증가
API Key
이건 API Key입니다
AI 서비스에 ‘나’라고 증명하는 비밀번호 문자열입니다. 브라우저·GitHub에 올리면 남의 과금이 됩니다.
- 서버 환경 변수에만 저장합니다
- NEXT_PUBLIC_ 접두사에 키를 넣지 않습니다
- 유출되면 즉시 rotate(재발급)합니다
이런 곳에 · OpenAI·DeepSeek·Gemini·Anthropic 모든 API 호출
지금 할 일 · .env.local에 KEY=... → .gitignore 확인 → 서버 route에서만 읽기
비용·주의 · 키 유출 = 타인 사용량 과금. 한도·알림을 먼저 켭니다.
AI 프롬프트 보기
Next.js에서 API Key가 클라이언트 번들에 안 나가게 점검. .env 규칙, git grep 패턴, rotate 순서.
Environment variables
이건 env(환경변수)입니다
비밀값·설정을 코드 밖에 두는 칸입니다. 로컬은 .env.local, 배포는 Vercel Environment Variables.
- 비밀은 Git에 커밋하지 않습니다
- 로컬과 배포 값이 다르면 ‘로컬만 됨’이 납니다
- 이름만 같아도 값이 비면 500이 납니다
이런 곳에 · OAuth secret · DATABASE_URL · API Key · CRON_SECRET
지금 할 일 · .env.example에 이름만 적고, 실제 값은 .env.local에만
비용·주의 · 잘못된 env로 무한 재시도하면 API 비용이 늘 수 있습니다.
AI 프롬프트 보기
Next.js + Vercel env 점검. 로컬은 되는데 배포만 실패. 필요한 키 목록(값 제외), Production 탭 확인 순서.
바로 실행 — AI 프롬프트
OpenAI API Key를 Next.js에 안전하게 넣으려 합니다. .env.local 이름·서버 route 예시·NEXT_PUBLIC_ 금지 목록·git grep으로 키 검색 명령.
막히면 다시 넣을 프롬프트
API 401/429. provider: [ ], max_tokens: [ ], 에러 본문: [ ]. 한도·키 rotate 순서.
럭키스팟 해석은 원출처를 바탕으로 한 실전 안내입니다. 요금·약관·라이선스는 제공자 페이지 최신 조건을 결제·배포 전에 대조하세요. 실제 사업화 전에는 해당 분야 전문가 확인이 필요할 수 있습니다.
초보자 한 줄 설명
API 키는 비밀번호+신용카드입니다. 브라우저에 넣으면 누구나 쓸 수 있습니다.
먼저 AI 에이전트에게 붙여넣을 프롬프트
Next.js에서 OpenAI(또는 [제공자]) API를 안전하게 붙이고 싶다. 1) 키가 클라이언트에 안 가는 구조 설명 2) app/api/... route 최소 예시(키는 process.env) 3) max_tokens·timeout·재시도 상한 권장값 4) 대시보드에서 켤 알림/한도 설정 항목 이름 5) 키 유출 시 rotate 체크리스트
AI가 해줄 수 있는 일
- 서비스 비밀번호를 숨기는 서버 문(route) 코드
- AI 답변 길이·비용 제한(max_tokens)·timeout·재시도 상한
- mock 모드로 테스트 시 실제 과금 안 나게 분기
사람이 직접 해야 하는 외부 설정
- OpenAI/Anthropic/Gemini 대시보드에서 spending limit·알림 켜기
- 서비스 비밀번호를 .env.local·Vercel에만 넣기
- 유출 시 즉시 키 폐기·재발급
외부 설정 경로
- OpenAI → Settings → Limits / Usage
- Anthropic → Settings → Limits
- Google AI Studio → API Keys / Quotas
- Vercel → Project → Settings → Environment Variables
제대로 됐는지 확인하는 방법
- 브라우저 번들·소스에서 API key 검색 시 없음
- 짧은 테스트 1회 후 대시보드 usage 증가 확인
- 한도 도달 시 앱이 멈추거나 친절한 에러를 보여주는지
실행 순서
- 1서버 라우트로 프록시
- 2대시보드 spending limit
- 3코드에 timeout·retry cap
- 4CI는 mock
- 5usage 주기 점검
막히면 다시 AI에게 줄 프롬프트
API 비용이 [갑자기 증가 / 키 유출 의심 / 무한 재시도]. 제공자: [ ], 급증 시각: [ ], 최근 배포: [ ]. 로그·cron 중복·NEXT_PUBLIC_ 노출·rotate 순서만.
막히는 지점
- NEXT_PUBLIC_ API 키
- 크론+웹훅 중복 호출
- while 재시도 루프
- 공개 /api/chat 무인증
비용·보안·저작권·약관 주의
- PII 로그 금지
- 저작권·학습 opt-out 약관 확인
- 무한 재시도·공개 엔드포인트·큰 모델 기본값이 대표 원인. 가격은 공식 pricing 확인.
대안 도구
로컬 Ollama · 더 작은 모델 · 캐시 레이어
럭키스팟 판단
키 유출 1번이 월 청구서로 이어집니다. spending limit 켜고 키 rotate 습관부터.
이런 사람이 보면 좋음
- 챗봇·요약·이미지 생성을 처음 API로 붙이는 사람
- 개발 중 요금이 갑자기 올라 걱정되는 사람
- 프론트에서 바로 API를 호출하도록 AI가 짜 준 코드를 받은 사람
초보자가 보통 착각하는 지점
- NEXT_PUBLIC_OPENAI_API_KEY처럼 프론트에 키를 넣어도 괜찮다고 생각합니다. 키는 곧 지갑입니다.
- 개발용 키에 결제 한도를 안 걸어 두고, 루프·재시도·크론이 같은 키를 씁니다.
- 가장 비싼 모델을 기본값으로 두고, 짧은 테스트에도 항상 그 모델을 씁니다.
- 에러 시 무한 재시도를 넣으면 알아서 멈출 거라 믿습니다.
실제 점검 체크리스트
- 서비스 비밀번호는 비밀키를 숨기는 서버 문(route)에서만 쓰고, 브라우저 번들에 없는지 확인합니다.
- OpenAI/Anthropic/Gemini → API Keys / Usage / Limits에서 월 한도·알림을 설정했는지 확인합니다.
- 요청마다 AI 답변 길이·비용 제한(max_tokens)·timeout·재시도 상한을 코드에 넣었는지 확인합니다.
- 개발·배포용 서비스 비밀번호를 분리했는지 확인합니다.
- 프롬프트·응답 로그에 개인정보가 남지 않게 마스킹합니다.
- 로컬·CI에서는 mock 모드로 실제 과금 API를 호출하지 않도록 분기합니다.
실패했을 때 보는 순서
- 1대시보드 usage·billing에서 급증 시각과 해당 API 키·엔드포인트를 확인합니다.
- 2Git history·Vercel env·클라이언트 번들에 키가 노출됐는지 검색합니다.
- 3크론·웹훅·백그라운드 job이 중복 호출하지 않는지 로그를 봅니다.
- 4재시도·while 루프·스트리밍 미종료가 있는지 코드를 추적합니다.
- 5노출된 키는 즉시 rotate(폐기 후 재발급)합니다.
- 6더 작은 모델·짧은 컨텍스트로 바꿔 비용을 낮춥니다.
배포 전 확인 항목
- 프로덕션 키에 spending limit 또는 알림이 켜져 있습니다.
- 공개 페이지에서 누구나 무제한 호출할 수 있는 엔드포인트가 없습니다(인증·rate limit).
- npm test / CI가 실 API 없이 통과합니다.
- 요금은 공식 pricing 페이지에서 직접 확인했고, 여기서 가격을 단정하지 않습니다.
보안·법적 주의
- AI 생성 결과의 저작권·상업적 이용 조건은 모델·서비스 약관에 따릅니다. 실제 사업화 전 법무 확인이 필요할 수 있습니다.
- 사용자 데이터를 외부 AI에 보낼 때는 개인정보 처리·동의 범위를 검토하세요.
- API 키 유출 시 즉시 폐기·재발급하고, 영향 범위를 기록하세요.
- 의료·법률·금융 조언을 AI가 대신한다고 표시하지 마세요.