Skip to content

한국투자 Open API Websocket 세션을 두 개에서 한 개로 변경하기

JIN edited this page Dec 1, 2024 · 1 revision

🧑🏻 작성자

⚙️ Web BE ⚙️ Web BE
김진 이시은

💣 문제 상황

이 링크에서는 세션을 두 개로 나누어서 문제를 해결했었다. 그러나, 한국투자 Open API Websocket에서 한 세션 당 41건의 이벤트만 구독이 가능해 세션을 하나라도 아끼기 위해 세션을 하나로 합쳐서 관리하기로 했다.

✨ 해결 과정

기존에 세션을 두 개로 유지했던 이유는 다음과 같다.

  • 매수/매도 체결 로직은 체결이 완료되면 해당 종목 코드에 대한 한국투자 Open API Websocket과 BE 서버 사이의 구독이 끊긴다.
  • 주식 상세 페이지에서 벗어나면 해당 종목 코드에 대한 한국투자 Open API Websocket과 BE 서버 사이의 구독이 끊긴다.

⇒ 서로 다른 로직에 의해 구독이 잘못 해지될 가능성이 있었다.

한국투자 Open API Websocket과 BE 서버 사이의 구독, 구독 해제 요청 로직을 아래와 같이 변경했다.

subscribeByCode(trKey: string) {
    this.baseSocketDomainService.registerCode(this.TR_ID, trKey);

    if (this.connection[trKey]) {
      this.connection[trKey] += 1;
      return;
    }
    this.connection[trKey] = 1;
  }

  unsubscribeByCode(trKey: string) {
    if (!this.connection[trKey]) return;
    if (this.connection[trKey] > 1) {
      this.connection[trKey] -= 1;
      return;
    }
    delete this.connection[trKey];
    this.baseSocketDomainService.unregisterCode(this.TR_ID, trKey);
  }

구독을 할 때에는 종목 코드에 대한 연결 수를 모두 셀 수 있도록 했다.

구독을 해지할 때는 해당 종목 코드에 대한 모든 연결이 끊겼을 때에만( this.connection[trKey] = 0 이 되는 시점) 한국투자 Open API Websocket에 구독 해제 요청을 보내도록 했다.

이렇게 코드를 수정한다면, 몇 개의 요청이 있는지와 상관 없이 모든 연결이 끊겼을 때에만 구독 해제 요청을 하게 되므로 잘못 해지할 가능성을 없앨 수 있다.

👓 참고 자료

📜 개발 일지

⚠️ 트러블 슈팅

❗ 규칙

🗒️ 기록

기획
회의록
데일리스크럼
그룹 멘토링
그룹 회고

😲 개별 멘토링

고동우
김진
서산
이시은
박진명
Clone this wiki locally