업비트 거래소를 이용하여, 코인 자동 매매 프로그램을 만들어보자
그럴려면 REST API의 개념에 대해 알아야한다. 일단 REST API가 뭔지, 구체적인 예시를 보자.
웹상에서 서로 간에 데이터를 주고 받으려면,
클라이언트(수신자)가 서버(송신자)에게 이런이런 정보를 주세요~ 하고 요청을 해야
서버가 클라이언트에게 데이터를 줄 것이다.
그런데, 그 요청을 어떻게 할건지를 정해놔야 서버와 클라이언트가 서로 소통을 할 수 있을것이다.
이 때, 클라이언트가 서버에게 요청하는 방법(형식?)을 표준화 해놓은걸 REST API라고 한다.
자잘한 설명보다 구체적인 예시를 보이는게 이해가 빠를 것 같다.
위 그림은 가상화폐 거래소인 업비트에서 제공하는 API에 대한 설명을 제공하는 페이지이다.
위 그림을 보면 "마켓코드 조회" 라는 API를 내가 선택했는데, 알려달라는 API 는 안알려주고 뜬금없이
웬 웹 사이트주소(url)을 알려주고 있다.
사실 이게 바로 REST API 이다.
무슨 말이냐면 내가 REST API는 데이터를 보내달라고 요청하는 "방법(형식)"이라고 했는데,
저런식으로 url처럼 생긴 문자열을 보내는 것. 이것이 REST API에서 정해놓은 방법(형식)이다.
그러니까 무슨 말이냐면
클라이언트가 서버에게 저기 적혀있는 url을 보내면, 서버는 클라이언트가 자신에게 데이터를 요청한다고 인식을 하고 약속된 데이터를 클라이언트에게 보내준다.
위 API의 경우, 현재 업비트에서 거래 가능한 모든 코인들의 마켓코드가 무엇인지를 Return 해주는 api이다.
실제로 저 API를 한번 사용해보자. 사용방법은 간단하다. 그냥 저 웹주소를 브라우저 주소창에 쳐준다.
위와 같이 코인정보들을 리턴해서 보여주는 모습을 볼 수 있다.
내용 몇 개만 확대해서 살펴보자
[{"market":"KRW-BTC","korean_name":"비트코인","english_name":"Bitcoin"},
{"market":"KRW-ETH","korean_name":"이더리움","english_name":"Ethereum"}
결과 값을 보면. 비트코인의 마켓코드는 KRW-BTC 라는 것을 알 수 있다.
결과 값을 보면, 이더리움의 마켓코드는 KRW-ETH 라는 것을 알 수 있다.
이것이 기본적인 REST API의 컨셉이다.================================================
다음은, 파이썬을 이용해서 이 API를 사용하는 방법을 알아보자.
파이썬에는 이러한 REST API를 사용할 수 있도록 하는 라이브러리가 존재하는데,
그 라이브러리의 이름은 requests 이다.
위와 같이 파이썬 코드를 짜서 실행시키면?
아까 웹브라우저에서 결과값을 봤던거랑 똑같이, 모든 코인들의 마켓주소가 리턴된다.
저 response라는 변수에는, 업비트 서버가 리턴해 준 마켓코드 정보가 문자열 형태로 담겨있는 것이다.
어느 웹사이트에서 사용하는 REST API이든, 사용방법은 모두 위와 같다.
파이썬을 사용해서 그 API를 통해서 서버에게 데이터를 받으려면,
위에 첨부한 예제코드를 그대로 가져온 뒤, url 변수에 담기는 주소값만 각각의 REST API에 맞는걸로 넣어주면 되는 것이다.
##마지막으로,,
앞에서 설명 안하고 그냥 넘어간게 있다.
뭐냐면, REST API는 뒤에 파라미터를 추가로 쓸 수 있다.
무슨 말이냐면.. 앞에서 우리가 같이 봤던 REST API의 경우,
https://api.upbit.com/v1/market/all <- 이렇게만 적고 끝이 아니라,
뒤에 파라미터를 넣어서 서버에게 좀 더 구체적인? 혹은 옵션의 요구를 할 수 있는 것이다.
무슨 말이냐면.. 이것도 예를 살펴보자.
사실 앞에서는 말하지 않았지만, 마켓코드조회 API를 소개하는 페이지에 보면.. 아래에 QUERY PARAMS라는 파라미터에 대한 설명이 있다.
파라미터의 이름은 isDetails인데, 이 값이 true이면 유의종목 필드 등의 상세정보를 추가로 제공한다고 한다.
그리고 이 값이 false이면, 그런 정보는 생략하고 데이터를 리턴한다.
근데 . 앞에서 우리가 사용했던 REST API의 주소는
https://api.upbit.com/v1/market/all 였다.
그러니까 isDetails가 true인지 false인지 따로 표시를 안했다는 거다.
근데도 API가 정상동작했었다. 왜냐면..
위 그림의 동그라미 표시를 봐라. 저 파라미터는 선택 파라미터다!
선택 파라미터니까 굳이 추가하지 않아도 정상 동작을 했던 것이다.
만약 REST API를 소개하는 란에서, QUERY PARAMS에 무언가 추가 파라미터가 있으며, 그 파라미터가 선택 파라미터가 아니라면??
그러면 반드시 뒤에다가 파라미터에 대한 정보를 추가해서 API를 실행해야한다.
그러면,
파라미터를 한번 실제로 넣어보자.
파라미터 넣기전 API 형태 : https://api.upbit.com/v1/market/all
파라미터 넣었을 때 API 형태 : htps://api.upbit.com/v1/market/all?isDetails=true
이런식으로 파라미터를 추가한 것이다.
이렇게 파라미터를 추가해서 웹 사이트 주소창에 입력해보자
원래 앞에서는 볼 수 없었던, market_warning 이라는내용이 추가로 리턴되는 모습을 볼 수 있다.
이번에는 isDetails 값을 false로 해서 명령을 날려보자.
market_warning 정보가 없어진 모습을 볼 수 있다.
이렇듯. REST API에서는 뒤에 파라미터를 무엇을 넣냐에 따라서 서버가 다른 정보를 클라이언트에게 리턴해주기도 한다.
'프로그래밍 관련 > 프로그래밍 관련 잡지식' 카테고리의 다른 글
비트코인에 대하여(2) utxo (2) | 2021.04.21 |
---|---|
비트코인에 대하여(1) 개요 (1) | 2021.04.20 |
리눅스 gcc에 대하여 개요 사용방법 옵션들 (0) | 2021.04.19 |
VS Code. Extension Offline 설치 (0) | 2021.04.19 |
REST API. 그리고 JWT 토큰 & 인증에 대하여 (2) | 2021.04.15 |