거래소 18곳을 연동하며 배운 것 — API가 안 주는 것 목록이 곧 “자산관리가 어려운 이유”
칼럼 · · 사토시노트 편집실
다른 언어: English
"API 연동"이라는 말은 거래소에 있는 내 기록이 통째로 넘어온다는 인상을 줍니다. 우리도 처음엔 그렇게 믿었습니다. 거래소 18곳(국내 5곳, 일본 4곳, 그 밖의 해외 9곳)을 하나씩 붙이고 나서 알게 된 것은 반대였습니다. 거래소 API는 주고 싶은 것만 줍니다. 그리고 안 주는 것들의 목록이 묘하게도 "자산관리 앱이 왜 어려운가"의 답과 겹칩니다. 이 칼럼은 그 목록입니다.
한눈에 보기
- 거래소 API를 연결해도 기록이 통째로 들어오지는 않습니다. 사토시노트(토큰포스트가 운영하는 무료 암호화폐 자산관리 앱)가 거래소 18곳을 연동하며 부딪힌 빈칸은 세 가지입니다: 기간을 자르고, 종목을 하나씩 물어야 하고, 거래가 아닌 것은 안 줍니다.
- 기간 한도의 예: GMO코인 최근 하루치, 코빗 36시간, OKX 현물 3개월, 바이비트 첫 연결 때 180일. 업비트·빗썸은 "내 체결 전부"를 묻는 길이 없어 종목별로 물어야 합니다.
- 사토시노트는 잔고 차이를 거래소 이동으로 적고, 거래소 카드마다 "가져오는 범위" 상자에 안 주는 것을 미리 적습니다. 연결 전 기록은 거래소가 안 주면 영영 못 가져옵니다.
기간을 자른다
가장 먼저 부딪히는 벽은 기간입니다. "전체 체결 내역"을 주는 거래소는 드뭅니다.
| 거래소 | 체결 내역을 주는 범위 |
|---|---|
| GMO코인 | 최근 하루치만 |
| 코빗 | 최근 36시간만 |
| OKX | 최근 3개월 현물만 |
| 바이비트 | 첫 연결 때 최근 180일 |
GMO코인은 극단적인 예입니다. 연결한 다음 날부터의 체결은 매일 받아 쌓을 수 있지만, 연결 전의 기록은 API로는 영영 못 가져옵니다. 코빗도 비슷해서 36시간 안쪽만 줍니다. 그래서 이 두 곳은 "연결해 두면 그때부터 쌓인다"는 서비스이지 "연결하면 과거가 들어온다"는 서비스가 아닙니다. 우리가 할 수 있는 일은 연결 화면에 그 사실을 미리 적어 두는 것과, 그보다 오래된 체결은 달력에서 직접 적을 수 있게 하는 것까지입니다.
종목을 하나씩 물어야 한다
두 번째 벽은 질문 방식입니다. 업비트와 빗썸은 "내 체결 전부"를 묻는 길이 없고, "BTC 체결 줘, ETH 체결 줘" 하고 종목별로 물어야 합니다. 그러면 무엇을 물을지 먼저 알아야 하는데, 앱은 사용자가 어떤 종목을 거래했는지 모릅니다.
우리가 택한 길은 지금 잔고에 있는 종목과 이미 기록에 있는 종목을 묻는 것입니다. 그래서 예전에 사고 전부 팔아 버려 잔고에 없는 종목은 첫 연동 때 빠질 수 있습니다. 코빗은 한 단계 더해서, 이미 기록에 있는 종목만 묻습니다. 이 한계는 코드를 더 잘 짜서 풀리는 종류가 아니라 거래소가 질문의 모양을 정해 놓아 생기는 한계입니다.
거래가 아닌 것은 안 준다
세 번째 벽이 자산관리에서 가장 아픕니다. 체결 내역은 "사고판 것"입니다. 그런데 계좌 잔고를 움직이는 일은 사고파는 것 말고도 많습니다.
- 입출금. 로빈후드는 입출금을 읽는 API 자체가 없고, 비트플라이어·비트뱅크·크라켄·제미나이는 우리가 아직 입출금을 가져오지 않습니다. 다른 거래소에서 옮겨 온 코인은 체결 없이 잔고에 나타납니다.
- 거래소 안의 다른 상품. 코인체크의 "판매소"(거래소가 직접 파는 창구)와 적립 서비스는 API에 없습니다. 거래소 앱에서 산 코인인데 API로는 안 보이는 경우입니다.
- 포인트. 빗썸은 잔고에 포인트(P)가 코인처럼 섞여 옵니다. 코인이 아니니 합계에서 뺍니다.
이것들이 빠지면 "잔고는 10개인데 체결로 계산하면 7개"처럼 숫자가 어긋납니다. 어긋난 3개를 어떻게 다루느냐가 앱마다 수익률이 다른 이유의 절반쯤 됩니다. 이 얘기는 앞 칼럼에서 따로 적었습니다.
그래서 우리가 한 선택
빈칸을 다 메울 수는 없어서, 우리는 두 가지를 정했습니다.
첫째, 잔고 대조입니다. 체결로 계산한 수량과 거래소가 말하는 잔고가 다르면, 차이만큼을 "거래소에서 들어옴/나감"으로 따로 적어 잔고 쪽에 맞춥니다. 어디서 왔는지는 모르지만 적어도 합계는 거래소와 같아집니다. 원가가 따라오지 않는다는 한계는 남고, 그걸 메우는 일이 올해 남은 기간의 첫 번째 할 일입니다.
둘째, 미리 말하기입니다. 설정 › 자산 연동의 거래소 카드마다 "가져오는 범위" 상자를 두고, 그 거래소가 무엇을 주고 무엇을 안 주는지 한 줄씩 적었습니다. "GMO코인은 최근 하루치 체결만", "로빈후드는 입출금 없음" 같은 식입니다. 연결하기 전에 읽고 실망할 수 있게요.
빈칸 목록이 알려 주는 것
거래소 18곳의 빈칸을 나란히 놓고 보면 한 가지가 보입니다. 거래소 API는 거래소 자기 안에서 일어난 매매를 보여 주려고 만들어진 것이지, 한 사람의 자산 전체를 보여 주려고 만들어진 것이 아닙니다. 다른 거래소에서 온 코인, 거래소 밖 지갑, 거래가 아닌 수입은 애초에 설계 바깥에 있습니다.
그러니 거래소를 두 곳 이상 쓰는 사람의 자산관리가 어려운 이유는 앱이 못 만들어서가 아니라, 재료가 그 모양으로밖에 안 나와서입니다. 좋은 자산관리 앱의 조건은 "API를 다 받아 온다"가 아니라 "못 받아 온 것을 어디에 어떻게 적어 뒀는지 보여 준다"에 가깝다고 우리는 생각합니다.
자주 묻는 질문
API를 연결하면 과거 거래 내역이 전부 들어오나요?
거래소마다 다릅니다. GMO코인은 최근 하루치, 코빗은 36시간, OKX는 현물 3개월, 바이비트는 첫 연결 때 180일만 줍니다. 그 전 기록은 API로는 못 가져오므로 연결해 두면 그때부터 쌓이는 구조입니다.
업비트·빗썸 체결이 일부만 들어오는 이유는?
두 곳은 "내 체결 전부"를 묻는 API가 없고 종목별로 물어야 합니다. 사토시노트는 잔고에 있는 종목과 이미 기록된 종목을 묻는데, 다 팔아서 잔고가 0인 종목은 사용자가 종목을 알려 줘야 가져올 수 있습니다.
거래소별로 무엇을 가져오는지는 어디서 보나요?
사토시노트 설정 › 자산 연동의 거래소 카드마다 "가져오는 범위" 상자에 한 줄씩 적혀 있고, 거래소 연동 가이드(satoshinote.io/ko/exchange-guide)에도 같은 내용이 있습니다.
이 글은 사토시노트 팀의 생각을 적은 칼럼입니다. 특정 거래소를 권하거나 깎아내리지 않습니다. 거래소별로 무엇을 가져오고 못 가져오는지는 설정 › 자산 연동의 "가져오는 범위" 상자와 거래소 연동 가이드에 적어 두었습니다.