1. HTTP(하이퍼텍스트 전송 프로토콜)
인터넷 상에서 데이터를 주고받을 수 있는 프로토콜 중 하나입니다. 웹 브라우저와 웹 서버 간의 통신에서 사용되며, 클라이언트가 요청(Request)을 보내면 서버가 응답(Response)을 보내는 방식으로 동작합니다.
HTTP는 기본적으로 클라이언트-서버 모델을 따르며, 요청 메시지와 응답 메시지로 구성됩니다. 요청 메시지는 클라이언트에서 서버로 전송되는 메시지로, 요청하는 자원의 위치(URL), 사용할 HTTP 메소드(GET, POST, PUT, DELETE 등), 헤더 정보(인증 정보, 캐시 제어 등) 등을 포함합니다. 서버는 이 요청 메시지를 받아 해당 요청에 대한 응답을 생성하여 클라이언트에게 전송합니다.
HTTP는 무상태(Stateless) 프로토콜로, 서버는 이전 요청과 관련된 정보를 저장하지 않습니다. 이로 인해 서버가 요청에 대한 응답을 보낸 후에는 클라이언트와의 연결을 끊습니다. 이러한 특징으로 인해 세션과 쿠키와 같은 메커니즘이 사용되어야 합니다.
HTTP는 웹 브라우저와 웹 서버 간의 통신에 사용되며, HTML, CSS, JavaScript 등과 같은 웹 페이지의 리소스를 전송합니다. 또한, RESTful API와 같은 웹 서비스에서도 HTTP가 사용됩니다. 최근에는 HTTP/2, HTTP/3과 같은 새로운 버전이 등장하면서 기존의 HTTP/1.1보다 더 빠른 속도와 보안성을 제공합니다.
2. WebSocket
WebSocket은 웹 애플리케이션에서 양방향 통신을 가능하게 하는 프로토콜입니다. 일반적으로 HTTP는 클라이언트가 서버로 요청을 보내면, 서버는 응답을 보내고 연결을 끊습니다. 그러나 WebSocket은 HTTP와는 달리 연결을 유지한 상태에서 클라이언트와 서버 간 양방향 통신을 가능하게 합니다.
웹소켓은 기본적으로 TCP를 사용하며, 일반적으로 HTTP와 같은 80번 포트가 아닌 8080 또는 8443 포트를 사용합니다. WebSocket을 사용하면 클라이언트와 서버 간에 실시간 데이터 전송이 가능하며, 실시간 채팅, 주식 시세 업데이트, 게임 등 다양한 분야에서 활용됩니다.
Python에서 WebSocket을 사용하려면, websocket-client와 같은 라이브러리를 사용할 수 있습니다. 이 라이브러리는 다양한 웹소켓 서버와의 연결을 관리하고, 이벤트 처리 및 데이터 수신을 쉽게 할 수 있도록 도와줍니다. WebSocket을 사용하는 방법은 각각의 서비스마다 다를 수 있으므로, 해당 서비스에서 제공하는 문서를 참고하는 것이 좋습니다.
3. WebSocket 방식으로 실시간 선물 거래가 출력 해보기
import websocket
import json
from datetime import datetime
SOCKET = "wss://fstream.binance.com/ws/btcusdt@kline_1m"
def on_open(ws):
print('opened connection')
def on_close(ws):
print('closed connection')
def on_message(ws, message):
json_message = json.loads(message)
kline = json_message['k']
# print(json_message)
start_time = json_message['E'] / 1000
date_time = datetime.fromtimestamp(start_time).strftime('%Y-%m-%d %H:%M:%S')
open_price = float(kline['o'])
close_price = float(kline['c'])
high_price = float(kline['h'])
low_price = float(kline['l'])
print(f"{date_time} - BTCUSDT: open={open_price:.2f}, close={close_price:.2f}, high={high_price:.2f}, low={low_price:.2f}")
ws = websocket.WebSocketApp(SOCKET, on_open=on_open, on_close=on_close, on_message=on_message)
ws.run_forever(ping_interval=60)
선물 데이터를 웹소켓을 이용하여 실시간 출력하는 코드입니다.
해당 코드에서는 시가(open), 종가(close), 고가(high), 저가(low)와 같은 데이터를 출력할 수 있습니다.
코드에 대해 조금더 설명 드리면,
websocket 모듈은 웹소켓 연결을 쉽게 만들 수 있도록 도와주는 파이썬 라이브러리 중 하나입니다. websocket.WebSocketApp을 이용하여 손쉽게 웹소켓 연결을 구현할 수 있습니다.
위의 코드에서는 Binance Futures API의 BTCUSDT 채널을 구독하는 웹소켓 연결을 만들었습니다. on_open, on_close, on_message 함수를 정의하여 연결에 대한 상태를 확인하고 메시지를 받아서 처리할 수 있도록 합니다.
on_open 함수는 웹소켓 연결이 열리면 호출되는 함수입니다. on_close 함수는 웹소켓 연결이 닫히면 호출되는 함수입니다. on_message 함수는 웹소켓에서 메시지를 받으면 호출되는 함수입니다.
json 모듈은 JSON(JavaScript Object Notation) 데이터를 파이썬의 객체로 변환하거나, 파이썬의 객체를 JSON 형태의 문자열로 변환하는데 사용됩니다.
datetime 모듈은 날짜와 시간을 다루는 파이썬 모듈입니다. 위의 코드에서는 Binance API에서 받아온 timestamp를 datetime 형태로 변환하여 날짜와 시간을 출력합니다
websocket 메세지에 대한 정의 부분은 아래 바이낸스 문서에 잘 정의 되어 있습니다.
원하시는데로 편집하시면 아주 많은 정보를 받을 수 있을것 같습니다.
https://binance-docs.github.io/apidocs/spot/en/#kline-candlestick-streams
Binance API Documentation
binance-docs.github.io
출력 결과!!!
Connection을 중단하고 싶으시면 CTRL+C 누르시면 중단됩니다@@
'Python 끄적 > 가상화폐 자동화 프로그램' 카테고리의 다른 글
#10.비트코인 선물 자동구매 프로그램 - Websocket(양방향통신)#2 (0) | 2023.03.31 |
---|---|
#8.비트코인 선물 자동구매 프로그램 - 선물1분봉 + RSI/MACD/이평선 => 엑셀 파일로 출력 (1) | 2023.03.27 |
#7.비트코인 선물 자동구매 프로그램 - 선물시장 데이터 가져오기 (0) | 2023.03.25 |
#6.비트코인 선물 자동구매 프로그램 - python-binance Module 이해하기 (0) | 2023.03.25 |
#5.비트코인 선물 자동구매 프로그램 - (웹)선물 주문 + Python으로 주문 내역 확인 하기 (0) | 2023.03.24 |