[Go] WebSocket API 사용기(1)

노아카프카·2021년 12월 4일
0

Golang

목록 보기
5/5

목표 : 공부를 시작한 Go언어로 빗썸 WebSocket 통신을 구현해보자.

파이썬을 처음 시작했을 때는, RestAPI 통신으로 시세 데이터를 받아오는 코드를 작성했었다. 이번에는 빗썸에 WebSocket API가 있는 것을 보고 그걸 이용해서 시세를 내려받는 기능을 구현해보고자한다.
추후에 시세를 내려받고 여러 API 서버들을 구현하여, 클라이언트에 시세 데이터를 뿌려주는 시세서버를 구현할 계획이다.


사용 프레임워크 : Gorilla WebSocket


gorilla WebSocket 깃헙페이지의
example/echo/client.go 에서 일부분만 수정했다.

  • 주소 수정 : wss://pubwss.bithumb.com/pub/ws
    (웹소켓은 https가 아니라 wss가 붙는다.)
var addr = flag.String("addr", "pubwss.bithumb.com", "http service address")

func main() {
    ...
    u := url.URL{Scheme: "wss", Host: *addr, Path: "/pub/ws"}
    ...
}

  • 요청 데이터 형식(Request Filter)
data := "{\"type\":\"ticker\", \"symbols\":[\"ETH_KRW\"], \"tickTypes\":[\"1H\"]}"
err := c.WriteMessage(websocket.TextMessage, []byte(data))

!! 주의 !!
빗썸 API Guide에는 tickTypes가 Optional이라고 되어있었는데, 여기서 Optional의 의미는 type 이 ticker일때만 필요하기때문에 optional 하다는 의미임. 모든 경우에 optional인줄 알고 시간 많이 잡아먹었네...

그 결과, 출력 값은 아래와 같았다.

recv: {
"type":"ticker",
"content":{
"tickType":"1H", "date":"20211204",
"time":"174044",
"openPrice":"4955000",
"closePrice":"5087000",
"lowPrice":"4925000",
"highPrice":"5100000",
"value":"10267216369.457695127747132",
"volume":"2050.31399443062484187",
"sellVolume":"572.9525891557074934",
"buyVolume":"1477.36140527491734847",
"prevClosePrice":"5642000",
"chgRate":"2.66",
"chgAmt":"132000",
"volumePower":"257.85",
"symbol":"ETH_KRW"
}
}

0개의 댓글