
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, 비동기 작업 (1) | 2025.02.08 |
| [Python] 업비트 자동매매 봇 만들기 4 - Tulip Indicators (2) | 2025.02.01 |
| [Python] 업비트 자동매매 봇 만들기 3 - Process Flow Diagram과 API요청 수 제한 (0) | 2025.01.30 |
| [Python] 업비트 자동매매 봇 만들기 1 - 업비트의 통신 방식 (1) | 2025.01.29 |