바이낸스 웹소켓 — 시세 스트림 vs 상장 공지
바이낸스 웹소켓(WebSocket)을 검색했다면 둘 중 하나입니다. 이미 거래 중인 심볼의 실시간 시세 데이터(체결, 현재가, 호가)가 필요하거나, 바이낸스가 신규 상장, 상장폐지, HODLer 에어드랍을 공지하는 순간 바로 대응하고 싶은 경우입니다. 바이낸스의 시세 스트림은 첫 번째만 제공합니다. 두 번째는 제공하지 않습니다. 이 가이드는 두 가지를 모두, 실행 가능한 코드와 함께 다룹니다.
두 종류의 소켓, 두 가지 역할
| 피드 | 스트리밍 내용 | 용도 |
|---|---|---|
| 바이낸스 시세 / 선물 스트림 | 이미 상장된 현물·무기한 선물 심볼의 실시간 체결·현재가·호가 | 차트, 주문 집행, 마켓 메이킹 |
| 공지 웹소켓 | 신규 상장, 상장폐지, 에어드랍이 공지되는 순간의 이벤트 | 유동성이 붙기 전에 대응 |
바이낸스 기본 시세 웹소켓
바이낸스 현물 시세 스트림은 wss://stream.binance.com:9443에 있습니다. /ws/btcusdt@trade 같은 개별 스트림 경로에 바로 연결하거나, /stream?streams=로 묶음 구독을 하거나, 연결 후 SUBSCRIBE 메시지를 보낼 수 있습니다. USD-M 선물은 wss://fstream.binance.com을 사용합니다.
# pip install "websockets>=14" import asyncio, json, websockets async def main(): url = "wss://stream.binance.com:9443/ws" sub = {"method": "SUBSCRIBE", "params": ["btcusdt@trade", "ethusdt@trade"], "id": 1} async with websockets.connect(url) as ws: await ws.send(json.dumps(sub)) async for raw in ws: print(json.loads(raw)) asyncio.run(main())
이미 거래 중인 심볼에는 완벽합니다. 하지만 모든 스트림 이름(btcusdt@trade)은 이미 존재하는 심볼을 가리켜야 합니다. 아직 상장되지 않은 코인에는 바로 그 점이 문제입니다.
시세 스트림으로 신규 상장을 알 수 없는 이유
바이낸스의 새 심볼은 거래가 시작되기 전까지 스트림이 없으므로 미리 구독할 대상이 없습니다. 바이낸스는 상장, 상장폐지, HODLer 에어드랍, 모니터링 태그 결정을 공지로 발표하며, 이는 시세 소켓과 완전히 별개입니다. NEWUSDT@trade가 데이터를 내보내기 시작할 때쯤이면 가장 빠른 참여자들은 이미 공지에 반응한 뒤입니다. 시세 웹소켓은 뉴스의 하류에 있을 뿐, 뉴스 자체가 아닙니다.
공지 웹소켓: 공지가 게시되는 순간 상장을 포착
CryptoListing.ws는 전용 공지 웹소켓을 운영합니다. 바이낸스가 공지를 게시하는 즉시 구조화된 JSON 이벤트를 실시간으로 전송합니다. 공지를 대신 감지하고 파싱한 결과를 푸시해 드립니다.
| 항목 | 값 |
|---|---|
| 엔드포인트 — 도쿄 (바이낸스 + 업비트 + 빗썸) | wss://jp.cryptolisting.ws — AWS 도쿄(ap-northeast-1a), 바이낸스와 같은 리전 |
| 바이낸스만 필터 | wss://jp.cryptolisting.ws?cex=binance |
| 인증 | 업그레이드 요청의 X-API-Key 헤더 |
| 포맷 | 바이너리 프레임, UTF-8 JSON, 마이크로초 정밀도 타임스탬프 |
| 바이낸스 이벤트 | spot_listing, futures_listing, spot_delisting, futures_delisting, hodler_airdrop, monitoring_tag_extend, monitoring_tag_remove, not_listing |
# pip install "websockets>=14" — 헤더 파라미터는 additional_headers # (extra_headers는 websockets v14부터 제거됨) import asyncio, json, websockets API_KEY = "dsk_your_key_here" WS_URL = "wss://jp.cryptolisting.ws?cex=binance" async def run(): headers = {"X-API-Key": API_KEY} async with websockets.connect(WS_URL, additional_headers=headers) as ws: async for raw in ws: msg = json.loads(raw) if msg["type"] == "announcement": for ticker in msg["ticker"].split(","): print(msg["listingType"], ticker, msg["title"]) asyncio.run(run())
메시지 포맷
모든 공지는 하나의 JSON 객체입니다. 한 공지에 여러 코인이 포함될 수 있어 ticker가 쉼표로 구분될 수 있으므로 항상 분리해서 처리하세요.
{
"type": "announcement",
"title": "Binance Will List TOKEN (TOKEN)",
"ticker": "TOKEN",
"publisher": "binance",
"listingType": "spot_listing",
"detectedTimestampUs": 1710345000005000,
"dispatchTimestampUs": 1710345000006000
}
공지 유형별로 분기하기
피드가 바이낸스 이벤트 전체를 전달하므로 봇은 listingType으로 분기할 수 있습니다. spot_listing / futures_listing / hodler_airdrop에는 진입 경로를, spot_delisting / futures_delisting / monitoring_tag_extend에는 리스크 관리 경로를 열고, not_listing은 무시하면 됩니다. 전체 스키마는 메시지 레퍼런스(영문)를 참고하세요.
두 피드를 함께 사용하기
두 소켓은 서로 보완합니다. 공지 웹소켓을 구독해 심볼 상장 사실을 먼저 알고, 이벤트가 도착하는 즉시 바이낸스 기본 <symbol>@trade 또는 @ticker 스트림을 열어 가격을 따라가면 됩니다. 한쪽은 트리거, 다른 한쪽은 텔레메트리입니다.
클라이언트를 직접 만드시나요? 파이썬 바이낸스 상장 스나이퍼 봇 튜토리얼(영문)이 전체 과정을 다룹니다. 전체 API 레퍼런스(영문): WebSocket API 레퍼런스, 메시지 스키마, Python / Node.js 코드 예제.
자주 묻는 질문 (FAQ)
바이낸스 웹소켓 엔드포인트는 무엇인가요?
현물 시세 스트림은 wss://stream.binance.com:9443(개별 /ws/<stream>, 묶음 /stream?streams=, 또는 SUBSCRIBE 메시지), USD-M 선물은 wss://fstream.binance.com입니다. 이미 거래 중인 심볼의 데이터를 전송합니다.
바이낸스 기본 웹소켓으로 신규 상장 알림을 받을 수 있나요?
시세 스트림으로는 불가능합니다. 이미 존재하는 심볼만 구독할 수 있기 때문입니다. 상장은 시세 스트림이 아니라 공지로 발표됩니다. 공지가 게시되는 즉시 구조화된 이벤트로 받으려면 전용 상장 공지 API를 사용하세요.
공지 피드를 바이낸스만 받도록 필터링하려면?
도쿄 엔드포인트에 ?cex=binance를 붙이세요: wss://jp.cryptolisting.ws?cex=binance. ?cex=binance,upbit처럼 거래소를 조합할 수도 있습니다.
업비트와 빗썸은요?
같은 피드가 업비트와 빗썸도 다룹니다. 한국에서 업비트나 빗썸을 거래하는 봇은 두 한국 거래소를 모두 전송하는 서울 엔드포인트도 사용할 수 있습니다. 바이낸스는 도쿄에서만 제공됩니다. 로빈후드(영문 페이지)도 전용 미국 엔드포인트(wss://us.cryptolisting.ws)로 제공합니다.
API 키 받기
텔레그램으로 문의해 바이낸스 상장 공지 스트리밍을 시작하세요. 요금제 및 등급, 전체 문서(영문), 바이낸스 상장 알림 개요도 확인해 보세요.
텔레그램에서 API 키 받기