1에서는 웹소켓에 대해 기초적으로 알아보았고, 추가적으로 웹소켓으로 어떤 자료들이 넘어오는지는 간단히 확인했다. 이제 어느 자료에 웹소켓 몇 개를 할당할지 결정하고, 멀티플렉싱이 이해한 대로 작동하는지 확인해봐야 한다.
웹소켓 분할 - 4종류, 5개
- 현재가 https://docs.upbit.com/reference/websocket-ticker
- 캔들 https://docs.upbit.com/reference/websocket-candle
- 내 주문 및 체결 https://docs.upbit.com/reference/websocket-myorder
- 내 자산 https://docs.upbit.com/reference/websocket-myasset
구상중인 전략에서 필요한 응답은 이 4개이다. 특별하게 많이 사용하는 응답에는 소켓을 추가로 연결해서 부하를 분산할 생각이다.
또한 테스트를 통해 응답 JSON길이를 직접 확인해 보았다. 1글자가 1 byte인 만큼, 얼마나 크겠어?라는 아주 안일한 생각을 하였었다..
현재가
의 1개 답변의 길이가 무려 1,049byte
이다. 이 1개라는 의미는 코인 1종류의 1 틱 정보이다. 업비트엔 145개의 코인이 존재하고, 이를 모니터링하면서 특정 조건에 부합하는 코인에서 매수 매도를 진행해야 한다.
이런 문제점을 해결하고자, 업비트에서는 WebSocket Compression
을 지원한다.
GPT에 따르면 WebSocket Compression
을 통한 네트워크 대역폭 사용 최적화로 이점을 얻는 분기점은 JSON의 크기가 1KB 이상부터 이고, 10KB부터 큰 속도 차이가 발생한다고 한다. 코인 10개의 현재가 정보만 조회해도 10KB, 1KB는 충분히 넘는다. 따라서 WebSocket Compression
이 충분히 합리적인 선택지라고 생각되어 적용하기로 하였다.
WebSocket Compression 사용 방법
생각보다 간단하다. websocket 접속 코드에서 compression="deflate" 만 추가하면 된다.
async with websockets.connect(url, ssl=ssl_context, compression="deflate") as websocket:
Per-Message Compression방식과 Deflate-Frame 방식이 존재한다( 하지만 현재 압도적으로 전자의 방식을 많이 사용한다고 한다).
Per-Message Compression :
• WebSocket 프레임 단위가 아닌 메시지 단위로 압축을 수행합니다.
• 클라이언트와 서버가 서로 협상하여 압축을 사용할 수 있습니다.
• WebSocket 핸드셰이크 과정에서 Sec-WebSocket-Extensions 헤더를 통해 설정됩니다.
압축이 적용된 데이터는 라이브러리에 의해 코드 레벨에서는 자동으로 해제되므로, 압축을 사용하지 않은 경우와 동일한 방식으로 JSON 응답을 읽으면 된다(라이브러리 사랑합니다~!).
(2025.02.02)아래 코드를 다시 살펴보니, 코인별로 웹소켓을 개별 구독하고 있었다. 우리가 필요한건 한 웹소켓을 통해 여러 코인 정보를 한번에 얻는 것이기에, 멀티플렉싱을 코드에서 직접 구현(예 : 티커를 통해 구분) 해야 한다. (02.06) 이를 적용해 업비트 봇 블로그 내용 중 1편을 수정하였다.
멀티플렉싱 테스트 2 - 한 코인을 담당하는 스레드가 해당 코인요청만 잘 처리하는지 확인
네트워크 프로래밍에서 배운 셀렉터에서 확장된 개념으로, 한 소켓에서 다수의 연결로 다양한 역할을 수행하기 위한 방법이다. 파이썬의 websocket asyncio 라이브러리들은 비동기 처리와 멀티플렉싱(Multiplexing) 을 통해 다수의 연결을 효율적으로 처리한다.
아래 코드를 통해, COINS 배열에 저장된 코인들을 스레드를 활용해 병렬 조회를 진행한다. 멀티플렉싱이 잘 작동한다면, KRW-BTC 스레드는 KRW-BTC 정보만 읽어야 한다.
결과를 확인해보면, 멀티플렉싱이 잘 적용되는 것을 볼 수 있다.
2025.01.30 - [자동매매/Upbit] - 파이썬으로 업비트 자동매매 봇 만들기 3 - Process Flow Diagram과 API요청 수 제한
파이썬으로 업비트 자동매매 봇 만들기 3 - Process Flow Diagram과 API요청 수 제한
대략적인 프로그램의 흐름을 구상했다. 나의 생각은 일단1. 모든 코인을 탐색하며 1차적인 조건을 만족하는(거래를 시작할) 코인을 검색2. 해당 코인을 팔로우하며 조건을 실시간 계산, 특정 조
chabin37.tistory.com
'API Transaction > Upbit' 카테고리의 다른 글
[파이썬] 업비트 자동매매 봇 만들기 6 - 거래중인 코인 갯수 유지(무분별한 코인 거래 방지) (1) | 2025.02.10 |
---|---|
[파이썬] 업비트 자동매매 봇 만들기 5 - asyncio, async, await, 비동기 작업 (0) | 2025.02.08 |
[Python] 업비트 자동매매 봇 만들기 4 - Tulip Indicators (1) | 2025.02.01 |
[Python] 업비트 자동매매 봇 만들기 3 - Process Flow Diagram과 API요청 수 제한 (0) | 2025.01.30 |
[Python] 업비트 자동매매 봇 만들기 1 - 업비트의 통신 방식 (0) | 2025.01.29 |