글로티커 · 거시경제 지표 크롬 익스텐션
기간 —
금융 지표를 확인할 때마다 4~5개 사이트를 오가야 해서 만들었습니다. 수집 서버(FastAPI)와 스트리밍 서버(Spring Boot)를 나눠 홈서버에서 운영했습니다.
7개국 이상에서 누적 사용자 300명 이상
- 지수 실시간 시세: 나스닥, S&P 500, 다우존스, 러셀 2000, 국채 20년, VIX, 공포탐욕 지수
- 주식 시세: Magnificent 7(애플, 엔비디아, 마이크로소프트, 아마존, 구글, 메타, 테슬라)
- 암호화폐 시세: 비트코인, 이더리움, 솔라나, 도미넌스
- 환율: 달러 지수, 원화 기준 달러·유로·위안·엔
- Redis 메시지 큐 기반 SSE 실시간 갱신
- ChatGPT API 시황 분석
- 30일 일봉 차트
- 숨김·테마·언어 설정
스크래핑 차단
- 문제
- yfinance 호출이 많아지자 429가 나고, 일부 서버는 bot으로 보고 401을 돌려줬습니다. 막히지 않으면서 시세를 자주 받을 수 있는 호출 빈도를 찾아야 했습니다.
- 해결
- 여러 포럼을 참고해 초당 1회가 적당하다고 보고, 호출 간격을 1~1.2초 사이 랜덤으로 두었습니다. 호출마다 유효한 랜덤 헤더를 붙여 bot으로 인식되는 문제를 피했습니다. 공포탐욕 지수·도미넌스·환율처럼 짧은 시간에 크게 변하지 않는 값은 1분마다 갱신했습니다.
팝업마다 몰리는 API 요청
- 문제
- 익스텐션 팝업을 열 때마다 종목별 가격·변동률, 차트, SSE 구독, 분석 결과 API가 한꺼번에 호출됐습니다. 홈서버라 부하를 미리 막아야 했습니다.
- 해결
- Redis에 최신 데이터 스냅샷을 캐시해 한 번에 보내고, 익스텐션 로컬 스토리지에 최신 데이터와 수신 시각을 남겼습니다. 수집 1회에 평균 23초가 걸리므로, 마지막 수신이 20초 안이면 SSE 구독만 보냈습니다. 차트는 30일 일봉이라 장 종료 때 한 번만 받고, Bucket4j로 클라이언트당 10초 6회로 제한했습니다.
아키텍처




