여기까지 응답받을 준비를 마쳤다면 로그인을 요청하는 함수(_comm_connect)를 살펴보겠습니다. 앞서 작성한 _login_slot 함수 아래에 다음 코드를 이어서 작성합니다.
Kiwoom.py
(...)
def _comm_connect(self): ------ 로그인 함수: 로그인 요청 신호를 보낸 이후 응답 대기를 설정하는 함수
self.dynamicCall("CommConnect()")
self.login_event_loop = QEventLoop() ------ 로그인 시도 결과에 대한 응답 대기 시작
self.login_event_loop.exec_()
self.dynamicCall("CommConnect()")는 self.dynamicCall을 사용하여 CommConnect를 호출하는 코드로, API 서버로 로그인 요청을 보냅니다. 여기서 dynamicCall 함수는 Kiwoom 클래스가 상속받은 QAxWidget 클래스로 사용할 수 있으며, CommConnect는 API에서 제공하는 함수로 키움증권 로그인 화면을 팝업하는 기능이 있습니다.
앞서 설명했듯이 API는 요청을 보냈어도 응답이 바로 오지 않을 수 있는 비동기 방식으로 동작하기 때문에 프로그램이 로그인 수행 결과를 기다리지 않고 다음 코드를 수행할 수 있습니다. 하지만 이렇게 로그인이 되지 않은 상태에서 다음 코드로 넘어가 버리면 로그인이 필요한 기능들(계좌 정보 얻어 오기 등)을 수행하는 과정에서 에러가 발생할 수 있기 때문에 로그인 시도 이후 응답을 대기하는 상태로 만들겠습니다. 이 과정을 수행하는 코드가 다음에 등장하는 self.login_event_loop = QEventLoop()와 self.login_event_loop.exec_()입니다. 두 라인 중 하나라도 빼먹으면 응답 대기 상태가 될 수 없기에 이 둘을 세트처럼 생각해 주기 바랍니다.