-
Notifications
You must be signed in to change notification settings - Fork 1
주가지수 기능 개발 과정
sieun edited this page Dec 3, 2024
·
1 revision

위와 같은 화면 구현에 필요한 차트 정보를 가져오기 위해서, 한국 투자 증권에서 제공하는 분단위 지수 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}")
...- [FE] 프론트엔드 기술스택
- [FE] 라이브러리 없이 차트 구현 이유
- [FE] Canvas API 사용방법
- [FE] 네비게이션 바 애니메이션 구현
- [FE] Socket.io 사용방법
- [FE] Tanstack Router에 대하여...
- [FE] Intl(Internationalization) API
- [FE] React Suspense 적용
- [FE] 한글 입력 방식의 유연성을 높인 검색 시스템 구현하기
- [BE] 백엔드 기술 스택
- [BE] SSE vs Socket.io
- [BE] Redis를 도입하게 된 계기
- [BE] ACG Rule을 활용한 Secure CI CD 파이프라인 구현
- [BE] Nginx 로드밸런싱을 통해 한국 투자 API 소켓 제한 극복
- [BE] 주가 지수 기능 개발 과정
- [BE] 매수 및 매도 기능 개발 과정
- [BE] 실시간 자산 조회 기능 개발 과정
- [BE] 단위 테스트
- [BE] redis를 이용한 한국투자 Open API 세션 관리
- [BE] 데이터베이스 인덱싱
- [FE] React에서의 DOM 요소 접근 (useRef vs getElementById)
- [FE] Outlet을 활용한 공통 레이아웃 관리
- [FE] react hooks가 특정 조건에서 실행되면 안되는 이유 & useQuery에 query function 매개변수가 undefined일 수도 있을 때 어떻게 해결할까
- [FE] cross‐domain 로컬 환경에서 cookie로 인증 처리하기 with vite proxy
- [FE] 크롬&사파리 Composition 차이
- [FE] useEffect 의존성 배열
- [BE] Naver Cloud Platform HTTPS 무응답 현상
- [BE] 한국투자 Open API에서 access token을 발급받지 못하는 문제
- [BE] 한국투자 Open API와 웹소켓 연결이 되지 않던 문제
- [BE] 한국투자 Open API 웹소켓 연결이 중단되는 문제
- [BE] 같은 주식 주문이 동시에 여러 번 체결되는 문제
- [BE] 한국투자 Open API Websocket 세션을 두 개에서 한 개로 변경하기
- [BE] Nginx 로드 밸런싱 중 Socket bad Request 발생하는 현상
- [BE] 매수/매도 체결 로직에 의해 redis pub/sub이 정상적으로 동작하지 않는 문제