Skip to content

주가지수 기능 개발 과정

sieun edited this page Dec 3, 2024 · 1 revision

실시간 주가 지수 차트 조회 기능

image

위와 같은 화면 구현에 필요한 차트 정보를 가져오기 위해서, 한국 투자 증권에서 제공하는 분단위 지수 API를 사용하기로 결정했습니다.

그러나 해당 API는 실시간 웹소켓 API가 아니었기 때문에, 여러 방법을 고민하다가 5분 단위로 서버→한투서버 API 요청을 보내 받아오는 방식으로 구현하기로 팀원들과 함께 결정했습니다.

아래와 같이 Cron 데코레이터를 활용해 반복적으로 조회해 주었습니다.

  @Cron('*/5 9-16 * * 1-5')
  async cronStockIndexLists() {
    const stockLists = await Promise.all([
      this.stockIndexService.getDomesticStockIndexListByCode('0001'), // 코스피
      this.stockIndexService.getDomesticStockIndexListByCode('1001'), // 코스닥
      this.stockIndexService.getDomesticStockIndexListByCode('2001'), // 코스피200
      this.stockIndexService.getDomesticStockIndexListByCode('3003'), // KSQ150
    ]);

    this.socketGateway.sendStockIndexListToClient(stockLists);
  }

한국투자증권 웹소켓 연동

저희 서비스는 한국 투자 증권에서 제공하는 웹소켓 API를 사용해서 실시간 데이터를 연동할 계획입니다. 그렇기 때문에 한국 투자 증권과 저희 백엔드 서버를 연결하는 작업이 필요했습니다.

처음에는 socket.io를 활용해서 간단하게 웹소켓 연동을 시도해보려 했으나, 제대로 작동하지 않았습니다.

한국투자증권에서 개발한 파이썬 라이브러리 코드를 살펴본 결과, socket.io가 아닌 웹소켓 프로토콜을 이용해 직접 웹소켓 연결을 해야할 것으로 예상되었습니다. 그에 따라, ws 모듈로 모든 로직을 바꿔주었더니 정상적으로 작동했습니다.

링크에서 1128 line 부터가 서비스에 참고한 코드입니다.

  async with websockets.connect(url, ping_interval=None) as websocket:

      for senddata in senddata_list:
          await websocket.send(senddata)
          await asyncio.sleep(0.5)
          print(f"Input Command is :{senddata}")

						...

📜 개발 일지

⚠️ 트러블 슈팅

❗ 규칙

🗒️ 기록

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

😲 개별 멘토링

고동우
김진
서산
이시은
박진명

Clone this wiki locally