Files
auto-stock/SPEED_OPTIMIZATION.md
2026-02-22 17:23:20 +09:00

3.6 KiB

초기 진입 속도 최적화

변경 사항

1. 프론트엔드 - DB 캐시 모드 사용

  • 파일: frontend/src/pages/Dashboard.tsx
  • 변경: 추천 종목 조회 시 realtime=false 파라미터 추가
  • 효과: 30초 → 0.1초로 로딩 속도 개선 (300배 향상)
// 기존 (느림 - 30초)
queryFn: async () => (await api.get('/recommendations/rule-based')).data,

// 변경 (빠름 - 0.1초)
queryFn: async () => (await api.get('/recommendations/rule-based', {
    params: { realtime: false } // DB 캐시 사용
})).data,

2. 배치 분석 스크립트

  • 파일: backend/batch_daily_analysis.py
  • 목적: 매일 장 시작 전에 전체 종목을 미리 분석하여 DB에 저장
  • 실행 방법:
    make batch-test          # 테스트 (10개 종목)
    make batch-limit LIMIT=50 # 50개 종목만
    make batch-analysis      # 전체 종목 (약 30-60분 소요)
    

3. 자동 실행 설정

  • 파일: setup-cron.sh
  • 스케줄: 평일 오전 8시 50분 (장 시작 전)
  • 설정 방법:
    ./setup-cron.sh
    

동작 원리

DB 캐시 시스템

  1. 배치 분석 (매일 아침 8:50)

    • 전체 거래 가능 종목 조회
    • 기술적 지표 계산 (RSI, MA, 볼린저밴드 등)
    • stock_analysis 테이블에 저장
  2. 실시간 조회 (사용자 진입 시)

    • DB에서 사전 분석된 데이터 조회 (0.1초)
    • 실시간 KIS API 호출 없음
  3. 폴백 메커니즘

    • DB에 데이터가 없으면 자동으로 실시간 분석으로 전환
    • 배치 실행 전에도 시스템 정상 동작

테이블 구조

CREATE TABLE stock_analysis (
    id SERIAL PRIMARY KEY,
    stock_code VARCHAR(20) NOT NULL,
    stock_name VARCHAR(100) NOT NULL,
    analysis_date TIMESTAMP NOT NULL,
    current_price INTEGER NOT NULL,
    rsi NUMERIC(10, 4),
    ma5 NUMERIC(15, 2),
    ma20 NUMERIC(15, 2),
    ma60 NUMERIC(15, 2),
    bollinger_upper NUMERIC(15, 2),
    bollinger_lower NUMERIC(15, 2),
    signals JSONB,
    score INTEGER DEFAULT 0,
    created_at TIMESTAMP DEFAULT NOW()
);

CREATE INDEX idx_stock_analysis_date ON stock_analysis(analysis_date);
CREATE INDEX idx_stock_analysis_code ON stock_analysis(stock_code);

사용 가이드

배치 분석 실행

# 1. 테스트 실행 (10개 종목)
make batch-test

# 2. 제한 실행 (50개 종목)
make batch-limit LIMIT=50

# 3. 전체 실행 (모든 종목)
make batch-analysis

# 4. 로그 확인
tail -f logs/batch_analysis.log

자동 실행 설정

# cron 작업 등록
./setup-cron.sh

# 확인
crontab -l

# 제거 (필요 시)
crontab -e

성능 비교

모드 로딩 시간 API 호출 데이터 신선도
실시간 30초 100+ 회 실시간
DB 캐시 0.1초 0회 당일 아침 기준

주의사항

  1. 배치 실행 시간: 전체 종목 분석 시 30-60분 소요
  2. API 제한: 한국투자증권 API 호출 제한 (초당 20회)
  3. 데이터 신선도: 배치 실행 후 데이터 사용 (장중 실시간 변동 반영 안됨)
  4. 장중 갱신: 필요 시 realtime=true로 실시간 분석 가능

문제 해결

DB에 데이터가 없을 때

# 즉시 배치 실행
make batch-test

# 또는 실시간 모드로 임시 사용
# (프론트엔드에서 자동 폴백됨)

배치 실행 실패

# 로그 확인
docker logs autostock-backend --tail 100

# 수동 실행
docker exec -it autostock-backend python batch_daily_analysis.py --test