[{"data":1,"prerenderedAt":9},["ShallowReactive",2],{"api-documentation:guide\u002Fexamples":3},{"title":4,"slug":5,"group":6,"version":7,"html":8},"예제","guide\u002Fexamples","연동과 운영","0.4.0","\u003Ch1 id=\"sdk와-실행-예제\">SDK와 실행 예제\u003C\u002Fh1>\n\u003Cp>예제의 기본 REST 주소는 \u003Ccode>https:\u002F\u002Fapi.btxpro.co.kr\u003C\u002Fcode>입니다. 외부 WS 주소는 \u003Ccode>wss:\u002F\u002Fapi-ws.btxpro.co.kr\u003C\u002Fcode>이며, 현재 Go SDK는 운영 REST 주소에서 두 WS 경로를 자동으로 선택합니다.\u003C\u002Fp>\n\u003Ch2 id=\"go-sdk\">Go SDK\u003C\u002Fh2>\n\u003Cp>현재 SDK는 BTX 저장소의 \u003Ccode>backend-base\u002Fsdk\u002Fbtx\u003C\u002Fcode> 패키지로 제공됩니다. 별도 공개 모듈로 배포된 상태는 아니므로 저장소 접근 권한이 필요하며, 사용할 backend-base 모듈 커밋을 고정해야 합니다.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-go\">package main\n\nimport (\n    \"context\"\n    \"log\"\n    \"os\"\n    btx \"git.svc.childlycorp.com\u002Fchildlycorp\u002Fbtx-main.git\u002Fbackend-base\u002Fsdk\u002Fbtx\"\n)\n\nfunc main() {\n    client, err := btx.NewClient(btx.Config{\n        BaseURL: \"https:\u002F\u002Fapi.btxpro.co.kr\",\n        APIKey: os.Getenv(\"BTX_API_KEY\"),\n        SecretKey: os.Getenv(\"BTX_SECRET_KEY\"),\n    })\n    if err != nil { log.Fatal(err) }\n    account, err := client.GetAccount(context.Background())\n    if err != nil { log.Fatal(err) }\n    log.Printf(\"account=%d\", account.Data.AccountID)\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>SDK가 REST 요청과 개인 WS 연결에 timestamp·서명을 붙입니다. 별도 nonce 카운터를 운영하지 않습니다. 공개 조회만 사용할 때는 키를 생략할 수 있습니다.\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>기능\u003C\u002Fth>\n\u003Cth>메서드\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>시스템·통화·마켓\u003C\u002Ftd>\n\u003Ctd>CheckHealth, GetReadiness, GetTime, ListCurrencies, ListMarkets, GetMarket\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>시세\u003C\u002Ftd>\n\u003Ctd>GetTicker, ListTickers, GetOrderBook, ListTrades, ListCandles\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>계정·지갑\u003C\u002Ftd>\n\u003Ctd>GetAccount, ListWallets, ListBalances\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>주문·체결\u003C\u002Ftd>\n\u003Ctd>CreateOrder, GetOrder, ListOpenOrders, ListOrderHistory, CancelOrder, CancelOrders, ListFills\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>공개 스트림\u003C\u002Ftd>\n\u003Ctd>StreamTickers\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>개인 이벤트\u003C\u002Ftd>\n\u003Ctd>StreamUser\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>양방향 개인 세션\u003C\u002Ftd>\n\u003Ctd>OpenUserStream → Snapshot, Events, CreateOrder, CancelOrder\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>Feed API는 REST로 직접 호출합니다. 현재 Go SDK에는 Feed 전용 메서드가 없습니다.\u003C\u002Fp>\n\u003Ch2 id=\"nodejs와-python\">Node.js와 Python\u003C\u002Fh2>\n\u003Cp>아래 예제는 표준 라이브러리만 사용하며 기본 동작은 서명된 계정 조회입니다. Node.js 22.12 이상 또는 Python 3.9 이상을 사용하세요.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ca href=\"\u002Fapi-docs\u002Fexamples\u002Fsigned-request.mjs\">Node.js 서명·조회 예제\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"\u002Fapi-docs\u002Fexamples\u002Fsigned_request.py\">Python 서명·조회 예제\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>먼저 키 없이 서명 구현을 검증합니다.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-sh\">node signed-request.mjs --self-test\npython signed_request.py --self-test\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>비밀 관리 도구가 프로세스에 \u003Ccode>BTX_API_KEY\u003C\u002Fcode>, \u003Ccode>BTX_SECRET_KEY\u003C\u002Fcode>를 주입한 뒤 실행합니다.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-sh\">node signed-request.mjs\npython signed_request.py\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>로컬 서버를 사용할 때는 주소만 변경합니다.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-sh\">node signed-request.mjs --base-url http:\u002F\u002Flocalhost:10005\npython signed_request.py --base-url http:\u002F\u002Flocalhost:10005\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>다른 API에 적용하려면 메서드·경로·쿼리·실제 본문 바이트를 \u003Ccode>signRequest\u003C\u002Fcode> 또는 \u003Ccode>sign_request\u003C\u002Fcode>에 전달하고, 그 값으로 요청을 보냅니다. 두 예제는 운영 주문을 생성하거나 자동 재시도하지 않습니다.\u003C\u002Fp>\n\u003Ch2 id=\"개인-ws와-go-세션\">개인 WS와 Go 세션\u003C\u002Fh2>\n\u003Cpre>\u003Ccode class=\"language-go\">session, err := client.OpenUserStream(ctx)\nif err != nil { return err }\ndefer session.Close()\n\nsnapshot := session.Snapshot()\n\u002F\u002F snapshot을 반영한 뒤 session.Events()의 이벤트를 계속 소비합니다.\n_ = snapshot\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>주문 전송은 \u003Ca href=\"\u002Fapi-docs\u002Fwebsocket\u002Fcommands\u002F\">WS 명령\u003C\u002Fa>을 확인하세요. \u003Ccode>OpenUserStream\u003C\u002Fcode>은 결과가 불명확한 주문을 자동으로 재전송하지 않습니다.\u003C\u002Fp>\n\u003Ch2 id=\"레퍼런스의-생성-예제\">레퍼런스의 생성 예제\u003C\u002Fh2>\n\u003Cp>Scalar의 일반 HTTP 예제는 요청 형식을 보여줍니다. 개인 API는 그 요청에 BTX HMAC 서명을 추가해야 합니다. 문서 사이트는 키를 입력받지 않으며 요청 실행 버튼을 제공하지 않습니다. 위 SDK와 로컬 예제로 실제 요청을 검증합니다.\u003C\u002Fp>\n",1793249660045]