초기 커밋: 스테이션(측점) 기반 주행영상 플레이어

- 클라이언트(React/Vite): Video.js 플레이어, 하단 스테이션바, POI/구조물 영상 오버레이, 카메라 파라미터 보정, 미니맵/RoutePanel
- 서버(Express): Range 스트리밍, HLS 변환, 프레임 추출, tus 업로드, 주석 API
- 최근 작업: 스테이션바 종점역 표출/양끝 정렬/미도착(재생불가) 표시, POI 라벨 '구분' 우선·컴팩트 팝업·겹침제외 토글·동일좌표 다중행, 진행방향(상/하) 우선 표출, 커서 배지 크기·픽셀 떨림 개선

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-25 16:37:57 +09:00
co-authored by Claude Opus 4.8
commit 78fc090360
214 changed files with 27897 additions and 0 deletions
@@ -0,0 +1,27 @@
# 스테이션바 첫·마지막 역 양끝 고정 + 누락 원인(빌드) 해결 + pm2 배포
**소요 시간**: 70분
**Context 사용량**: input 약 320k / output 약 22k tokens
## 1. 대전조차장 누락의 진짜 원인 = 빌드 미반영
- 데이터(v3.0 KMZ)·파싱(parseKmz)·코드 수정 모두 정상이었음. 실데이터 시뮬레이션으로 마커가 px 1777 생성·유지됨을 검증.
- 화면에 안 뜬 이유: 서버가 **6/24 빌드된 `client/dist`** 를 서빙 → 6/25 수정 미반영.
- 조치: `npm run build -w client` 재빌드 후 `pm2 start ecosystem.config.js` (PORT 55000). 정상 표출 확인.
## 2. 렌더 필터 수정 (앞 단계, 누적 반영)
- [Timeline.tsx](../../client/src/stationbar/components/Timeline/Timeline.tsx): 역사(역, KAKAO_RAIL)는 dedup 제외 → 항상 표출.
- [StationOverlay.tsx](../../client/src/components/overlay/StationOverlay.tsx): POI 겹침 억제 정렬을 railRank(철도역/역사 우선)→dist 로 변경.
## 3. 첫·마지막 스테이션 양끝 고정 (이번 요청)
- [StationBar.tsx](../../client/src/stationbar/StationBar.tsx) `structureMarks``snapStationEnds` 헬퍼 추가.
- 역사 마커 중 **최좌측 → TRACK_START_PX(297)**, **최우측 → TRACK_END_PX(1806.5)** 로 스냅.
- 역사 2개 미만이면 미적용. 동일 역 복수 통과 시 극단 마커만 이동.
- 두 return 경로(storeStructures / POI 폴백) 모두 적용.
- 예: 회덕화물역(353.9→297), 한국철도공사대전조차장역(1777→1806.5).
## 검증
- `tsc --noEmit` 통과, 클라이언트 재빌드 성공, pm2 `ghiVideo` online, HTTP 200.
## 운영 메모
- 실행: nvm Node 20 활성화 → `npm run build -w client``pm2 restart ghiVideo`.
- 서버는 `client/dist` 정적 서빙 → **소스 수정 후 반드시 클라이언트 재빌드**해야 화면 반영됨.