지식이 늘었다(롱)/LS증권 API 거래

250121 LS증권의 xingAPI와 OpenAPI

PurpleGuy101 2025. 1. 22. 13:36

 

0.

 

Udemy 강의를 통해 

HTML, CSS의 기초를 다지고 NodeJS에 대해 알아보았으며

 

이후 FastAPI에서도 간단한 기능을 구현해보았다.

왜 개발한다는 사람들이 RestAPI에 대해서 열광할까? 하는 의문이 들었었는데

 

매우 대중적인 HTTP과 JSON파일,

직관적인 REST 원칙만 지키면

 

별도의 플랫폼 없이 JSON 상하차가 가능하기 때문이다.

 

RestAPI는 API의 한 종류이며 Rest원칙을 잘지킨 API이고

OpenAPI는 모든 이가 쓸 수 있는 공개API이다.

이들이 모든 API를 의미하는게 아니다.

 

1.

 

RPC와 API의 차이

 

RPC, Remote Procedure Call은

분산스토리지나 분산된 시스템에서 원격 서버의 함수를 로컬함수마냥 호출하는 기능이다.

이게 API와 다른게 뭔가? 하는 의문이 들어서 GPT에게 물어봤다.

 

2.

 

API를 어떻게 만드는지에 대해서 배워본 것은 좋았다.

하지만 요즘같은 시대에는 이러한 수준의 지식에서 그치고 넘어가버린다면

생각보다 많은 가치를 창출하지 못하는 것을 체감하고있다.

 

필요를 느끼고 자발적으로 무언가를 만들어나가는 과정에서

지식은 뇌속의 여러 공간에서 유기적으로 얽히고 집약적으로 저장되어

지혜로 승화될 수 있다.

 

3.

 

그런 의미에서 배운 지식을 

실전에서 적용하면서 사용하고 싶기에..

API를 실전에서 사용하려면 어떻게 하는게 좋을까.. 고민을 많이 했다.

 

가령 PVP게임의 전적검색이나

RPG게임의 캐릭터정보, 순위 등을 검색해주는 API를 사용하여

웹서비스나 어플리케이션을 만들기도 하는 것도 나쁘지는 않아보인다.

 

아니면 백엔드 정규과정마냥

쇼핑몰이나 게시판을 하나 만들어서

SQL조작하고 회원관리하고 결제기능 추가할 수도 있을 것이다.

 

 

4.

 

이것저것 고민을 해보는 도중 

증권사 API를 통한 주가확인 및 주식거래를 떠올렸다.

 

브로커 아니면 API도 안되는 트레이딩뷰나

불안정한 야후파이낸스 말고..

국내증권사에서도 프로그램매매하라고 API로 판을 깔아두었고

 

그 API를 이용하여 개발을 진행하고.. 거래를 수행하면

증권사도 이득, 나도 이득인 윈윈이 된다.

왜 이생각을 못했을까?

 

 

5.

 

(https://www.youtube.com/@programgarden)

유튜브에서 

 

주식거래 API로 검색을 했더니

LS증권에서 한 코딩채널과 계약을 맺고

API 사용법을 알려주는 강의를 업로드해놨다.

 

(https://openapi.ls-sec.co.kr/)

슈카가 있던 이베스트증권이

LS사에 인수되어 LS증권으로 개명을 한듯하다.

모바일로 계좌를 트고 공인인증서를 발급받아 PC에 저장한 뒤

 

xingAPI 신청, OPEN API 신청을 

진행하고 xingAPI에 관한 문서를 훑어보았다.

 

6.

 

xingAPI는 기본적으로 HTS의 통신부분만을 떼어놓은 부분이라고 생각해도 된다.

xingAPI에서는 두가지 버전이 존재한다.

 

DLL (Dynamic Link Library)는 윈도우OS의 동적라이브러리라는 의미로

exe같은 바이너리 파일을 실제로 실행할때,

런타임 과정에서 링커가 라이브러리를 참조하는 방식으로 작동하여

따로 함수에서 메모리도 안사용하고 빠르게 사용가능하다.

보통 윈도우 시스템에서 user32.dll, kernel32.dll등과 같이 구현되어 있고

C/C++와 함께 성능최적화에 목적을 두고 종종 사용된다.

 

반면 COM (Component Object Model) 또한 DLL처럼

런타임과정에서 객체를 생성하고 메서드를 호출한다는 것은 비슷하나

Windows 레지스트리에 COM객체를 생성해두고 그것을 직접 참조해서

빠르게 호출한다.

 

DLL의 객체지향적 버전이라고 볼 수 있겠다.

DLL이 Procedural하고 개발자가 직접 로드하는 방식이 C언어스러운 반면

 

COM은 객체의 인터페이스와 상호작용하는게 Java스럽다

이러한 객체지향적 방식으로 C/C++과 같이 특정언어에만 종속되지 않고

VB, 엑셀, C#, Python등에서 사용할 수 있도록 설계되었다.

언어독립적이고 상호운용성을 제공한다.

 

그렇기에 속도의 측면에서 COM은 DLL보다 느린경향이 있다.

DLL은 메모리에서 함수의 주소를 Call한뒤

점프하여 작업을 수행하고 돌아오는 방식이지만

 

COM은

윈도우 레지스트리 조회->

CLSID확인-> DLL이나 EXE 로드 -> COM 객체 생성 ->

객체 참조 카운팅(메모리 추적 관리) -> 인터페이스 쿼리로 사용가능한 메서드 확인

-> 작업수행

 

이런 과정을 거친다고 한다.

 

7.

 

그래서 아마추어로 개발하는 사람들에게는

xingAPI의 COM버전을 사용하는 것을 추천해주고 있다.

엑셀이나 파이썬이 훨씬 다루기 쉬운편이라고한다.

 

맛보기로 DLL버전 문서를 슬적 보았다.

DLL버전은 Transaction 단위로 

구조체에 필수정보만 모아서 API에 Request한다.

#include <windows.h>
#include <stdio.h>
// ETK_Connect 함수가 선언된 헤더 파일 포함
#include "ETK_API.h"

// 서버에 연결하는 코드
BOOL ConnectToServer(HWND hwnd) {
    LPCSTR serverIP = "192.168.1.100";  // 서버 IP
    int port = 8080;                   // 서버 포트
    int startMsgID = 1000;             // 메시지 ID
    int timeout = 5000;                // 연결 시도 시간 (5초)
    int maxPacketSize = 1024;          // 최대 패킷 크기

    // ETK_Connect 호출
    BOOL result = ETK_Connect(hwnd, serverIP, port, startMsgID, timeout, maxPacketSize);

    if (result) {
        printf("서버 연결 성공!\n");
    } else {
        DWORD error = GetLastError();  // 에러 코드 확인
        printf("서버 연결 실패! 에러 코드: %lu\n", error);
    }
    return result;
}

int main() {
    HWND hwnd = NULL;  // 콘솔 프로그램에서는 NULL 사용
    if (ConnectToServer(hwnd)) {
        printf("프로그램 종료.\n");
    } else {
        printf("연결 실패로 프로그램 종료.\n");
    }
    return 0;
}

 

음..

파이썬보다 먼저 C부터 배운 세대라서 

이쪽이 더 정감이 간다

 

일단 파이썬 코드부터 보는걸로 하자

 

8.

 

LS증권의 API 문서를 까보면

결국 

메소드 종류, 도메인주소, URL, JSON

다나와있는데

 

이게 DLL이고 COM이고 차이가 그렇게 큰가?

잘모르겠네

 

해당주소에 양식에 맞춘 Reqeust JSON 파일을 보내고

Response JSON파일을 받아서 잘 분해하면

문제없는 아닌가..?

 

 

 

 

 

 

9.

 

이제와서야 눈치챈건데

xingAPI와 openAPI는 서로다른 API였다.

둘이 같은 API라고 자연스럽게 생각했었는데,

전혀 그런게 아니였음

 

 

헤헤 바보다 바보