📡 스캔 데이터 누적 현황

2026-10-10 16:22:40 KST  ·  60초 자동 갱신 ← 대시보드 🔍 종목 뷰 📖 API 문서 📊 누적 통계 켜기

아래 누적 요약·날짜별 현황·아카이브 는 테이블을 통째로 세는 쿼리라 한 번에 수만~수십만 행을 읽는다. D1 무료 한도가 하루 500만 행이라 이것만 반복해도 로그인까지 멎는다 — 그래서 기본으로는 세지 않는다. 필요할 때 위의 누적 통계 켜기 를 누른다. 스캔 진행률·다음 배치·오늘 걸린 종목은 여기서도 그대로 나온다.
총 스캔 기록
—
stock_data_daily 행 수
누적 스캔일
—
고유 scan_date 수
고유 종목 수
—
전체 2,400종목 중 0% 커버
아카이브
주별 0주 · 0행
월별 0개월 · 0행
스캔 사이클 진행
스캔일: 20261010 ⟳ 진행 중
32%
757 / 2,400종목  ·  약 9시간 48분 후
배치 #109  ·  7종목/2.5분 → 1사이클 ≈ 14시간
롤링 아카이브 진행
주별 ✓
100%
20260928 · 2,400/2,400
월별 ✓
100%
2026-09 · 2,400/2,400

🔍 스캔 위치 상세

현재 위치: 인덱스 757 / 2,400  ·  배치 #109  ·  예상 완료 약 9시간 48분 후  ·  마지막 갱신: 2026-10-10 07:22 UTC

다음 스캔 배치 (예정)

#티커종목명
758 168330 내츄럴엔도텍
759 054920 한컴위드
760 032680 소프트센
761 102950 아하
762 090410 덕신하우징
763 079370 제우스
764 091340 S&K폴리텍

직전 스캔 배치 (완료)

#티커종목명전략NCAV
751 131970 두산테스나 — —
752 066670 디스플레이텍 — —
753 128660 피제이메탈 — —
754 023350 한국종합기술 — —
755 219750 지티지웰니스 — —
756 083310 엘오티베큠 — —
757 013810 스페코 — —

최근 스캔된 종목 (오늘 · 최대 21개)

티커종목명전략 NCAVPBRPERROE
007680 대원 NCAV PBR 4.61x 0.14 -4.65 -3.0%
002220 한일철강 PBR -0.92x 0.45 -144.29 -0.3%
039310 세중 NCAV PBR 2.42x 0.21 11.98 1.8%
205100 엑셈 — 0.71x 0.80 15.00 5.4%
011300 성안 — -1.07x 1.42 -5.62 -25.3%
095610 테스 — 0.06x 7.39 56.60 13.1%
010690 화신 PBR PER RIM -1.21x 0.45 3.90 11.6%
009140 경인전자 NCAV PBR PER 1.76x 0.37 9.31 4.0%
284740 쿠쿠홈시스 PER RIM 0.61x 0.51 4.60 11.0%
263770 유에스티 NCAV PBR PER 1.29x 0.49 7.35 6.7%
119830 아이텍 — 0.73x 0.89 -31.23 -2.8%
085310 엔케이 NCAV PBR 1.08x 0.38 -17.11 -2.2%
013570 디와이 NCAV PBR PER 1.87x 0.26 7.77 3.4%
299030 하나기술 — -0.28x 1.21 -20.94 -5.8%
126700 하이비젼시스템 — 0.77x 0.64 -10.92 -5.9%
123410 코리아에프티 PER RIM 0.48x 0.59 3.49 16.9%
004250 엔피씨 PBR PER -0.17x 0.24 9.35 2.6%
030350 드래곤플라이 — -0.13x 2.73 -1.53 -178.4%
012160 영흥 PBR 0.54x 0.22 -0.83 -25.9%
259630 엠플러스 PER 0.36x 1.23 6.26 19.6%
123750 알톤스포츠 — 0.70x 1.08 101.59 1.1%
날짜별 스캔 현황 최근 14일 · stock_data_daily
스캔일전체 NCAV 저PBR 저PER S-RIM
데이터 없음 — migration 0004 적용 후 스캔 시 누적됩니다

📌 데이터 수집 파이프라인

scheduled (* * * * *)
  │
  ├─ min%2===0 && min%10!==0  →  runNcavScanKr()     ← 스캔 슬롯
  │     KIS API: BalanceSheet · IncomeStatement · InquirePrice  (7종목/배치)
  │     └─ computeStrategies()  →  stock_data_daily UPSERT
  │
  ├─ min%5===3  →  runArchiveTick()              ← 아카이브 슬롯
  │     stock_data_daily  →  stock_data_archive  (50종목/tick)
  │     완료 후: 14일 초과 daily 삭제 / 26주 초과 weekly 삭제
  │
  └─ min%5===0  →  MainForKor / MainForUs               ← 트레이딩 슬롯
슬롯 분리: 트레이딩(min%5===0) · 스캔(짝수 분, 10배수 제외) · 아카이브(min%5===3)는 서로 겹치지 않습니다. Cloudflare Workers Free 플랜 cron 제한(CPU 10ms/호출)을 초과하지 않도록 모든 작업이 롤링 방식으로 처리됩니다.

🗄️ DB 스키마 · 전략 조건

stock_data_daily

UNIQUE(ticker, scan_date)
ticker, name, scan_date    TEXT
last_price, market_cap     REAL
current_assets             REAL  -- 유동자산
total_liabilities          REAL  -- 총부채
net_income, per, pbr       REAL
eps, bps                   REAL
ncav_ratio  = (CA - 부채) / 시총
roe         = 순이익 / 자기자본
strategies  TEXT  -- JSON 배열
보존: 14일 · 주별 아카이브 완료 후 초과분 자동 삭제

stock_data_archive

UNIQUE(ticker, period_type, period_label)
period_type   TEXT  -- 'weekly' | 'monthly'
period_label  TEXT  -- YYYYMMDD | YYYY-MM
period_end_date  TEXT  -- 마지막 scan_date
days_scanned  INT   -- 기간 내 스캔된 날 수
-- 나머지 컬럼: stock_data_daily 동일
주별: 26주 보존  ·  월별: 무기한 보존

전략 태그 조건 computeStrategies()

ncav ncav_ratio ≥ 1.0 (유동자산 − 총부채) / 시가총액 ≥ 1
low_pbr 0 < pbr < 0.5 주가순자산비율 0.5 미만
low_per 0 < per < 10 주가수익비율 10 미만
s_rim roe > 0.08 && 0 < pbr < 1.0 ROE 8% 초과 + PBR 1 미만
전략 태그는 스캔 시점에 계산되어 strategies 컬럼에 JSON 배열로 저장됩니다 (예: ["ncav","low_pbr"]). 원시 데이터가 보존되므로 조건 변경 시 UPDATE SQL로 재태깅이 가능합니다.

📦 보존 정책 · 핵심 함수

일별
stock_data_daily
14일
≈ 8 MB
→
주별
stock_data_archive
26주
≈ 30 MB
→
월별
stock_data_archive
무기한
+0.7 MB/월
삭제 안전성: 아카이브 UPSERT(멱등) 완료 후에만 오래된 데이터를 삭제합니다. Timeout으로 중단되더라도 다음 tick에 같은 인덱스부터 재시도하므로 데이터 손실이 없습니다. D1 Free 5GB 기준 1년 후 총합 ≈ 50 MB (약 1% 사용).

핵심 함수

scanNcavBatchKr(env, state) 7종목 배치 스캔 · KIS API 3종 호출 → batchCandidates 반환 ncavScanner.js
computeStrategies({...}) 전략 태그 배열 계산 · 순수 함수 (I/O 없음) ncavScanner.js
upsertStockDataToD1(env, candidates, date) 전체 스캔 결과를 stock_data_daily에 batch UPSERT ncavScanner.js
runArchiveTick(env) stock_archive_state 읽기 → 50종목 아카이브 → 완료 시 삭제 ncavScanKr.js
getStocksByStrategyD1(env, strategy, date) json_each(strategies) EXISTS 쿼리로 전략 종목 조회 d1Store.js