# 스테이션바 첫·마지막 역 양끝 고정 + 누락 원인(빌드) 해결 + 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` 정적 서빙 → **소스 수정 후 반드시 클라이언트 재빌드**해야 화면 반영됨.
