업비트 API로 이해해보는 REST API

업비트 API로 이해해보는 REST API

가장 빠르게 익히는 방법은 직접 해보는 것입니다. 이번 포스팅을 통해 자동으로 데이터를 받아오기 위해 알아둬야 할 REST API의 기본개념을 익힐 수 있을 것입니다. 웹 브라우저 주소창에 업비트 API를 입력하여 어떤 데이터를 서버로부터 받아올 수 있는지를 살펴보겠습니다.

글의 순서

API 개념과 REST API
코인 거래소 업비트의 API
업비트 REST API 활용 : 마켓 정보 및 Ticker 조회
업비트 REST API 활용 : 캔들 조회


API 개념과 REST API

API(Application Programming Interface)는 응용 프로그램이 상호작용하기 위해 필요한 모든 것을 뜻합니다. 두 Application Program(응용 프로그램)간에 일어나는 일입니다. 만약 비트코인 가격 정보를 코인 거래소로부터 가져오는 응용 프로그램을 만든다면, 코인 거래소의 서버에 접속한 다음, 서버에 있는 응용 프로그램으로부터 데이터를 받아와야 합니다. 이때 필요한 것이 서버에서 제공하는 API인 것입니다.

요즘 대부분의 웹서버들은 REST API 형태로 서비스를 제공합니다. REST는 Representational State Transfer라는 용어를 줄인 말로 API 메시지만 보고도 이를 쉽게 이해 할 수 있는 구조로 되어 있습니다. REST API는 웹(HTTP)의 장점을 최대한 활용하기 위해 만들어진 아키텍처입니다.



코인 거래소 업비트의 API

코인 가격 정보를 가져오는 응용 프로그램에 집중해보겠습니다. 참고자료 1에서 확인하실 수 있듯이 업비트(UPbit) 라는 코인 거래소는 응용 프로그램 개발자가 가격 정보를 받을 수 있는 방법을 제시하고 있습니다.

코인 가격을 받아오기 위해 업비트가 제시하는 REST API를 관찰해보겠습니다. REST API를 이용하여 코인 가격을 받기 위해서는 마켓 정보와 Ticker, 캔들 데이터를 가져와야 합니다.

여기서, 마켓 정보는 원화(KRW)로 거래하는 시장인지, 비트코인으로 거래하는 시장인지, 또는 USDT로 거래하는 시장인지를 의미합니다. Ticker는 주식시장에서 거래되는 각 종목을 식별하기 위해 만든 부호인데, 코인 시장에서도 똑같은 개념을 사용합니다. 만약 원화 시장에 상장된 비트코인의 현재 가격을 받아오고 싶다면 Ticker API를 사용할 수 있습니다. 마지막으로 캔들은 봉으로 불리기도 하며, 주가나 코인 가격 그래프에서 막대 모양으로 나타납니다. 캔들(candle)은 초를 뜻하는데, 막대 모양이 초를 닮아있기도 합니다.


업비트 REST API 활용 : 마켓 정보 및 Ticker 조회

아래의 API 주소를 사용해서 시장 정보와 티커(Ticker)를 조회할 수 있습니다. 여기서 API 주소를 엔드포인트(End Point)라고도 합니다.

실습01

https://api.upbit.com/v1/market/all

이 주소를 그대로 복사한 다음 웹브라우저 주소창에 붙여넣기하고 엔터를 누르면, 마켓정보와 티커가 보입니다. 대괄호 [ ] 안에 중괄호 { } 단위로 ‘시장’과 ‘티커’가 있으며, 시장은 market, 티커는 korean_name, english_name으로 표시됩니다. 여기서 [{ }, { }, … , { }] 형태로 나타난다는 사실을 주목해주시기 바랍니다.

실습01 결과

[{“market”:”KRW-BTC”,”korean_name”:”비트코인”,”english_name”:”Bitcoin”},{“market”:”KRW-ETH”,”korean_name”:”이더리움”,”english_name”:”Ethereum”}, … , {“market”:”BTC-APE”,”korean_name”:”에이프코인”,”english_name”:”ApeCoin”}]

시장은 “market”으로, 티커는 “korean_name” 또는 “english_name”로 표시되어 있습니다. 만약 원화 시장의 비트코인 시세를 알고싶다면 market 파라미터에 KRW-BTC를 이용할 수 있습니다. 또한 시장에 상장된 비트코인의 현재 가격을 얻어오고 싶다면 아래와 같은 모양으로 Ticker API를 사용할 수 있습니다. ticker 물음표(?) 뒤에 markets=KRW-BTC를 붙인 형태입니다.

실습02

https://api.upbit.com/v1/ticker?markets=KRW-BTC, KRW-ETH


업비트 REST API 활용 : 캔들 조회

캔들은 주가 그래프를 구성하는 막대입니다. 캔들 차트로부터 특정 시간 간격에서 가격이 어떻게 변화했는지를 알 수 있습니다. 막대의 몸통을 구성하는 것은 특정 시간 구간에서 시작가와 종가를 표시해주며, 꼬리처럼 보이는 가는 선은 최고가와 최저가를 보여줍니다. 업비트 차트에서의 시간 간격은 하루, 일주일, 한달, 그리고 분(1, 3, 5, 10, 30, 60분), 틱(체결 기준 1, 3, 5, 10, 30, 60개 간격의 시세)으로 구성되어 있습니다. 예제를 보면 이해가 쉽습니다.

(1) 캔들 데이터를 얻기 위한 API 주소

원화, 비트코인 마켓인 KRW-BTC에서 가장 최근으로부터 30분 간격의 막대 2개 데이터를 가져오고 싶다면 다음과 같이 요청할 수 있습니다. 여기서 30분 간격의 막대를 30분봉이라고 표현하기도 합니다. 참고로 업비트에서 요청할 수 있는 캔들 개수는 최대 200개입니다.

실습03

https://api.upbit.com/v1/candles/minutes/30?market=KRW-BTC&count=2

위의 API 주소를 복사해서 웹브라우저 주소창에 넣으면 아래와 같은 결과를 보여줍니다. 여기서도 대괄호 [ ] 안에 들어있는 중괄호 { }를 유심히 봐주시기 바랍니다. 막대 1개분의 데이터가 중괄호 { } 안에 들어있습니다. 막대 2개 데이터를 가져왔기 때문에 [ { }, { } ] 모양이 됩니다.

실습03 결과

[{“market”:”KRW-BTC”,”candle_date_time_utc”:”2022-06-14T15:00:00″,”candle_date_time_kst”:”2022-06-15T00:00:00″,”opening_price”:29214000.00000000,”high_price”:29215000.00000000,”low_price”:29209000.00000000,”trade_price”:29215000.00000000,”timestamp”:1655218803324,”candle_acc_trade_price”:11529947.38805000,”candle_acc_trade_volume”:0.39467544,”unit”:30},{“market”:”KRW-BTC”,”candle_date_time_utc”:”2022-06-14T14:30:00″,”candle_date_time_kst”:”2022-06-14T23:30:00″,”opening_price”:28851000.00000000,”high_price”:29250000.00000000,”low_price”:28726000.00000000,”trade_price”:29214000.00000000,”timestamp”:1655218799483,”candle_acc_trade_price”:7997007470.24660000,”candle_acc_trade_volume”:275.35044852,”unit”:30}]

(2) to 파라미터 : 캔들 데이터의 기준시간을 정하는데 사용

이 밖에도 캔들 API에서는 데이터의 기준시간을 to 파라미터를 이용하여 정할 수 있습니다. 기준시간의 경우 ISO8061 표준을 따릅니다.

국제표준시(UTC)로 2022년 6월 14일, 10시까지 30분봉을 1개 요청하려면 실습04 API를 사용합니다. 1개 요청한다면 실습04 API에서 맨마지막 &count=1을 생략할 수 있습니다.

실습04

https://api.upbit.com/v1/candles/minutes/30?market=KRW-BTC&to=2022-06-14T10:00:00Z&count=1

위의 API 주소를 복사해서 웹브라우저 주소창에 넣으면 실습04 결과를 보여줍니다. 결과를 유심히 보면 두 번째, 세 번째 파라미터가 시간을 나타내는데, 각각 UTC와 KST로 나와있습니다. KST는 한국표준시를 뜻하며, 국제표준시에 09시간이 더해져 있다는 것을 확인할 수 있습니다.

실습04 결과

[{“market”:”KRW-BTC”,”candle_date_time_utc”:”2022-06-14T09:30:00″,”candle_date_time_kst”:”2022-06-14T18:30:00″,”opening_price”:29111000.00000000,”high_price”:29185000.00000000,”low_price”:28882000.00000000,”trade_price”:28920000.00000000,”timestamp”:1655200799124,”candle_acc_trade_price”:8163833279.02441000,”candle_acc_trade_volume”:281.11488491,”unit”:30}]

한국표준시 19시까지 30분봉 2개 데이터를 요청할 때는 실습05 API를 사용합니다. 그런데 웹브라우저 주소창에 복사해 넣고 결과를 확인하려면 실습05-2를 사용해야 합니다. 웹 브라우저 주소창에 쓸 때는 한국표준시를 나타낼 때 ‘+’대신 ‘%2B’를 사용합니다.

실습05-1

https://api.upbit.com/v1/candles/minutes/30?market=KRW-BTC&to=2022-06-14T19:00:00+09:00&count=2

실습05-2

https://api.upbit.com/v1/candles/minutes/30?market=KRW-BTC&to=2022-06-14T19:00:00%2B09:00&count=2

※ UTC(Universal Time Coordinated)는 1972년 1월 1일부터 시행된 국제 표준시입니다. 1970년 1월 1일 자정이 0밀리초이며, 그때부터 시간이 누적되고 있습니다. 한국 표준시(KST)는 UTC 보다 9시간이 빠르며, UTC+09:00로 표시합니다.


마치며 …

자동으로 데이터를 받아오는 코드를 만들기 위해 API를 살펴보는 중입니다. 이번 포스팅에서는 업비트 API를 통해 REST API를 이해해 보았습니다. API 주소와 파라미터에 대해 익숙해지셨으리라 기대합니다.

늘 강조하는 것이지만 가장 빠른 방법은 직접 해보는 것입니다. 이 포스팅에서 보여드렸던 API 파라미터를 바꿔보면서 이해의 폭을 넓혀보시길 바랍니다.

 

 

함께 참고하면 더 좋은 글 :
1. API와 파이썬 데이터 분석
2. 시계열 데이터 가시화 (1) 파이썬 그래프 그리기 3단계
3. 시계열 데이터 가시화 (2) 보고서용 파이썬 그래프 만들기
4. 시계열 데이터 가시화 (3) 파이썬 날짜변환, pandas를 이용한 그래프 그리기
5. 시계열 데이터 가시화 (4) 2개 y축 그래프로 코인 가격 비교
6. 파이썬 데이터 분석! 데이터 분석을 위한 코딩언어 파이썬
7. 파이썬 프로그래밍 time 이해 : timestamp, UTC, KST
8. 바이낸스 코인거래소 API Key로 계좌에 접속하는 파이썬 프로그래밍
9. 알아두면 좋을 컴퓨터 작동원리. 폰 노이만 아키텍처
10. 파이썬 기본


참고자료

[1] UPbit (2020),REST API를 이용한 업비트 시세 수신
[2] [위키백과] ISO 8601
[3] [위키백과] 협정 세계시(UTC, Coordinated Universal Time/Universal Time Coordinated)
[4] [위키백과] 한국 표준시(KST, Korea Standard Time)

Leave a Comment