본문 바로가기

AiDALab Project/AiDA Stocks

증권사의 REST Open API 지원

 

2022년부터 한국투자증권(KIS)을 시작으로 다양한 증권사들이 REST 타입의 Open API를 제공하기 시작했습니다.

예전에 증권사에서 제공했던 API는 구형 Windows 시스템에서 사용되던 COM 타입의 요소들로 구성된 시스템을 기반으로 만들어졌기 때문에 32비트에서만 작동하는 한계점을 가지고 있었고, 또한 최신 OS의 기능 및 성능에 미치지 못하는 구형 API 셋을 설치해야만 하는 문제가 남아있었죠.

 

그 때문에 REST API를 제공해야 한다는 주장이 진작부터 제기되었지만 증권사들의 대응은 지지부진했고, 아무런 발전없이 계속 이어져 왔던 상황이 2022년을 시작으로 바뀌기 시작한 것입니다.

현재는 한국투자증권 외에도 키움증권, LS증권(구 이베스트증권) 등에서 REST 형식의 Open API를 제공하고 있습니다.

 

그래서 각 증권사의 REST API를 비교해 보고자 Open API 사용 신청을 하여 키를 받고 사용법을 비교해 보았습니다.

단순히 비교하는 것이 목적이 아니라 현재 구축하고자 하는 시스템에서의 활용 가능성을 감안하여 어떤 증원사의 REST API가 가장 활용하기 좋은가..를 판단하는 것이 목적이었습니다.

그렇다보니 사용 편의성에 가장 치중하게 되었습니다.

 

사실 성능은 대동소이할 수 밖에 없죠.

어차피 REST API로 수행할 수 있는 기능은 주가 및 관련 정보를 읽어오는 것과 매매를 위한 인증 및 거래 기능에 한정되어 있기 때문입니다.

최근 유행하는 LLM을 적용하는 방향성도 있지만 증권사의 REST API가 제공하는 기능이 아니라 별개의 기능이 함께 사용되는 것에 지나지 않으므로 REST API의 기능, 성능은 증권사 별로 큰 차이가 없다고 할 수 있습니다.

 

그렇기 때문에 보유하고 있는 계좌에 따라 선택하거나, 마음에 드는 증권사의 API, 또는 자신의 개발 성향에 비추어 더 편리한 API를 선택하면 됩니다.

그래서 현 시점에서 많이 사용되고 있는 REST API인 한국투자증권(KIS), 키움증권, LS증권의 REST API를 비교해 보았습니다.

전반적인 기능의 비교가 아니라 가장 처음 사용해야 하는 접속 토큰 발행 기능을 중심으로 API를 어떻게 사용할 수 있는가를 살펴보았습니다.

DB 증권등 다른 증권사의 REST API도 있지만 전술한 3 종류가 가장 널리 사용되는군요.

 

예제 코드

먼저 파이썬 기반의 코드를 확인하겠습니다.

API 신청과 App Key, Secret Key의 발행은 각 증권사 사이트에서 안내에 따라 직접 처리하시기 바랍니다.

그리고 예제 코드에서의 App Key, Secret Key는 dotenv 라이브러리를 사용해서 읽어들이도록 합니다.

# kis.py : 한국투자증권 Open REST API 기반 접속토큰 발행

from dotenv import load_dotenv
import os, requests, json

load_dotenv()
appkey = os.getenv("KIS_APPKEY")
serect = os.getenv("KIS_SECRET")

def auth(data):
    url = "https://openapi.koreainvestment.com:9443/oauth2/tokenP"
    headers = { "Content-Type": "application/json; charset=UTF-8", }
    response = requests.post(url, headers=headers, json=data)

    print("Code: ", response.status_code)
    print("Body: ", json.dumps(response.json(), indent=4, ensure_ascii=False))


if __name__ == "__main__":
    params = {
        "grant_type": "client_credentials",
        "appkey": appkey,
        "appsecret": serect
    }

    auth(data=params)

 

 

위의 코드에서 파라미터의 이름, 콘텐트 타입 등만 해당 API의 기준에 맞게 수정하면 3종의 API가 모두 정상 작동합니다.

 

  • 키움 증권 REST API 기반 접속토큰 발행 (KIS 예제 코드를 기준으로)

 

  • LS 증권의 REST API 기반 접속토큰 발행 (KIS 예제 코드를 기준으로)
    • .env에서 읽을 키 값을 설정에 맞게 수정
    • url을 "https://openapi.ls-sec.co.kr:8080/oauth2/token"로 수정
    • headers의 Content-Type을 "application/x-www-form-urlencoded"로 수정
    • request.post 호출 시 "json=data" 대신 "data=data"로 수정
    • params의 "appsecret"를 "appsecretkey"로 수정

 

참고로 한국투자증권의 REST API의 경우, 보안을 위하여 토큰의 발행 횟수는 1일 1회로 제한되어 있습니다.

잦은 토큰의 발행은 접근제한 조치 등이 이루어질 수 있다고 합니다.

발행 후 24시간 동안은 동일한 토큰을 사용할 수 있기 때문에 주기적으로 발행하는 방법으로 사용하면 문제는 없을 것 같네요.

 

사용 편의성

REST API의 사용법은 대동소이하기 때문에 특별이 어떤 API가 더 편리하다.. 라는 것은 큰 의미가 없습니다.

대신 각 시스템이 가이드 및 매뉴얼, 질의응답, 커뮤니티 등을 얼마나 잘 제공하는가에 따라서 차이가 생길 것으로 보입니다.

다른 부분은 일단 제외하고 개발자들이 참고할 가이드/매뉴얼/레퍼런스와 예제 코드를 비교해 보았습니다.

 

1) 키움증권 REST API

 

일단 가장 이해하기 쉽고 편리한 API는 키움증권의 REST API로 보입니다.

공식사이트 자체에서 각 기능 별로 이해하기 쉽고 깔끔한 예제코드를 제공합니다.

위에서 사용한 코드는 기본적으로 키움증권에서 제공하는 코드를 기반으로 만든 것입니다.

공식 사이트의 예제 코드는 위의 예제코드와 비슷한 수준이므로 쉽게 이해가 가능합니다.

 

2) 한국투자증권 REST API

 

고급 기능을 구현하기 위한 지원이 뛰어난 API는 한국투자증권의 REST API로 보입니다.

솔직히 제공되는 기본 예제코드는 너무 간략화되어 있어서 초보자가 접근하기에는 이해하기 어렵습니다.

키움증권의 예제코드가 그냥 따라해보면 알 수 있는 수준이라면, 한극투자증권의 예제코드는 REST API의 사양을 제공하고 여기에 맞춰서 코드를 만들어라... 라는 식이라서 초보자보다는 어느 정도 경험이 있는 개발자에게 좋습니다.

 

기본으로 제시한 코드가 그리 친절하지 않은 대신, 한국투자증권에서는 Github를 통해서 샘플 코드를 제공합니다.

Github의 샘플코드는 더욱 복잡한 시스템을 개발할 수 있도록 다양한 기능을 구현하는 예제를 제공하고 있으며, 최근 유행하는 LLM을 적용한 기능을 구현하기 위한 예제도 제공합니다.

 

3) LS증권 REST API

 

LS 증권의 REST API는 3종의 REST API 중에서 제공되는 문서가 제일 빈약해 보입니다.

특히 예제코드는 한국투자증권의 사이트에서 제공되는 것과 비슷한 수준의 코드만 제공되기때문에 초보자에게는 쉽지 않습니다.

그리고 한국투자증권과 달리 Github 등을 통해서 참고할 수 있는 자료를 제공하지 않네요.

 

3종 모두 테스트베드와 같이 실제로 작동시켜볼 수 있는 환경을 제공하고 있지만 정작 필요한 예제코드의 수준이 서로 달라서 활용도에 차이가 생기고 있습니다.

그러나 앞에서도 이야기했듯이 기능적인 차이는 그다지 의미가 없으므로 각각 참고하면서 필요한 정보나 자료를 취사선택하면 될 것 같습니다.

단적인 예로.. 위에서 사용한 예제코드가 일부 명칭만을 바꾸거나 하는 식으로 3종 모두에서 사용할 수 있기때문에..

처음 시작할 때에는 키움증권의 가이드를 참고하고, 좀 더 고급 기능이나 복자한 기능을 구현할 때에는 한국투자증권의 샘플코드를 참고하거나.. 하는 식으로 적절히 사용하면 좋겠습니다.

 

 

728x90
반응형