BitMEX WebSocket: JS로 실시간 데이터 구독 및 인증하기
이 문서는 BitMEX WebSocket: JS로 실시간 데이터 구독 및 인증하기 구현을 실전 중심으로 정리합니다. 핵심은 HMAC 기반의 인증 절차와 인증 후 개인 토픽을 안정적으로 구독하는 흐름입니다. 실무에 바로 적용할 수 있도록 필수 단계와 주의점을 간결하게 설명합니다.
1. 🔑 필수 라이브러리 설정 (CryptoJS)
BitMEX WebSocket에 인증 요청을 보내려면 HMAC-SHA256 서명이 필요합니다. 브라우저 환경에서는 CryptoJS 라이브러리를 사용해 서명을 생성하는 것이 가장 간단합니다. 아래 스크립트는 서명을 위해 필요한 최소 구성입니다.
HTML <script> 태그 추가
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/hmac-sha256.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/components/enc-base64-min.js"></script>
2. 🛠️ WebSocket 연결 및 인증/구독 JavaScript 코드
아래 예제는 API 키와 시크릿으로 서명을 만든 뒤 인증 메시지를 전송하고, 인증이 완료되면 개인 토픽을 구독하는 흐름을 보여줍니다. BitMEX WebSocket: JS로 실시간 데이터 구독 및 인증하기 구현 시 핵심 패턴입니다.
JavaScript `getSocket` 함수
function getSocket(API_KEY, API_SECRET) {
// 1. 인증 파라미터 준비 (UTC 밀리초 timestamp 사용)
const now = new Date();
const timestamp = now.getTime() + (now.getTimezoneOffset() * 60000);
// 서명 메시지: 'method' + 'endpoint' + 'expires'
const message = "GET/realtime" + timestamp;
// HMAC-SHA256 서명 생성 (Hex 형식)
const bitmex_signature = CryptoJS.HmacSHA256(message, API_SECRET).toString(CryptoJS.enc.Hex);
// WebSocket 연결 URL
const exampleSocket = new WebSocket("wss://www.bitmex.com/realtime");
exampleSocket.onopen = function () {
// 2. 인증(Authentication) 메시지 전송
const authMessage = JSON.stringify({
"op": "authKeyExpires",
"args": [API_KEY, timestamp, bitmex_signature]
});
exampleSocket.send(authMessage);
// 3. 개인 데이터 구독 메시지 전송 (인증 후 필수)
// position, wallet, margin, order 등 개인 데이터 토픽 구독
const subscribeMessage = JSON.stringify({
"op": "subscribe",
"args": ["position", "wallet", "margin", "order"]
});
exampleSocket.send(subscribeMessage);
}
exampleSocket.onmessage = function (event) {
// 4. 수신된 실시간 데이터 처리
console.log("새로운 데이터 수신:", event.data);
}
exampleSocket.onerror = function (error) {
console.error("WebSocket 오류 발생:", error);
}
return exampleSocket;
}
3. 📡 BitMEX WebSocket 구독 토픽 리스트
구독할 수 있는 토픽은 공개 데이터와 개인 데이터로 나뉩니다. 공개 토픽은 인증 없이 바로 수신할 수 있고, 개인 토픽은 인증이 완료되어야 데이터 접근이 허용됩니다.
공개 데이터 (인증 불필요)
"announcement", "chat", "connected", "funding",
"instrument", "insurance", "liquidation", "orderBookL2_25",
"orderBookL2", "quote", "trade", "tradeBin1m",
// ... 그 외 tradeBin, quoteBin 시리즈
개인 데이터 (인증 필수)
"affiliate", "execution", "order", "margin",
"position", "transact", "wallet"
함께 보면 좋은 엔터프라이즈 사례
🚀 이 주제, 우리 서비스에 어떻게 적용할까요?
BitMEX WebSocket: JS로 실시간 데이터 구독 및 인증하기를 실제 서비스와 조직에 녹여보고 싶다면, 현재 아키텍처와 운영 방식을 한 번 점검해 보는 것부터 시작해 보세요. 팀 위키나 기술 블로그, 사내 스터디 주제로도 아주 좋습니다.
이 글이 도움이 됐다면, 비슷한 엔터프라이즈 사례 글들도 함께 살펴보면서 우리 조직에 맞는 운영 상용구를 정의해 보세요.
댓글
댓글 쓰기