diff --git a/docs/작업플랜-셀프서비스-분석리포트-P1-온라인히스토리안-스펙.md b/docs/작업플랜-셀프서비스-분석리포트-P1-온라인히스토리안-스펙.md index d1a4f60..5df47d8 100644 --- a/docs/작업플랜-셀프서비스-분석리포트-P1-온라인히스토리안-스펙.md +++ b/docs/작업플랜-셀프서비스-분석리포트-P1-온라인히스토리안-스펙.md @@ -119,5 +119,19 @@ CREATE TABLE hc900.live_kpi ( 3. 합성 cleaning/drawdown 주입 시 상태 전이 + 알람 발화. 4. 누적기 강제 재기동 → 버퍼 리플레이로 상태 동일 복구. +## 전환 후 "죽은코드" 점검 (2026-06-17) +P1 도입은 **순수 추가형**(2계층을 기존 60초 경로 옆에 붙임, +650/−5)이라 전환으로 버려진 코드가 없음을 확인. 빌드 경고 0건(CS0169/0414/8321 없음). 정리 후보 2건을 추적한 결과: + +| 대상 | 판정 | 근거 | +|---|---|---| +| `Hc900HistoryService` (60s → `history_table`) | **살아있음** | 메트릭 기본 소스 + 장기저장. UI 드롭다운 기본값 `history (60초)` | +| `history_1s` / `Hc900FastHistoryService` | **살아있음** | 카드 스파크라인·dynamics·LiveKpi 기본 소스(JS 하드코딩 `source=history_1s`) | +| `history_1min` / `history_1min_src` | **휴면이나 적재 중 — 제거 금지** | UI 미노출·기본 소스 아님이지만 **연속집계 정책이 스케줄대로 적재** → `history_1s` 14일 보존 DROP 전 1분 롤업하는 **유일한 장기보존 경로**. 지우면 큐레이션 태그 >14일 데이터 소실. `SERIES_SOURCES` 허용목록에 있어 `?source=history_1min_src` 직접 API도 유효 | +| `scripts/sql/p1_historian.sql` | **중복 참조 SQL (코드 아님) — 보존 결정** | 자동 실행 참조처 0건. 두 서비스가 기동 시 동일 DDL 멱등 적용하므로 런타임 무의존. **삭제해도 런타임 무영향**이나, 신규 DB 부트스트랩/재해복구 시 일괄 적용 참조본으로 유용 → 의도적으로 남김 | + +**결론**: 전환으로 생긴 제거 대상 죽은코드 **없음**. `history_1min`은 죽은 게 아니라 의도된 2계층 장기 tier. `p1_historian.sql`은 멱등 부트스트랩과 중복되지만 운영 참조용으로 유지. + +> **DDL 단일 진실원**: 런타임 스키마는 서비스의 `EnsureSchema`가 멱등 적용한다. `p1_historian.sql`은 그 *사본*(수동/일괄 적용용)이므로, 스키마 변경 시 **서비스 코드와 이 SQL을 함께 갱신**할 것(드리프트 주의). + --- *근거: P0 결정론 마스크/적산이 causal → 온라인 동치. TimescaleDB 하이퍼테이블/보존/연속집계(기존 history_table 동일 인프라), BackgroundService 패턴(Hc900RealtimeService/HistoryService). 관련 메모리: [[qv-cleaning-mask-and-column-links]], [[product-pivot-selfservice-reporting]].*