크라켄 API는 개발자에게 세계 최고의 암호화폐 거래소 중 하나에 대한 강력한 인터페이스를 제공합니다. 거래 애플리케이션을 구축하든, 시장을 모니터링하든, 암호화폐 포트폴리오를 관리하든, 이 가이드는 크라켄 API의 기능과 구현 방법의 필수 요소를 탐색하는 데 도움이 될 것입니다.
크라켄 API란 무엇인가?
크라켄의 API는 개발자가 RESTful 인터페이스를 통해 거래소의 기능에 프로그래밍적으로 접근할 수 있도록 합니다. 이 API를 통해 다음과 같은 작업을 수행할 수 있습니다:
- 실시간 시장 데이터에 접근(가격, 주문 내역, 거래)
- 거래 주문을 제출하고 관리
- 계정 잔액 및 포지션 모니터링
- 입금 및 출금 처리
- 과거 거래 데이터에 접근

API 접근 설정
크라켄 계정 만들기
API를 사용하려면 다음을 수행해야 합니다:
- kraken.com에서 크라켄 계정 등록
- 사용 필요에 따라 인증 요구 사항 완료
- 보안을 강화하기 위해 2단계 인증(2FA) 활성화

API 키 만들기
API와 상호작용하려면 적절한 권한을 가진 API 키를 생성해야 합니다:
- 크라켄 계정에 로그인
- 연결 및 API로 이동

3. 새 키 생성 클릭

4. 적절한 권한 설정:
- 쿼리: 계정 정보에 대한 읽기 전용 접근
- 거래: 주문 제출 및 취소 능력
- 입금: 입금 주소 생성
- 출금: 출금 요청 생성

⚠️ 보안 경고
- API 키를 안전하게 저장하고 개인 키를 절대 공유하지 마십시오
- API 키 권한을 꼭 필요한 것만으로 제한하십시오
- IP 주소 제한을 고려하십시오
API 구조 이해하기
크라켄 API는 논리적인 구조로 구성되어 있습니다:
API 기본 URL 및 엔드포인트
모든 API 요청은 기본 URL로 시작합니다: https://api.kraken.com
현재 API 버전은 URL 경로에 /0/
로 지정되며, 이어서 다음 중 하나가 옵니다:
- /public/ - 인증이 필요하지 않은 엔드포인트
- /private/ - API 키로 인증이 필요한 엔드포인트
응답 형식
모든 API 응답은 표준 JSON 형식을 따릅니다:
{
"error": [],
"result": { /* 응답 데이터 */ }
}
첫 번째 API 요청하기
퍼블릭 API 요청
퍼블릭 엔드포인트는 인증 없이 시장 데이터를 제공합니다.
예: 티커 정보 가져오기
import requests
# 비트코인에 대한 티커 정보 가져오기 (USD)
response = requests.get('https://api.kraken.com/0/public/Ticker?pair=XBTUSD')
ticker_data = response.json()
if not ticker_data['error']:
btc_data = ticker_data['result']['XXBTZUSD']
print(f"BTC/USD 마지막 거래 가격: {btc_data['c'][0]}")
print(f"BTC/USD 24시간 거래량: {btc_data['v'][1]}")
else:
print(f"오류: {ticker_data['error']}")
예: 주문 내역 데이터
fetch('https://api.kraken.com/0/public/Depth?pair=ETHUSD&count=5')
.then(response => response.json())
.then(data => {
if (data.error.length === 0) {
const orderbook = data.result.XETHZUSD;
console.log("ETH/USD 주문 내역 상위 5개 호가:", orderbook.bids);
console.log("ETH/USD 주문 내역 상위 5개 매도 호가:", orderbook.asks);
}
});
프라이빗 API 인증
프라이빗 엔드포인트는 API 키를 통한 인증이 필요합니다:
- nonce 생성(증가하는 숫자)
- HMAC-SHA512를 사용하여 요청 서명 생성
- API 키와 서명을 사용하여 요청 전송
인증 구현
import time
import base64
import hashlib
import hmac
import urllib.parse
import requests
def kraken_request(api_key, api_sec, endpoint, data=None):
"""크라켄 API에 인증된 요청 전송"""
if data is None:
data = {}
api_url = "https://api.kraken.com"
# 데이터에 nonce 추가
data['nonce'] = str(int(time.time() * 1000))
# 서명을 위한 데이터 인코딩
encoded_data = urllib.parse.urlencode(data)
# 서명 생성
signature_data = (data['nonce'] + encoded_data).encode()
message = endpoint.encode() + hashlib.sha256(signature_data).digest()
signature = hmac.new(base64.b64decode(api_sec), message, hashlib.sha512)
signature_digest = base64.b64encode(signature.digest()).decode()
# 헤더 설정
headers = {
'API-Key': api_key,
'API-Sign': signature_digest
}
# 요청 전송
response = requests.post(api_url + endpoint, headers=headers, data=data)
return response.json()
핵심 API 기능
계좌 정보
계좌 잔액 확인
balance = kraken_request(api_key, api_secret, "/0/private/Balance")
if not balance['error']:
for asset, amount in balance['result'].items():
print(f"{asset}: {amount}")
주문 관리
시장가 주문하기
# 시장 가격으로 0.01 BTC 구매하기 위한 매개변수
order_params = {
'pair': 'XBTUSD',
'type': 'buy',
'ordertype': 'market',
'volume': '0.01'
}
order_result = kraken_request(api_key, api_secret, "/0/private/AddOrder", order_params)
if not order_result['error']:
print(f"주문 완료! 거래 ID: {order_result['result']['txid'][0]}")
제한 가격 주문하기
# $50,000에 0.01 BTC 판매하기 위한 매개변수
limit_params = {
'pair': 'XBTUSD',
'type': 'sell',
'ordertype': 'limit',
'price': '50000',
'volume': '0.01'
}
limit_result = kraken_request(api_key, api_secret, "/0/private/AddOrder", limit_params)
열린 주문 조회하기
open_orders = kraken_request(api_key, api_secret, "/0/private/OpenOrders")
if not open_orders['error']:
orders = open_orders['result']['open']
for order_id, details in orders.items():
print(f"ID: {order_id}")
print(f"유형: {details['descr']['type']} {details['descr']['ordertype']}")
print(f"쌍: {details['descr']['pair']}")
크라켄 API와 Apidog 사용하기

APIdog는 크라켄 API 통합을 개발, 테스트 및 문서화할 수 있는 강력한 플랫폼을 제공합니다. APIdog를 활용하여 효율적인 개발을 진행하는 방법은 다음과 같습니다:
APIdog에서 크라켄 API 설정하기
새 프로젝트 만들기
- APIdog를 실행하고 새 프로젝트 생성
- 크라켄 API 테스트를 위한 환경 설정
환경 변수 구성하기
API_KEY
,API_SECRET
및API_URL
변수 생성- API_URL을
https://api.kraken.com
로 설정
엔드포인트 가져오기 또는 만들기

- 크라켄 API 사양을 가져오거나 수동으로 컬렉션 생성
- 엔드포인트를 논리적 폴더(Market Data, Trading, Account 등)로 정리
APIdog에서 크라켄 인증 구현하기
APIdog는 크라켄의 고유한 인증을 쉽게 설정할 수 있도록 합니다:
- 필요한 인증을 생성하기 위한 사전 요청 스크립트 생성:
// 크라켄 인증을 위한 사전 요청 스크립트
const crypto = require('crypto-js');
// 환경 변수 가져오기
const apiKey = pm.environment.get("API_KEY");
const apiSecret = pm.environment.get("API_SECRET");
// 요청 본문에 nonce 추가
const nonce = Date.now() * 1000;
pm.request.body.update({
mode: 'urlencoded',
urlencoded: [
...pm.request.body.urlencoded.all(),
{key: 'nonce', value: nonce.toString()}
]
});
// 요청 경로 가져오기
const path = pm.request.url.getPathWithQuery().replace(/\?.*/, '');
// 서명 생성
const postData = pm.request.body.urlencoded.toString();
const message = path + crypto.SHA256(nonce.toString() + postData).toString();
const signature = crypto.enc.Base64.stringify(
crypto.HmacSHA512(message, crypto.enc.Base64.parse(apiSecret))
);
// 헤더 설정
pm.request.headers.add({key: 'API-Key', value: apiKey});
pm.request.headers.add({key: 'API-Sign', value: signature});
APIdog로 테스트 및 문서화하기
테스트 요청 만들기
- 티커 데이터 가져오기, 주문 제출 등 일반 작업에 대한 요청 설정
- 요청 빌더를 사용하여 적절한 매개변수 구성
테스트 스크립트 추가하기
- 테스트 스크립트로 API 응답 검증
- 오류 및 예상 데이터 구조 확인
// 잔액 엔드포인트에 대한 테스트 스크립트 예시
pm.test("응답 상태가 200인지 확인", () => {
pm.response.to.have.status(200);
});
pm.test("오류가 반환되지 않음", () => {
const response = pm.response.json();
pm.expect(response.error).to.be.an('array').that.is.empty;
});
pm.test("잔액 데이터가 존재함", () => {
const response = pm.response.json();
pm.expect(response.result).to.exist.and.to.be.an('object');
});
문서 생성하기
- APIdog의 문서 도구를 사용하여 포괄적인 API 가이드 작성
- 예제, 설명 및 응답 샘플 포함
공유 및 협업하기
- 팀원과 크라켄 API 컬렉션 공유
- 팀 개발을 위해 APIdog의 협업 기능 사용

개발을 위한 APIdog 모의 서버
개발 중에는 APIdog의 모의 서버를 사용하여 크라켄 API 응답을 시뮬레이션할 수 있습니다:
- 각 엔드포인트에 대한 예제 응답 생성
- 요청 매개변수에 따라 응답 규칙 구성
- 라이브 서비스 이전에 모의 응답에 대해 애플리케이션 테스트

이 방법은 개발 주기를 빠르게 하고, 개발 중 API 속도 제한에 걸리는 것을 방지합니다.
크라켄 API 통합을 위한 모범 사례
속도 제한 및 최적화
크라켄은 특정 속도 제한을 구현합니다:
- 퍼블릭 엔드포인트: 초당 1 요청
- 프라이빗 엔드포인트: 분당 15-20 요청
이들을 효과적으로 처리하기 위해:
- 코드에서 스로틀링 구현
- 잦은 REST API 호출 대신 실시간 데이터를 위해 웹소켓 사용
- 가능할 경우 쿼리 배치
오류 처리
API 상호작용에 대한 강력한 오류 처리 구현:
def safe_api_call(api_function, max_retries=3):
"""재시도 로직이 포함된 API 호출 래퍼"""
retries = 0
while retries < max_retries:
try:
response = api_function()
if 'error' in response and response['error']:
error = response['error'][0]
# 속도 제한 처리
if 'EAPI:Rate limit' in error:
sleep_time = (2 ** retries) # 지수적 백오프
time.sleep(sleep_time)
retries += 1
continue
else:
return None
return response['result']
except Exception as e:
time.sleep(2 ** retries)
retries += 1
return None
보안 고려사항
- API 자격 증명을 안전하게 저장 - 애플리케이션에 하드코딩하지 마십시오
- 크라켄 API 키 설정에서 IP 제한 구현
- 각 API 키에 대해 최소한의 필요한 권한 사용
- 무단 접근을 위해 API 사용 모니터링
- 정기적으로 API 키 교체
일반 사용 사례
시장 데이터 모니터링
def monitor_price(pair, interval=60):
"""정기적인 간격으로 가격 모니터링"""
while True:
response = requests.get(f'https://api.kraken.com/0/public/Ticker?pair={pair}')
data = response.json()
if not data['error']:
for p, info in data['result'].items():
price = info['c'][0]
print(f"{pair} 현재 가격: {price}")
time.sleep(interval)
단순 거래 봇
def simple_trading_strategy(pair, api_key, api_secret):
"""단순 거래 전략의 예시"""
# 계좌 잔액 가져오기
balance = kraken_request(api_key, api_secret, "/0/private/Balance")
# 현재 가격 가져오기
ticker = requests.get(f'https://api.kraken.com/0/public/Ticker?pair={pair}')
ticker_data = ticker.json()
if not ticker_data['error']:
current_price = float(ticker_data['result'][pair]['c'][0])
# 단순 전략: 가격이 어제보다 5% 이상 하락하면 구매
yesterday_close = float(ticker_data['result'][pair]['o'])
if current_price < yesterday_close * 0.95:
print(f"가격이 5% 이상 하락했습니다 - 구매 기회")
# 구매 로직 구현
결론
크라켄 API는 암호화폐 거래 및 포트폴리오 관리를 위한 강력한 도구를 제공합니다. 이 가이드는 API 접근, 인증 및 일반 작업의 필수 요소를 다루었습니다. APIdog와 같은 도구를 활용하여 개발 및 테스트를 진행함으로써 크라켄 거래소와 원활하게 상호작용하는 강력한 애플리케이션을 구축할 수 있습니다.
크라켄 API 공식 문서를 항상 참조하여 최신 정보와 상세한 엔드포인트 참조를 확인하세요. 기본 개념에 익숙해지면, 실시간 데이터와 보다 정교한 거래 전략을 위한 웹소켓 연결과 같은 고급 기능을 탐색할 수 있습니다.
개인 포트폴리오 추적기를 구축하든, 알고리즘 거래를 구현하든, 기업 수준의 암호화폐 솔루션을 생성하든, 크라켄 API를 마스터하는 것은 디지털 자산 생태계에서 중요한 가능성을 열어줍니다.