금융/증권사API

일반 메소드와 이벤트 메소드

씩씩한 IT블로그 2021. 2. 13. 23:10
반응형

키움 API에서는 일반 메소드와 이벤드 메소드가 있다. 이들의 차이점, 용도, 사용법등을 알아본다.

 

전체 FLOW

유저가 데이터를 요청하면 서버에서 이를 처리하여 보내준다.

이때 서버가 처리 하는동안 요청을 끊임없이 계속 하면 과부하가 걸릴 수 있고 서버가 처리하기 전에 데이터를 전송하려고 하면 에러가 날 수도 있다. 

따라서 키움 api의 경우 사용자가 데이터를 요청했을때 이벤트를 발생시켜 이 문제를 해결한다.

 

여기서 사용자가 데이터를 요청하는 함수를 일반매소드라고 하고,

이벤트(일반매소드를 이용해 데이터를 요청하는것)가 발생할때 까지 기다렸다가 , 이벤트가 발생한 후 동작하는 메소드를 이벤트 매소드 라고 한다.

 

일반 메소드

1. 방식

일반 매소드는 ocx방식을 파이썬으로 동작시기키 위해서 .dynamic()함수를 이용해서 쓴다.

방식은 아래와 같다.

self.kiwoom.dynamicCall("메소드명(파라미터1타입, 파라미터2타입)", 인풋1, 인풋2) 

일반메소드의 이름을 입력하고, 파라미터1의 타입, 파라미터2의 타입을 적는다.

그리고 그 각각의 파라미터에 들어갈 인풋값들을 넣는다.

 

2. 예시

self.kiwoom.dynamicCall("SetInputValue(QString, QString)", "종목코드", "005385")  

 

3. 참고

일반 매소드의 종류는 {개발가이드 5.3}에 있고 각 메소드들의 상세 명세는 {개발가이드 6.1}에 있다.

상세 명세에서 메소드들의 구체적인 인풋, 아웃풋 등을 확인할 수 있다.

 

이벤트 메소드

1. 방식

이벤트 메소드는 .connect() 함수를 쓴다.

키움에서 만든 이벤트 매소드를 A라고 하자.

이때 A의 파라미터와 똑같은 input값을 갖는 B라는 함수를 내가 직접 만든다. (함수이름, 파라미터는 명세와 달라도 된다. 근데 나는 헷갈릴 것 같아 파라미터는 똑같이 했고, 함수이름은 앞에 "my"만 붙였다)

그리고 A.connect(B) 로 쓰면된다.

즉 방식은 아래와 같다

self.kiwoom.A.connect(self.B)

def B(self, nErrCode):
    if nErrCode == 0:
        print('로그인 성공')
    else:
        print('로그인 실패')

 

2. 예시

# 로그인 이벤트 발생시켜놓고
self.kiwoom.OnEventConnect.connect(self.myOnEventConnect)  

# 로그인 요청
self.kiwoom.dynamicCall("CommConnect()")

# 서버가 이벤트 보내오면 아래 함수가 수행됨!
def myOnEventConnect(self, nErrCode):
	if nErrCode == 0:
    	print('로그인 성공')
        self.getData()
    else:
        print('로그인 실패')

 

3. 참고

이벤트 매소드는 {개발가이드 5.4}에 있고, 각 메소드들의 상세 명세는 {개발가이드 6.2}에 있다.

이벤트 매소드의 상세명세에도 입력값, 반환값, 어떤 요청에 대한 이벤트 메소드인지 등에 대한 정보가 있다.

 

반응형