NH OpenAPI 사용기

GHTS 2015. 9. 9. 10:48 Posted by 정직한 UnHa Kim

NH OpenAPI를 사용해서 코딩해 본 후기


1. 문서가 부실하다.

: MS워드 형식의 문서만 봐서는 수신된 데이터를 해석할 수 없는 경우가 제법 있다.

: 설명이 아예 누락된 함수도 있다.

부실한 문서 문제를 해결방법은

: 첨부된 C++ 예제 소스코드를 읽기.

: OpenAPI 자유게시판을 검색한 후 관련 내용 없으면 질문.

: 부단한 삽질.


2. DLL 형식이라서 C, C++로만 사용 가능.

몇몇 타 증권사는 COM형태로 배포해 주던 데, NH투자증권의 OpenAPI는 그런 거 없다.

Go언어에 DLL을 직접 호출할 수 있는 기능이 있지만, 오히려 더 불편하게 느껴졌다.

DLL과 Go언어 간에 중계 역할을 하는 부분을 C언어로 코딩한 후, Go언어에서 cgo로 호출하는 것이 더 편리하게 느껴진다.

어쨌거나, C언어를 만져야 하는데, C언어는 메모리 자동관리가 안 되다보니 메모리 해제에 상당히 신경이 쓰인다.

포트란, 비주얼 베이직, 자바, C#, 파이썬, 루비, Go언어등 여러가지 언어를 써 봤지만, 메모리 관리하느라 골머리를 앓아보기는 처음이다.

그나마 Go언어의 defer문을 사용하면 메모리 해제하는 것을 깜빡 잊어버릴 가능성을 획기적으로 낮추어준다. 그러나, 이미 해제한 메모리 다시 해제하다가 컴퓨터가 뻗기 때문에 defer문도 남발하면 안 된다.


3. 비동기 방식이라 낯설다.

흔히 사용하는 RPC는 질의와 응답이 짝을 이루어서 순서가 일정하다.

그런데, NH OpenAPI는 질의를 마치면 언제 응답을 받을 지 모른다.

또한, 응답을 받기 전에 다른 질의를 할 수도 있다.

그리고, 복수의 질의에 대한 응답은 순서도 제멋대로 이다.

정확히 말하면 서버가 답변할 수 있는 질의부터 응답한다.

이 방식의 장점은 서버가 하나의 질의를 처리하는 데 오래 걸릴 경우에도 방해받지 않는다는 점이다.

설사, 서버가 응답을 보내주지 않더라도, 그에 무관하게 다른 질의를 보내서 응답을 받아볼 수도 있고,  시세변화에 따른 실시간 데이터도 받아보는 데 방해받지 않는다.

이 방식의 단점은 프로그래밍이 상당히 복잡해 진다.

윈도우 메시지 형태로 역호출이 수신되는 데, 무한 반복문에서 이러한 역호출 메시지를 처리해 줘야 한다.

불행 중 다행으로 Go언어의 고루틴(goroutine)을 사용하면 다른 작업을 수행하면서도 무한 반복문을 동시에 실행하는 문제를 간단하게 해결할 수 있다. 그래서, 낯설긴 하지만 프로그래밍 하기는 생각만큼 까다롭지는 않다. (동시처리 기능이 없는 다른 언어를 사용했다면 상당히 애 먹었을 듯 하다.)


하여튼,  한글을 알고, C언어를 알고, 증권용어를 인터넷 검색으로 알음알음 안다고 해도 API 문서만 읽고서는 프로그램 짜기가 어렵다.

API를 사용하면서 이렇게 애 먹기는 오랜만이다. (거의 처음인 듯..)


문서 내용이 혼동을 유발하는 예)

1. SDK 설명서에는 서버를 ini 설정화일에서 정해준다고 되어있는 데, 예제 소스코드를 보니 SetServer() 함수가 떠~억 하니 있다. 오히려, ini설정화일이 잘 안 먹히고, SetServer()함수가 잘 동작한다.

2. '전일대비_등락폭'이 '전일종가 vs 현재가'의 등락폭인 줄 알았는 데, 값이 이상하게 나와서 게시판에 질문해 보니, '전전일종가 vs 전일종가'의 등락폭이라고 한다.

이름을 '전일_등락폭'이라고 지었으면 이렇게 헷갈리지 않았을 텐데.

3. '거래량 비율'이라는 항목이 있어서 '거래량 vs 상장주식 총수량'인 줄 알았는 데 역시가 값이 이상해서 게시판에 질문해보니, '전일 거래량 vs 금일 거래량'이라고 한다.

이름을 '전일 대비 거래량 비율'이라고 지었으면 이렇게 헷갈리지 않았을 텐데.

4. '증거금 비율'이 실수형이어야 하는 데, [1]char이다. 게시판을 검색해 보니 다른 사람이 이미 질문했었고, 답변도 있다. 그 내용은 시장조치1, 시장조치2, ..., 시장조치6 중에서 1,2,3,4,5,6을 가리키는 것이라고 한다.  '시장조치'라고 해서 KRX증권거래소에서 무슨 조치를 한 내역인 줄 알았더니 그게 아니었다.

차라리, '종목별 추가정보'라고 불렀으면 덜 헷갈렸을 텐데.

5. '거래대금'과 '시가총액'의 숫자가 너무 작아서 삽질해 보니 '거래대금'은 100만원 단위, '시가총액'은 억원 단위이었다. 문서에 단위를 표시해 주면 간단하게 해결될 문제인데.

'GHTS' 카테고리의 다른 글

Xing API에 숨겨진 지뢰 3  (0) 2018.06.07
Xing API에 숨겨진 지뢰 2  (0) 2018.06.07
Xing API에 숨겨진 지뢰 1  (0) 2018.06.07
ZeroMQ에서 nanomsg로 이전.  (0) 2016.11.02
NH OpenAPI 사용기  (0) 2015.09.09
ZeroMQ를 이용한 분산형 구조.  (0) 2015.03.10

댓글을 달아 주세요