기본 콘텐츠로 건너뛰기

BitMEX WebSocket: JS로 실시간 데이터 구독 및 인증하기

BitMEX WebSocket: JS로 실시간 데이터 구독 및 인증하기

AI 생성 이미지: BitMEX WebSocket: JS로 실시간 데이터 구독 및 인증하기
AI 생성 이미지: 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에서 안정적으로 실시간 통신을 시작하기 위한 기본 골격입니다. BitMEX WebSocket: JS로 실시간 데이터 구독 및 인증하기 목적이라면, 타임스탬프 계산과 서명 생성, 에러 및 재연결 전략을 반드시 검증하세요.

© 2025 칼퇴하는 개발자. 모든 권리 보유.

🚀 이 주제, 우리 서비스에 어떻게 적용할까요?

BitMEX WebSocket: JS로 실시간 데이터 구독 및 인증하기를 실제 서비스와 조직에 녹여보고 싶다면, 현재 아키텍처와 운영 방식을 한 번 점검해 보는 것부터 시작해 보세요. 팀 위키나 기술 블로그, 사내 스터디 주제로도 아주 좋습니다.

이 글이 도움이 됐다면, 비슷한 엔터프라이즈 사례 글들도 함께 살펴보면서 우리 조직에 맞는 운영 상용구를 정의해 보세요.

AI 생성 이미지: BitMEX WebSocket: JS로 실시간 데이터 구독 및 인증하기
AI 생성 이미지: BitMEX WebSocket: JS로 실시간 데이터 구독 및 인증하기

댓글

이 블로그의 인기 게시물

Java Servlet Request Parameter 완전 정복 — GET/POST 모든 파라미터 확인 & 디버깅 예제 (Request Parameter 전체보기)

Java Servlet Request Parameter 완전 정복 — GET/POST 모든 파라미터 확인 & 디버깅 예제 Java Servlet Request Parameter 완전 정복 웹 애플리케이션에서 클라이언트로부터 전달되는 Request Parameter 를 확인하는 것은 필수입니다. 이 글에서는 Java Servlet 과 JSP 에서 GET/POST 요청 파라미터를 전체 출력하고 디버깅하는 방법을 다양한 예제와 함께 소개합니다. 1. 기본 예제: getParameterNames() 사용 Enumeration<String> params = request.getParameterNames(); System.out.println("----------------------------"); while (params.hasMoreElements()){ String name = params.nextElement(); System.out.println(name + " : " + request.getParameter(name)); } System.out.println("----------------------------"); 위 코드는 요청에 포함된 모든 파라미터 이름과 값을 출력하는 기본 방법입니다. 2. HTML Form과 연동 예제 <form action="CheckParamsServlet" method="post"> 이름: <input type="text" name="username"><br> 이메일: <input type="email" name="email"><b...

PostgreSQL 달력(일별,월별)

SQL 팁: GENERATE_SERIES로 일별, 월별 날짜 목록 만들기 SQL 팁: GENERATE_SERIES 로 일별, 월별 날짜 목록 만들기 데이터베이스에서 통계 리포트를 작성하거나 비어있는 날짜 데이터를 채워야 할 때, 특정 기간의 날짜 목록이 필요할 수 있습니다. PostgreSQL과 같은 데이터베이스에서는 GENERATE_SERIES 함수를 사용하여 이 작업을 매우 간단하게 처리할 수 있습니다. 1. 🗓️ 일별 날짜 목록 생성하기 2020년 1월 1일부터 12월 31일까지의 모든 날짜를 '1 day' 간격으로 생성하는 쿼리입니다. WITH date_series AS ( SELECT DATE(GENERATE_SERIES( TO_DATE('2020-01-01', 'YYYY-MM-DD'), TO_DATE('2020-12-31', 'YYYY-MM-DD'), '1 day' )) AS DATE ) SELECT DATE FROM date_series 이 쿼리는 WITH 절(CTE)을 사용하여 date_series 라는 임시 테이블을 만들고, GENERATE_SERIES 함수로 날짜를 채웁니다. 결과 (일별 출력) 2. 📅 월별 날짜 목록 생성하기 동일한 원리로, 간격을 '1 MONTH' 로 변경하면 월별 목록을 생성할 수 있습니다. TO...

CSS로 레이어 팝업 화면 가운데 정렬하는 방법 (top·left·transform 완전 정리)

레이어 팝업 센터 정렬, 이 코드만 알면 끝 (CSS 예제 포함) 이벤트 배너나 공지사항을 띄울 때 레이어 팝업(center 정렬) 을 깔끔하게 잡는 게 생각보다 어렵습니다. 화면 크기가 변해도 가운데에 고정되고, 모바일에서도 자연스럽게 보이게 하려면 position , top , left , transform 을 정확하게 이해해야 합니다. 이 글에서는 아래 내용을 예제로 정리합니다. 레이어 팝업(center 정렬)의 기본 개념 자주 사용하는 position: absolute / fixed 정렬 방식 질문에서 주신 스타일 top: 3.25%; left: 50%; transform: translateX(-50%) 의 의미 실무에서 바로 쓰는 반응형 레이어 팝업 HTML/CSS 예제 1. 레이어 팝업(center 정렬)이란? 레이어 팝업(레이어 팝업창) 은 새 창을 띄우는 것이 아니라, 현재 페이지 위에 div 레이어를 띄워서 공지사항, 광고, 이벤트 등을 보여주는 방식을 말합니다. 검색엔진(SEO) 입장에서도 같은 페이지 안에 HTML이 존재 하기 때문에 팝업 안의 텍스트도 정상적으로 인덱싱될 수 있습니다. 즉, “레이어 팝업 센터 정렬”, “레이어 팝업 만드는 방법”과 같이 관련 키워드를 적절히 넣어주면 검색 노출에 도움이 됩니다. 2. 질문에서 주신 레이어 팝업 스타일 분석 질문에서 주신 스타일은 다음과 같습니다. <div class="layer-popup" style="width:1210px; z-index:9001; position:absolute; top:3.25%; left:50%; transform:translateX(-50%);"> 레이어 팝업 내용 <...