# 2026-07-13 두 번째 영상 POI 깜빡임 — 구조적 원인 3건 제거

**소요 시간**: 15분
**Context 사용량**: input 1500k / output 6k tokens

## 문제 (제보)

두 번째 영상(세그먼트 2) 재생 시 POI 라벨 깜빡임. 부하/불필요 동작 점검 요청.

## 원인 3건 + 수정 — StationOverlay.tsx

### 1. 세그먼트 전환 시 이전 세그먼트 캐시 혼재 (핵심)
- 라벨 사전계산이 "옛 맵 복사 후 덮어쓰기" 방식 — 세그먼트 전환 시 **이전 세그먼트의 캐시**
  (같은 프레임 번호, 다른 위치)가 남은 채 청크가 도착할 때까지 신·구 항목이 섞여
  라벨 집합이 프레임마다 뒤바뀜(깜빡임)
- 수정: frames 참조가 바뀌면(전환) 복사 없이 **빈 맵으로 시작** + labelMapRef 즉시 교체.
  같은 데이터의 재계산(슬라이더 변경)만 기존처럼 복사

### 2. 캐시 조회의 정확일치/스테일 폴백 교대
- 조회가 `floor(estFrame) 정확일치 ?? currentFrameNumRef(4Hz 갱신 스테일 키)` — 60fps 중
  ~1/6 프레임은 정확일치, 나머지는 최대 250ms 뒤처진 폴백 키 → **서로 다른 캐시 항목을
  교대로 그려** 이동 중 경계 POI 가 깜빡임
- 수정: 캐시 키 배열(labelKeysRef, 오름차순)을 두고 **최근접 키 이진탐색**으로 조회 고정
  (채워지는 중엔 인접 ±3 키 폴백)

### 3. 전환 시 사전계산 이중 실행 (불필요 부하)
- storeFrames 가 즉시 effect·디바운스 effect 양쪽 deps 에 있어 전환마다 풀 재계산 2회
- 수정: 디바운스 effect 에서 storeFrames 제거(즉시 effect 전담)

### 보조
- 프레임 ingest 시 currentFrameIdx/NumRef 초기화 — 전환 직후 사전계산 시작 구간이
  이전 세그먼트 끝 인덱스(스테일)로 잡히는 것 방지

## 검증

- tsc+vite 빌드 통과, 새 번들(index-1zg4kXAW.js) 서빙
