StockPulse
DATA국내외 시황과 모의투자를 한 화면에 모은 대시보드
- 기간
- 2026.07 ~ 2026.09
- 역할
- 프론트 · 백엔드 프록시 단독
- 사용 기술
- React 18 · D3 · SSE · Zustand · Node 프록시
개요
지수·히트맵·뉴스 감성·실시간 체결과 호가·순위·KIS 모의계좌를 한 화면에 모은 시황 대시보드입니다. 국내 부동산 실거래와 3D 단지 배치도도 함께 제공합니다.
UI 구성과 함께 외부 API의 호출 제한·부분 실패·데이터 부재를 일관되게 처리하는 데 중점을 뒀습니다.
문제와 해결
- 01
호출 한도 안에서 요청 직렬화
KIS 모의계좌는 초당 상한이 낮아, 라우트가 각자 요청을 던지면 서로를 밀어냅니다. 실측으로 서로 다른 종목을 연속 조회할 때 10건 중 6건, 실패율 60%였습니다.
모든 호출을
kisFetch로 모으고 전역 직렬 큐에 적응형 간격을 적용했습니다. 5xx나 429가 발생하면 간격을 1.6배 늘리고, 성공하면 15ms씩 줄입니다(200~1600ms). 같은 조건에서 다시 측정한 12건은 모두 성공했습니다.주문 요청은 자동으로 재시도하지 않습니다. 같은 주문이 중복 전송되지 않도록 조회와 주문의 실패 처리 방식을 분리했습니다.
- 02
대체 데이터의 명확한 구분
실패 경로에서 목 데이터를 반환하면 화면은 정상처럼 보이지만 사용자는 실제 값과 대체 값을 구분할 수 없습니다.
실데이터가 없으면
unavailable상태와-를 표시하고, 실패한 응답과 빈 성공 응답은 캐시에 저장하지 않도록 했습니다. - 03
초기 화면 번들 분리
분석과 부동산 화면까지 한 번에 내려받아 첫 진입 번들이 632KB까지 커졌습니다.
탭별 코드를 지연 로딩하고 공통 모듈 경계를 정리해 초기 번들을 356KB로 줄였습니다.
주요 구현
- 서버 WebSocket 게이트웨이 1개 → SSE 팬아웃 — 브라우저의 KIS 직결 차단
- 등락색 주입 — 글로벌(초록 상승)·한국(빨강 상승) 모드를 전역에서 결정, 컴포넌트의 hex 하드코딩 제거
- SSE 체결·호가 파서 계약을 골든 테스트로 고정
- 트리맵 히트맵, 3소스 뉴스 배치 + 감성 스코어
- KIS 모의계좌 페이퍼 트레이딩 포트폴리오
- OpenStreetMap 폴리곤을 순수 SVG로 압출한 단지투어 3D 배치도
회고
실시간 데이터 화면에서는 많은 값을 보여주는 것보다 데이터의 출처와 최신성, 실패 상태를 사용자가 구분할 수 있게 만드는 일이 먼저였습니다.