API 키
API 키는 Brevo API 인증에 사용하는 기본 수단입니다. 프로그래밍 방식으로 계정에 접근하는 간단하고 안전한 방법을 제공합니다.
API 키란?
API 키는 Brevo API에 요청을 보낼 때 애플리케이션을 인증하는 고유 식별자입니다. 각 키는 64자 문자열이며, 식별자와 비밀번호 역할을 동시에 합니다.
Example API key: xkeysib-a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456-Ab1Cd2Ef3Gh4API 키 생성하기
단계별 가이드
- Brevo에 로그인: Brevo 대시보드에 접속합니다
- 설정으로 이동: 프로필 → 설정을 클릭합니다
- API 키로 이동: 왼쪽 메뉴에서 “API Keys”를 선택합니다
- 새 키 생성: “Generate a New API Key”를 클릭합니다
- 키 이름 지정: 용도를 알 수 있는 이름을 지정합니다 (예: “Production App”, “Development Testing”)
- 권한 설정: 적절한 접근 수준을 선택합니다
- 생성: “Generate”를 클릭하고 키를 즉시 복사합니다
API 키 이름 규칙
키의 용도를 알아볼 수 있는 이름을 사용합니다:
production-web-appstaging-environmentmobile-app-ioswebhook-listenerdata-sync-service
API 키 유형과 권한
전체 접근 키
Permissions: All API endpointsUse cases: Complete application integrationRisk level: High - protect carefully읽기 전용 키
Permissions: GET requests onlyUse cases: Analytics, reporting, dashboardsRisk level: Low - limited access발송 전용 키
Permissions: Transactional email sendingUse cases: Application notifications, receiptsRisk level: Medium - can send emails연락처 관리 키
Permissions: Contact CRUD operationsUse cases: CRM integrations, form submissionsRisk level: Medium - data modificationAPI 키 사용하기
헤더 인증
api-key 헤더에 API 키를 포함합니다:
GET /v3/account HTTP/1.1Host: api.brevo.comAccept: application/jsonContent-Type: application/jsonapi-key: YOUR_API_KEY코드 예시
JavaScript/Node.js
const brevo = require('@getbrevo/brevo');
const apiInstance = new brevo.AccountApi();apiInstance.setApiKey(brevo.AccountApiApiKeys.apiKey, process.env.BREVO_API_KEY);
// Make authenticated requestapiInstance.getAccount() .then(data => console.log('Account info:', data)) .catch(error => console.error('Error:', error));Python
import sib_api_v3_sdkfrom sib_api_v3_sdk.rest import ApiException
# Configure API keyconfiguration = sib_api_v3_sdk.Configuration()configuration.api_key['api-key'] = 'YOUR_API_KEY'
# Create API instanceapi_instance = sib_api_v3_sdk.AccountApi(sib_api_v3_sdk.ApiClient(configuration))
try: # Get account info api_response = api_instance.get_account() print(api_response)except ApiException as e: print("Exception when calling AccountApi->get_account: %s\n" % e)PHP
<?phprequire_once(__DIR__ . '/vendor/autoload.php');
// Configure API key$config = SendinBlue\Client\Configuration::getDefaultConfiguration()->setApiKey('api-key', 'YOUR_API_KEY');
// Create API instance$apiInstance = new SendinBlue\Client\Api\AccountApi( new GuzzleHttp\Client(), $config);
try { $result = $apiInstance->getAccount(); print_r($result);} catch (Exception $e) { echo 'Exception when calling AccountApi->getAccount: ', $e->getMessage(), PHP_EOL;}?>Ruby
require 'sib-api-v3-sdk'
# Configure API keySibApiV3Sdk.configure do |config| config.api_key['api-key'] = 'YOUR_API_KEY'end
# Create API instanceapi_instance = SibApiV3Sdk::AccountApi.new
begin # Get account info result = api_instance.get_account puts resultrescue SibApiV3Sdk::ApiError => e puts "Exception when calling AccountApi->get_account: #{e}"endAPI 키 보안
안전한 저장
환경 변수 (권장)
# .env fileBREVO_API_KEY=xkeysib-your-api-key-here
# Usage in codeconst apiKey = process.env.BREVO_API_KEY;클라우드 시크릿 관리자
- AWS Secrets Manager
- Google Secret Manager
- Azure Key Vault
- HashiCorp Vault
보안 모범 사례
-
키를 절대 하드코딩하지 마세요
// ❌ Bad - hardcodedconst apiKey = "xkeysib-a1b2c3d4...";// ✅ Good - environment variableconst apiKey = process.env.BREVO_API_KEY; -
환경마다 다른 키를 사용하세요
Production: BREVO_API_KEY_PRODStaging: BREVO_API_KEY_STAGINGDevelopment: BREVO_API_KEY_DEV -
키를 주기적으로 교체하세요
- 분기별 교체 일정을 캘린더 알림으로 설정합니다
- 키 교체에 자동화 도구를 사용합니다
- 롤백 계획을 미리 준비합니다
-
키 사용량을 모니터링하세요
- 비정상적인 활동에 대한 알림을 설정합니다
- 매월 키 사용 로그를 검토합니다
- 지역별 접근 패턴을 추적합니다
키 관리
활성 키 모니터링
대시보드에서 활성 키를 모니터링합니다:
Key Name: production-web-appCreated: 2024-01-15Last Used: 2024-01-20 14:30 UTCRequests Today: 1,247Status: Active키 교체 절차
- 새 키 생성: 교체용 키를 만듭니다
- 설정 업데이트: 새 키로 배포합니다
- 모니터링: 새 키가 정상적으로 동작하는지 확인합니다
- 유예 기간: 기존 키를 24~48시간 동안 활성 상태로 둡니다
- 기존 키 폐기: 이전 키를 삭제합니다
긴급 키 폐기
키가 유출된 경우:
- 즉시 폐기: 대시보드에서 키를 삭제합니다
- 대체 키 생성: 즉시 새 키를 만듭니다
- 애플리케이션 업데이트: 가능한 한 빨리 새 키로 배포합니다
- 활동 모니터링: 무단 사용이 있었는지 확인합니다
- 사고 보고: 보안 사고를 문서로 남깁니다
요청 한도와 API 키
각 API 키에는 개별 요청 한도가 적용됩니다:
- Free 요금제: 하루 300회 요청
- Starter 요금제: 하루 20,000회 요청
- Business 요금제: 하루 50,000회 요청
- Enterprise 요금제: 맞춤 한도
요청 한도 헤더
HTTP/1.1 200 OKX-RateLimit-Limit: 1000X-RateLimit-Remaining: 999X-RateLimit-Reset: 1640995200요청 한도 처리
async function makeApiCall() { try { const response = await fetch(url, { headers });
if (response.status === 429) { const resetTime = response.headers.get('X-RateLimit-Reset'); const waitTime = resetTime - Math.floor(Date.now() / 1000);
console.log(`Rate limited. Waiting ${waitTime} seconds`); await new Promise(resolve => setTimeout(resolve, waitTime * 1000));
// Retry the request return makeApiCall(); }
return response.json(); } catch (error) { console.error('API call failed:', error); throw error; }}API 키 문제 해결
자주 발생하는 오류 메시지
잘못된 API 키 (401)
{ "code": "unauthorized", "message": "Invalid API key provided"}권한 부족 (403)
{ "code": "permission_denied", "message": "API key does not have required permissions"}요청 한도 초과 (429)
{ "code": "too_many_requests", "message": "Rate limit exceeded for API key"}디버깅 체크리스트
- 키 형식이 올바른가 (64자)
- 불필요한 공백이나 숨은 문자가 없는가
- 키에 필요한 권한이 있는가
- 키가 활성 상태인가 (폐기되지 않았는가)
- 요청 한도 이내인가
- 올바른 API 엔드포인트를 사용하고 있는가
- 헤더 형식이 올바른가
다음 단계
- OAuth 2.0 알아보기
- JWT 토큰 이해하기
- 요청 한도 살펴보기
- SDK 사용해 보기