오류 코드

오류 코드 (Error codes)

OpenAI API를 쓰다 보면 다양한 오류 코드를 만나게 돼요. 이 가이드는 API와 공식 Python 라이브러리에서 볼 수 있는 오류 코드의 개요와, 각 오류에 대한 상세 안내를 담고 있어요.

출처: 문서

본문

API 오류

코드 개요
400 - Invalid service_tier argument 원인: 요청하거나 해석된 service tier가 프로젝트에서 허용되지 않아요.
해결: service_tier을 프로젝트에서 허용되는 티어로 설정하거나, 프로젝트 설정에서 허용 티어를 업데이트하세요.
401 - Invalid Authentication 원인: 잘못된 인증
해결: 올바른 API 키와 요청 조직을 사용하고 있는지 확인하세요.
401 - Incorrect API key provided 원인: 요청한 API 키가 올바르지 않아요.
해결: 사용 중인 API 키가 올바른지 확인하고, 브라우저 캐시를 지우거나 새 키를 생성하세요.
401 - You must be a member of an organization to use the API 원인: 계정이 조직의 일부가 아니에요.
해결: 새 조직에 추가되도록 문의하거나 조직 관리자에게 조직에 초대해 달라고 요청하세요.
401 - IP not authorized 원인: 요청 IP가 프로젝트나 조직의 구성된 IP 허용 목록과 일치하지 않아요.
해결: 올바른 IP에서 요청을 보내거나, IP 허용 목록 설정을 업데이트하세요.
403 - Country, region, or territory not supported 원인: 지원되지 않는 국가·지역·영토에서 API에 접근하고 있어요.
해결: 자세한 내용은 이 페이지를 확인하세요.
429 - Credit balance exhausted 코드: credit_balance_exhausted
원인: 조직에 선불 크레딧이 남아 있지 않아요.
해결: 크레딧 추가로 API를 계속 사용하세요.
429 - Rate limit reached for requests 원인: 요청을 너무 빠르게 보내고 있어요.
해결: 요청에 페이스를 두고, Retry-After 헤더가 있으면 그에 따르세요. 속도 제한 가이드를 읽어 보세요.
429 - Slow down 유형: rate_limit_error
코드: slow_down
원인: 요청 속도가 너무 빨리 증가했어요.
해결: Retry-After 헤더가 있으면 따르고, 요청 속도를 줄인 뒤 점진적으로 높이세요.
429 - Organization spend limit reached 코드: organization_spend_limit_exceeded
원인: 조직이 강제된 지출 한도에 도달했어요.
해결: 조직 지출 한도를 늘리거나 제거하세요.
429 - Project spend limit reached 코드: project_spend_limit_exceeded
원인: 프로젝트가 강제된 지출 한도에 도달했어요.
해결: 프로젝트 설정에서 지출 한도를 늘리거나 제거하세요.
429 - Organization usage limit reached 코드: organization_usage_limit_exceeded
원인: 조직이 OpenAI가 배정한 사용 한도에 도달했어요.
해결: 더 높은 승인된 사용 한도를 요청하거나 지원팀에 문의하세요.
500 - The server had an error while processing your request 원인: 서버 쪽 문제예요.
해결: 잠시 기다린 뒤 재시도하고, 문제가 지속되면 문의하세요. 상태 페이지를 확인하세요.
503 - Model temporarily overloaded 유형: service_unavailable_error
코드: server_is_overloaded
원인: 요청한 모델이 일시적으로 과부하 상태예요.
해결: Retry-After 헤더가 있으면 따르고 재시도하세요.

청구 관련 오류는 error.code를 검사해 구체적 원인을 파악하세요. 더 넓은 error.type은 여전히 insufficient_quota일 수 있어요.

청구·지출·할당량 오류를 재시도해도 API 접근이 복구되지 않아요. 다음 요청을 보내기 전에 관련 크레딧이나 한도를 업데이트하세요.

WebSocket 모드 오류

Responses API WebSocket 모드를 사용한다면 이런 추가 오류를 볼 수 있어요.

  • previous_response_not_found: previous_response_id를 사용 가능한 상태에서 해석할 수 없어요. 전체 입력 컨텍스트와 previous_response_id를 null로 설정해 재시도하세요.
  • websocket_connection_limit_reached: 연결이 60분 한도에 도달했어요. 새 WebSocket 연결을 열어 계속하세요.

400 - Invalid service_tier argument

API는 프로젝트에서 허용되지 않는 service tier를 요청이 선택하거나 해석할 때 error.param이 service_tier로 설정된 invalid_request_error로 "Invalid service_tier argument: The requested service tier is not allowed for this project." 메시지를 반환해요.

프로젝트 제한은 default, flex, priority service tier에 적용돼요. fast service tier는 priority로 평가돼요. service_tier를 생략하거나 auto로 설정한 요청도 허용되지 않는 티어로 해석되면 이 오류를 반환할 수 있어요. Scale Tier는 이 프로젝트 정책 밖에 있어요.

이 오류를 해결하려면:

  • 프로젝트 설정에서 허용 service tier를 확인하세요.
  • service_tier을 프로젝트에서 허용되는 티어로 설정하세요.
  • 요청이 auto를 사용하거나 service_tier을 생략하면 해석된 티어가 허용되도록 프로젝트 설정을 업데이트하세요.

401 - Invalid Authentication

이 오류 메시지는 인증 자격 증명이 유효하지 않다는 뜻이에요. 여러 이유가 있을 수 있는데, 예를 들면:

  • 취소(revoked)된 API 키를 사용 중.
  • 요청 조직이나 프로젝트에 배정된 것과 다른 API 키를 사용 중.
  • 호출하는 엔드포인트에 필요한 권한이 없는 API 키를 사용 중.

해결하려면:

  • 요청 헤더에서 올바른 API 키와 조직 ID를 사용하고 있는지 확인하세요. API 키와 조직 ID는 계정 설정에서 찾거나, General settings에서 원하는 프로젝트를 선택해 프로젝트별 키를 찾을 수 있어요.
  • API 키가 유효한지 확실하지 않으면 새 키를 생성하세요. 요청에서 기존 키를 새 키로 바꾸고 모범 사례 가이드를 따르세요.

401 - Incorrect API key provided

이 오류 메시지는 요청에서 사용하는 API 키가 올바르지 않다는 뜻이에요. 여러 이유가 있을 수 있는데, 예를 들면:

  • API 키에 오타나 공백이 있음.
  • 다른 조직이나 프로젝트에 속한 API 키를 사용 중.
  • 삭제되거나 비활성화된 API 키를 사용 중.
  • 오래되고 취소된 API 키가 로컬에 캐시되어 있을 수 있음.

해결하려면:

  • 브라우저 캐시와 쿠키를 지운 뒤 다시 시도하세요.
  • 요청 헤더에서 올바른 API 키를 사용하고 있는지 확인하세요.
  • API 키가 올바른지 확실하지 않으면 새 키를 생성하세요. 코드베이스에서 기존 키를 바꾸고 모범 사례 가이드를 따르세요.

401 - You must be a member of an organization to use the API

이 오류 메시지는 계정이 조직의 일부가 아니라는 뜻이에요. 여러 이유가 있을 수 있는데, 예를 들면:

  • 이전 조직을 떠났거나 제거됨.
  • 이전 프로젝트를 떠났거나 제거됨.
  • 조직이 삭제됨.

해결하려면:

  • 이전 조직을 떠났거나 제거됐다면 새 조직을 요청하거나 기존 조직에 초대받을 수 있어요.
  • 새 조직을 요청하려면 help.openai.com으로 문의하세요.
  • 기존 조직 소유자는 Team 페이지에서 조직에 초대하거나 Settings 페이지에서 새 프로젝트를 만들 수 있어요.
  • 이전 프로젝트를 떠났거나 제거됐다면 조직·프로젝트 소유자에게 추가해 달라고 요청하거나 새 프로젝트를 만드세요.

429 - Credit balance exhausted

credit_balance_exhausted 오류는 조직의 선불 크레딧 잔액이 소진됐다는 뜻이에요.

API 접근을 복구하려면 청구 설정에서 크레딧을 추가하세요.

429 - Rate limit reached for requests

이 오류 메시지는 배정된 API 속도 제한에 도달했다는 뜻이에요. 짧은 시간에 너무 많은 토큰이나 요청을 보내 허용된 요청 수를 초과했다는 의미예요. 여러 이유가 있을 수 있는데:

  • 자주 또는 동시에 요청하는 루프나 스크립트를 사용 중.
  • API 키를 다른 사용자·애플리케이션과 공유 중.
  • 속도 제한이 낮은 무료 플랜을 사용 중.
  • 프로젝트에 정의된 한도에 도달.

해결하려면:

  • 요청에 페이스를 두고 불필요·중복 호출을 피하세요.
  • Retry-After 헤더가 있으면 지정한 시간 이상 기다린 뒤 다시 시도하세요. 없으면 지터를 곁들인 지수 백오프를 사용하고 재시도 수를 제한하세요. SDK의 긴 서버 지연 지원은 버전·구성에 따라 달라져요. 속도 제한 가이드를 읽어 보세요.
  • 조직을 다른 사용자와 공유한다면 한도가 사용자별이 아니라 조직별로 적용된다는 점을 기억하세요. 팀의 다른 사용량도 한도에 기여하므로 확인할 가치가 있어요.
  • 무료나 저티어 플랜을 사용한다면 더 높은 속도 제한을 제공하는 pay-as-you-go 플랜으로 업그레이드하는 걸 고려하세요. 각 플랜의 제한은 속도 제한 가이드에서 비교할 수 있어요.
  • 조직 소유자에게 프로젝트의 속도 제한을 늘려 달라고 요청하세요.

429 - Slow down

rate_limit_error 유형과 slow_down 코드를 가진 429 응답은 요청 속도가 서비스가 안전하게 처리할 수 있는 것보다 빠르게 증가했다는 뜻이에요. 트래픽이 분당 요청·분당 토큰 한도 안에 있을 때도 발생할 수 있어요.

경험칙으로, 트래픽이 분당 100만 입력 토큰(TPM)에 도달하면 15분마다 50% 이하로만 늘리세요. 램프 속도 제한이 적용되는 정확한 지점은 모델과 트래픽 조건에 따라 달라질 수 있어요.

해결하려면:

  • Retry-After 헤더가 있으면 지정한 시간 이상 기다렸다가 재시도하세요. 없으면 재시도 간격을 늘리고 작은 무작위 지연을 추가하세요.
  • 요청 속도를 줄인 뒤 점진적으로 높이세요.
  • 트래픽 패턴을 안정적으로 유지해 또 다른 slow_down 오류 가능성을 줄이세요.

pay-as-you-go 트래픽이 램프 속도 제한에 정기적으로 도달하는 엔터프라이즈 고객은 적격 모델에서 더 예측 가능한 용량을 위해 Scale Tier를 고려할 수 있어요. GPT-5.6 이후 모델은 Reserved Tier를 참고하세요. 이 용량 옵션은 위 복구 단계를 대체하지 않아요. Retry-After가 있으면 계속 따르고 트래픽을 점진적으로 올리세요.

429 - Organization spend limit reached

organization_spend_limit_exceeded 오류는 조직이 강제된 월간 지출 한도에 도달했다는 뜻이에요. 그 한도는 조직의 모든 프로젝트에 걸친 API 트래픽에 적용돼요.

API 접근을 복구하려면 조직 한도 설정에서 한도를 늘리거나 제거하세요. 그렇지 않으면 월간 한도가 리셋된 뒤 접근이 재개돼요.

429 - Project spend limit reached

project_spend_limit_exceeded 오류는 프로젝트가 강제된 월간 지출 한도에 도달했다는 뜻이에요. 다른 프로젝트는 자체 한도나 조직 한도에 도달하지 않는 한 계속할 수 있어요.

API 접근을 복구하려면 프로젝트 설정에서 한도를 늘리거나 제거하세요. 그렇지 않으면 월간 한도가 리셋된 뒤 접근이 재개돼요.

429 - Organization usage limit reached

organization_usage_limit_exceeded 오류는 조직이 OpenAI가 배정한 월간 사용 한도에 도달했다는 뜻이에요. 이 한도는 여러분이 구성하는 조직·프로젝트 지출 한도와 별개예요.

API 접근을 복구하려면 더 높은 승인된 사용 한도를 요청하거나 지원팀에 문의하세요.

503 - Model temporarily overloaded

service_unavailable_error 유형과 server_is_overloaded 코드를 가진 503 응답은 요청한 모델이 현재 요청을 처리할 충분한 용량이 없다는 뜻이에요.

Retry-After 헤더가 있으면 지정한 시간 이상 기다렸다가 재시도하세요. 없으면 재시도 간격을 늘리세요. 오류가 계속되면 상태 페이지에서 진행 중인 사고를 확인하세요.

Python 라이브러리 오류 유형

Python은 429 응답에 RateLimitError, 503 응답에 InternalServerError를 발생시켜요. 스로틀링과 과부하에 대해 이 클래스 중 하나만 잡았다면 둘 다 처리하고 error.code를 검사하세요. 예를 들어 비디오 과부하는 이제 429가 아닌 503을 반환해요. 엔드포인트별 변경 사항은 마이그레이션 지침을 참고하세요.

유형 개요
APIConnectionError 원인: 서비스에 연결하는 문제
해결: 네트워크 설정, 프록시 구성, SSL 인증서, 방화벽 규칙을 확인하세요.
APITimeoutError 원인: 요청이 타임아웃됨
해결: 잠시 기다린 뒤 재시도하고, 문제가 지속되면 문의하세요.
AuthenticationError 원인: API 키나 토큰이 유효하지 않거나, 만료되거나, 취소됨
해결: API 키나 토큰을 확인해 올바르고 활성 상태인지 확인하세요. 계정 대시보드에서 새 키를 생성해야 할 수 있어요.
BadRequestError 원인: 요청이 잘못됐거나 토큰·입력 같은 필수 파라미터가 누락됨
해결: 오류 메시지가 구체적 오류를 안내해 줘요. 호출하는 특정 API 메서드의 문서를 확인하고 유효·완전한 파라미터를 보내고 있는지 확인하세요. 요청 데이터의 인코딩·형식·크기도 확인해야 할 수 있어요.
ConflictError 원인: 다른 요청이 리소스를 업데이트함
해결: 리소스를 다시 업데이트하고 다른 요청이 업데이트하지 않는지 확인하세요.
InternalServerError 원인: 서버 쪽 문제
해결: 잠시 기다린 뒤 재시도하고, 문제가 지속되면 문의하세요.
NotFoundError 원인: 요청한 리소스가 존재하지 않음
해결: 올바른 리소스 식별자를 사용하고 있는지 확인하세요.
PermissionDeniedError 원인: 요청한 리소스에 접근 권한이 없음
해결: 올바른 API 키, 조직 ID, 리소스 ID를 사용하고 있는지 확인하세요.
RateLimitError 원인: 배정된 속도 제한에 도달하거나 트래픽을 너무 빨리 증가시킴
해결: 요청에 페이스를 두고 Retry-After가 있으면 재시도 한도 내에서 따르세요. 속도 제한 가이드를 읽어 보세요.
UnprocessableEntityError 원인: 형식은 올바른데 요청을 처리할 수 없음
해결: 요청을 다시 시도하세요.

APIConnectionError

APIConnectionError는 요청이 서버에 도달하지 못했거나 보안 연결을 설정하지 못했다는 뜻이에요. 네트워크 문제, 프록시 구성, SSL 인증서, 방화벽 규칙 때문일 수 있어요.

APIConnectionError를 만나면 다음을 시도하세요.

  • 네트워크 설정을 확인하고 안정적이고 빠른 인터넷 연결이 있는지 확인하세요. 다른 네트워크로 전환하거나, 유선 연결을 쓰거나, 대역폭을 쓰는 기기·앱을 줄여야 할 수 있어요.
  • 프록시 구성을 확인하고 서비스와 호환되는지 확인하세요. 프록시 설정을 업데이트하거나, 다른 프록시를 쓰거나, 프록시를 완전히 우회해야 할 수 있어요.
  • SSL 인증서를 확인하고 유효하고 최신인지 확인하세요. 인증서를 설치·갱신하거나, 다른 인증 기관을 쓰거나, SSL 검증을 비활성화해야 할 수 있어요.
  • 방화벽 규칙을 확인하고 서비스를 차단·필터링하지 않는지 확인하세요. 방화벽 설정을 수정해야 할 수 있어요.
  • 해당된다면 컨테이너가 트래픽을 주고받을 올바른 권한이 있는지 확인하세요.
  • 문제가 지속되면 지속 오류 다음 단계 섹션을 확인하세요.

APITimeoutError

APITimeoutError는 요청이 완료되는 데 너무 오래 걸려 서버가 연결을 닫았다는 뜻이에요. 네트워크 문제, 서비스의 과부하, 더 많은 처리 시간이 필요한 복잡한 요청 때문일 수 있어요.

APITimeoutError를 만나면 다음을 시도하세요.

  • 몇 초 기다렸다가 재시도하세요. 네트워크 정체나 서비스 부하가 줄어두 번째 시도에 성공할 수 있어요.
  • 네트워크 설정을 확인하고 안정적이고 빠른 연결이 있는지 확인하세요.
  • 문제가 지속되면 지속 오류 다음 단계 섹션을 확인하세요.

AuthenticationError

AuthenticationError는 API 키나 토큰이 유효하지 않거나, 만료되거나, 취소됐다는 뜻이에요. 오타, 형식 오류, 보안 침해 때문일 수 있어요.

AuthenticationError를 만나면 다음을 시도하세요.

  • API 키나 토큰을 확인해 올바르고 활성 상태인지 확인하세요. API Key 대시보드에서 새 키를 생성하거나, 공백·문자가 없는지 확인하거나, 여러 개가 있으면 다른 키·토큰을 써야 할 수 있어요.
  • 올바른 형식을 따랐는지 확인하세요.

BadRequestError

BadRequestError(이전 InvalidRequestError)는 요청이 잘못됐거나 토큰·입력 같은 필수 파라미터가 누락됐다는 뜻이에요. 오타, 형식 오류, 코드의 로직 오류 때문일 수 있어요.

BadRequestError를 만나면 다음을 시도하세요.

  • 오류 메시지를 주의 깊게 읽고 구체적 오류를 파악하세요. 어떤 파라미터가 유효하지 않거나 누락됐고 어떤 값·형식이 기대됐는지 안내해 줘요.
  • 호출하던 특정 API 메서드의 API Reference를 확인하고 유효·완전한 파라미터를 보내고 있는지 확인하세요. 파라미터 이름·유형·값·형식을 검토해 문서와 일치하는지 확인해야 할 수 있어요.
  • 요청 데이터의 인코딩·형식·크기를 확인하고 서비스와 호환되는지 확인하세요. 데이터를 UTF-8로 인코딩하거나 JSON으로 형식화하거나, 너무 크면 압축해야 할 수 있어요.
  • Postman이나 curl 같은 도구로 요청을 테스트해 예상대로 작동하는지 확인하세요. 코드를 디버깅하고 요청 로직의 오류·불일치를 고쳐야 할 수 있어요.
  • 문제가 지속되면 지속 오류 다음 단계 섹션을 확인하세요.

InternalServerError

InternalServerError는 요청을 처리하는 동안 서버 쪽에서 문제가 발생했다는 뜻이에요. 일시적 오류, 버그, 시스템 중단 때문일 수 있어요.

불편을 드려 죄송하고, 가능한 한 빨리 문제를 해결하기 위해 노력하고 있어요. 자세한 내용은 시스템 상태 페이지에서 확인할 수 있어요.

InternalServerError를 만나면 다음을 시도하세요.

  • 몇 초 기다렸다가 재시도하세요. 문제가 빠르게 해결되어 두 번째 시도에 성공할 수 있어요.
  • 상태 페이지에서 서비스에 영향을 주는 진행 중인 사고나 유지보수를 확인하세요. 활성 사고가 있으면 업데이트를 따르고 해결될 때까지 기다린 뒤 재시도하세요.
  • 문제가 지속되면 지속 오류 다음 단계 섹션을 확인하세요.

지원팀이 문제를 조사하고 가능한 한 빨리 회신할 거예요. 수요가 높아 지원 대기 시간이 길 수 있다는 점을 참고하세요. 커뮤니티 포럼에 글을 올릴 수도 있지만 민감한 정보는 반드시 제외하세요.

RateLimitError

RateLimitError는 배정된 속도 제한에 도달했다는 뜻이에요. 주어진 시간에 너무 많은 토큰이나 요청을 보내 서비스가 일시적으로 더 이상 보내지 못하게 차단했다는 의미예요.

리소스를 공정하고 효율적으로 사용하고 서비스의 남용·과부하를 방지하기 위해 속도 제한을 두고 있어요.

RateLimitError를 만나면 다음을 시도하세요.

  • 더 적은 토큰·요청을 보내거나 속도를 늦추세요. 요청 빈도·규모를 줄이거나, 토큰을 배치하거나, Retry-After가 없을 때 지수 백오프를 써야 할 수 있어요. 자세한 내용은 속도 제한 가이드를 읽어 보세요.
  • Retry-After가 있을 때는 지정한 시간 이상 기다렸다가 재시도하세요. Python 라이브러리는 서버 지연이 지원 한도를 초과하면 자동 재시도를 멈출 수 있어요. 애플리케이션 수준에서 재시도한다면 원래 지연을 존중하고 SDK 재시도를 고려하세요.
  • 계정 대시보드에서 API 사용 통계를 확인할 수도 있어요.

지속 오류

문제가 지속되면 지원팀에 채팅으로 문의하고 다음 정보를 제공하세요.

  • 사용 중이던 모델
  • 받은 오류 메시지와 코드
  • 보낸 요청 데이터와 헤더
  • 요청의 타임스탬프와 시간대
  • 문제 진단에 도움이 될 다른 관련 세부 정보

지원팀이 조사하고 가능한 한 빨리 회신할 거예요. 수요가 높아 대기 시간이 길 수 있다는 점을 참고하세요. 커뮤니티 포럼에 글을 올릴 수도 있지만 민감한 정보는 제외하세요.

오류 처리

API가 반환한 오류를 프로그래밍 방식으로 처리하는 것을 권장해요. 이렇게 하려면 아래 같은 코드 스니펫을 쓰면 돼요.

import OpenAI from "openai";

const client = new OpenAI();

try {
  const response = await client.responses.create({
    model: "gpt-6-astra",
    input: "Hello world",
  });
  console.log(response.output_text);
} catch (error) {
  if (error instanceof OpenAI.APIConnectionError) {
    console.error("Failed to connect to the OpenAI API:", error.message);
  } else if (error instanceof OpenAI.RateLimitError) {
    console.error("OpenAI API request exceeded its rate limit:", error.message);
  } else if (error instanceof OpenAI.APIError) {
    console.error("OpenAI API returned an error:", error.status, error.message);
  } else {
    throw error;
  }
}
import openai
from openai import OpenAI

client = OpenAI()

try:
    response = client.responses.create(model="gpt-6-astra", input="Hello world")
except openai.APIConnectionError as e:
    print(f"Failed to connect to OpenAI API: {e}")
except openai.RateLimitError as e:
    print(f"OpenAI API request exceeded rate limit: {e}")
except openai.APIError as e:
    print(f"OpenAI API returned an API Error: {e}")
else:
    print(response.output_text)
package main

import (
	"context"
	"errors"
	"fmt"

	"github.com/openai/openai-go/v3"
	"github.com/openai/openai-go/v3/responses"
)

func main() {
	client := openai.NewClient()
	response, err := client.Responses.New(context.Background(), responses.ResponseNewParams{
		Model: "gpt-6-astra",
		Input: responses.ResponseNewParamsInputUnion{OfString: openai.String("Hello world")},
	})
	if err != nil {
		var apiError *openai.Error
		if errors.As(err, &apiError) {
			fmt.Println("OpenAI API returned an API error:", apiError)
			return
		}
		fmt.Println("Failed to connect to OpenAI API:", err)
		return
	}
	fmt.Println(response.OutputText())
}
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.errors.OpenAIServiceException;
import com.openai.models.responses.ResponseCreateParams;

try {
  var response =
      client
          .responses()
          .create(
              ResponseCreateParams.builder().model("gpt-6-astra").input("Say hello.").build());

  response.output().stream()
      .flatMap(item -> item.message().stream())
      .flatMap(message -> message.content().stream())
      .flatMap(content -> content.outputText().stream())
      .forEach(text -> System.out.println(text.text()));
} catch (OpenAIServiceException error) {
  System.err.println(error.getMessage());
}
require "openai"

client = OpenAI::Client.new
begin
  response = client.responses.create(model: "gpt-6-astra", input: "Say hello.")
  puts(response.output_text)
rescue OpenAI::Errors::APIError => error
  warn(error.message)
end

더 알아보기 (Learn more)

관련 문서: 속도 제한 가이드, 응답 오류 참조, API 키 안전 모범 사례를 함께 보면 도움이 돼요.