바이낸스(Binance) API 신청의 핵심 프로세스는 다음과 같습니다: KYC L2 인증 완료 → 바이낸스 공식 사이트 관리 페이지 접속 → API 키 생성 → IP 화이트리스트 설정 → 코드에서 HMAC-SHA256 서명을 적용하여 호출. 전체 과정은 약 15분 정도 소요되며, 생성 즉시 사용 가능하고 별도의 월 이용료는 없습니다. 2FA 인증 관리를 위해 바이낸스 모바일 앱이 필요하다면 바이낸스 공식 앱 안드로이드 버전을 설치하거나, 아이폰 사용자는 iOS 설치 가이드를 참고하세요. 본문에서는 신청, 서명, 오류 처리, 빈도 제한 전략을 4개 섹션으로 나누어 설명하며 Python 및 Node.js 코드를 함께 제공합니다.
1. API 키 신청 전제 조건
1. KYC L2 실명 인증 완료
바이낸스 API를 사용하려면 최소한 L2 중급 신원 인증(신분증 제출 + 얼굴 인식)을 완료해야 합니다. L1 기초 인증 단계에서는 API 키를 생성할 수 없습니다. L2 인증은 보통 24시간 이내에 승인됩니다.
2. 2FA 활성화 (필수)
API 키 생성 과정에서 2FA 인증번호 확인이 필요합니다. 아직 설정하지 않았다면 보안 센터 → 2단계 인증 → Google Authenticator를 통해 설정을 완료하세요.
3. 입금 및 보유량 제한 없음
잔액이 0원인 상태에서도 API 키를 생성할 수 있으므로, 키를 먼저 준비한 후 자금을 입금해도 무방합니다.
2. API 키 생성 (5단계)
1단계: API 관리 페이지 접속
바이낸스 공식 사이트 로그인 → 오른쪽 상단 프로필 아이콘 → API Management 클릭. 직접 접속 주소는 binance.com/en/my/settings/api-management입니다.
2단계: 키 유형 선택
바이낸스는 두 가지 API 키 유형을 제공합니다:
| 유형 | 용도 | 권장 상황 |
|---|---|---|
| System generated | 시스템 자동 생성 키 쌍 | 90% 이상의 사용자에게 권장, 간편하고 안정적 |
| Self-generated | 사용자가 Ed25519 공개키 제공 | 고급 사용자용, 개인키가 로컬 환경을 떠나지 않음 |
초보자라면 System generated를 선택하세요.
3단계: 키 레이블(Label) 작성
키의 이름을 지정합니다. 관리하기 편한 이름을 입력하세요. 예:
python-grid-bot— 그리드 매매 봇nodejs-monitor— 가격 모니터링 스크립트quantitative-strategy-v2— 퀀트 전략 v2
레이블은 본인에게만 보이며, 바이낸스 시스템상에서 기능적 차이를 만들지는 않습니다.
4단계: 2FA 인증 통과
다음을 입력합니다:
- 이메일 6자리 인증번호
- 휴대폰 SMS 6자리 인증번호
- Google Authenticator 6자리 OTP 번호
세 번호가 모두 일치하면 키 생성이 완료됩니다.
5단계: Secret Key 저장 (매우 중요)
키 생성 페이지에 다음 정보가 표시됩니다:
- API Key: 영구적으로 확인 가능하며 언제든 다시 볼 수 있습니다.
- Secret Key: 단 한 번만 표시됩니다. 페이지를 닫으면 다시는 확인할 수 없습니다.
반드시 즉시 Secret Key를 안전한 곳(비밀번호 관리자 또는 암호화된 노트)에 복사해 두어야 합니다. 분실 시 키를 삭제하고 새로 만들어야 합니다.
3. 키 권한 및 IP 화이트리스트 설정
키가 생성되면 기본적으로 모든 권한이 비활성화되어 있으므로 수동으로 켜야 합니다.
권한 옵션
| 권한 | 용도 | 리스크 등급 |
|---|---|---|
| Enable Reading | 잔액, 주문, 시세 조회 | 낮음 |
| Enable Spot & Margin Trading | 현물 / 마진 주문 | 중간 |
| Enable Futures | 선물 주문 | 높음 |
| Enable Withdrawals | 출금 (반드시 IP 화이트리스트 필요) | 매우 높음 |
| Permits Universal Transfer | 계정 간 자금 이체 | 중간 |
보안 권고: 꼭 필요한 권한만 활성화하세요. 시세 조회만 한다면 Enable Reading만 체크하고, 현물 매매를 한다면 Enable Reading + Enable Spot & Margin Trading만 체크하세요. Enable Withdrawals는 꼭 필요한 경우가 아니라면 활성화하지 마세요.
IP 화이트리스트 (적극 권장)
키 설정 페이지에서 해당 키를 사용할 서버의 IP 주소를 입력합니다(최대 30개). 설정 후에는 지정된 IP에서 오는 요청만 이 키를 사용하여 계정을 조작할 수 있습니다.
유동 IP(가정용 인터넷)를 사용하는 경우 **Unrestricted (Less Secure)**를 선택할 수 있지만, 이 경우 Enable Withdrawals 권한을 활성화할 수 없습니다. 이는 바이낸스의 강제 보안 규칙입니다.
4. 서명 생성 및 API 호출
바이낸스 REST API에서 계정 조작과 관련된 모든 요청은 서명이 필요합니다. 서명 알고리즘은 HMAC-SHA256을 사용합니다.
서명 규칙
서명 내용 = 모든 요청 파라미터를 URL 인코딩한 후 &로 연결한 문자열
예를 들어 계정 잔액 조회 인터페이스의 경우:
GET /api/v3/account
파라미터: timestamp=1712876400000
서명 내용: timestamp=1712876400000
서명 값: HMAC_SHA256(secret_key, "timestamp=1712876400000")
최종 요청 형식:
GET /api/v3/account?timestamp=1712876400000&signature=<계산된 서명값>
Header: X-MBX-APIKEY: <내 API Key>
Python 전체 예제
import hmac, hashlib, time, requests
API_KEY = "내 API Key"
SECRET_KEY = "내 Secret Key"
BASE_URL = "https://api.binance.com"
def sign(params: dict) -> str:
query = "&".join([f"{k}={v}" for k, v in params.items()])
return hmac.new(SECRET_KEY.encode(), query.encode(), hashlib.sha256).hexdigest()
def get_account():
params = {"timestamp": int(time.time() * 1000)}
params["signature"] = sign(params)
headers = {"X-MBX-APIKEY": API_KEY}
r = requests.get(f"{BASE_URL}/api/v3/account", params=params, headers=headers)
return r.json()
print(get_account())
Node.js 전체 예제
const crypto = require('crypto');
const axios = require('axios');
const API_KEY = '내 API Key';
const SECRET_KEY = '내 Secret Key';
const BASE_URL = 'https://api.binance.com';
function sign(params) {
const query = Object.keys(params).map(k => `${k}=${params[k]}`).join('&');
return crypto.createHmac('sha256', SECRET_KEY).update(query).digest('hex');
}
async function getAccount() {
const params = { timestamp: Date.now() };
params.signature = sign(params);
const r = await axios.get(`${BASE_URL}/api/v3/account`, {
params,
headers: { 'X-MBX-APIKEY': API_KEY }
});
return r.data;
}
getAccount().then(console.log);
5. 빈도 제한과 가중치(Weight)
바이낸스 API는 **가중치(Weight)**를 통해 호출 빈도를 제어합니다:
| 제한 항목 | 기본값 |
|---|---|
| 분당 가중치 상한 | 6,000 |
| 10초당 주문 상한 | 100건 |
| 일일 주문 상한 | 200,000건 |
| WebSocket 단일 연결 구독 수 상한 | 1,024개 |
| 단일 IP당 WebSocket 연결 수 상한 | 300개 |
주요 인터페이스 가중치:
GET /api/v3/ticker/price— 가중치 1GET /api/v3/depth— 가중치 1-50 (limit 파라미터에 따라 다름)GET /api/v3/account— 가중치 10POST /api/v3/order— 가중치 1 (단, 주문 횟수 제한 적용됨)
응답 헤더에서 현재 사용량을 확인할 수 있습니다:
X-MBX-USED-WEIGHT-1m: 최근 1분간 사용된 가중치X-MBX-ORDER-COUNT-10s: 최근 10초간 접수된 주문 횟수
가중치를 초과하면 429 Too Many Requests 오류가 반환되며, 심각한 위반 시 418 오류와 함께 IP가 일시 차단(2분~3일)될 수 있습니다.
6. 자주 발생하는 오류 및 해결 방법
오류: -1022 Signature for this request is not valid
원인: 서명 오류입니다. 파라미터 순서가 다르거나 URL 인코딩 방식이 잘못된 경우가 많습니다. 해결:
- 서명 계산 시 사용한 문자열이 실제 요청 쿼리 문자열과 완전히 일치하는지 확인하세요.
- 숫자형 파라미터에 따옴표를 넣지 마세요 (예:
timestamp=1712876400000). - 특수 문자가 포함된 경우 올바르게 URL 인코딩되었는지 확인하세요.
오류: -1021 Timestamp for this request was 1000ms ahead of the server's time
원인: 로컬 시간과 바이낸스 서버 시간의 오차가 1초를 초과했습니다. 해결:
- 로컬 시스템 시간을 동기화(NTP)하세요.
- 또는 요청 시
recvWindow=10000파라미터를 추가하여 오차 허용 범위를 10초로 늘리세요.
오류: -2014 API-key format invalid
원인: 키 문자열 형식이 잘못되었습니다. 해결: 복사 시 공백이나 줄바꿈이 포함되었는지 확인하세요. 키는 64자리의 영문자와 숫자로 구성됩니다.
오류: -1003 Too many requests; current limit is X requests per minute
원인: 가중치 상한을 초과했습니다. 해결:
- 호출 빈도를 줄이거나 요청을 통합하세요 (예: 여러 거래쌍 조회 시 개별 호출 대신
/api/v3/ticker/24hr사용). - 실시간 데이터는 REST 대신 WebSocket을 사용하여 요청 횟수를 줄이세요.
7. API 보안 베스트 프렉티스
- 프론트엔드 코드에 Secret Key를 절대 노출하지 마세요 — 백엔드 서버에서 바이낸스 API를 호출하도록 설계하세요.
- 코드 저장소(.gitignore)에서 키 파일을 제외하세요 — GitHub 등에 유출되지 않도록 주의해야 합니다.
- 프로덕션 환경에서는 IP 화이트리스트를 사용하세요 — 본인의 서버 IP만 허용하도록 설정하세요.
- 정기적으로 키를 교체하세요 — 6개월마다 기존 키를 삭제하고 새로 생성하는 것이 안전합니다.
- 비정상 호출을 모니터링하세요 — API 관리 페이지에서 일일 호출 통계를 확인하고 이상 징후 발생 시 즉시 키를 중지하세요.
자주 묻는 질문 FAQ
Q1: API 키는 무료인가요?
A: 네, 완전히 무료입니다. 바이낸스는 API 호출 자체에 비용을 부과하지 않으며(실제 거래 시에만 수수료 발생), 키 생성 시 예치금도 필요 없습니다. 단, 계정당 최대 30개까지만 생성 가능합니다.
Q2: API 주문 수수료가 수동 주문보다 저렴한가요?
A: 자동으로 저렴해지지는 않습니다. 수수료는 사용자의 VIP 등급 및 BNB 보유량에 따라 결정되며 수동/API 모두 동일한 요율이 적용됩니다. 다만 API는 고빈도 매매를 통해 더 정교한 체결가를 확보하는 데 유리합니다.
Q3: 테스트 환경에서 모의 거래를 해볼 수 있나요?
A: 네, 가능합니다. 바이낸스는 Spot Testnet과 Futures Testnet을 제공하여 실제 자산 손실 없이 API 호출을 연습해 볼 수 있는 환경을 지원합니다.
Q4: CCXT 같은 라이브러리를 쓰는 게 나을까요?
A: 상황에 따라 다릅니다. CCXT는 여러 거래소를 동시에 지원해야 할 때 서명 및 파라미터 처리가 편리합니다. 직접 호출은 바이낸스만 사용하거나 극한의 성능이 필요한 경우에 적합합니다. 초보자라면 CCXT로 시작해 보는 것을 추천합니다.
Q5: API 키가 도난당한 것 같으면 어떻게 하나요?
A: 즉시 바이낸스 공식 사이트 → API 관리 페이지에서 해당 키를 삭제하세요(삭제 즉시 효력 상실). 이후 최근 거래 및 출금 기록을 확인하고 고객센터에 알리세요. Enable Withdrawals 권한을 켜지 않았다면 자산 탈취 위험은 낮습니다. 자세한 대응 방법은 [리스크 관리](/ko/vault/리스크 관리/) 카테고리를 확인하세요.
계정 풍보에 대응하는 방법이 궁금하신가요? 카테고리에서 「리스크 관리」 분류를 선택하여 전체 프로세스를 확인해 보세요.