커밋 그래프

30 커밋

작성자 SHA1 메시지 날짜
346e5cdcc7 feat: 리플레이 궤적 표시 TripsLayer 전환 및 이상치 자동 분류
- ScatterplotLayer 기반 수동 프레임 기록 → TripsLayer(deck.gl/geo-layers) GPU 기반 렌더링 전환
- 궤적 길이: 1시간 (시간 기반, 배속 무관 동일 시각적 길이)
- 32비트 float 정밀도 문제 해결: startTime 기준 상대 타임스탬프 사용

이상치 선박 자동 '삭제' 그룹 분류:
- 조건1: 인접 포인트 간 거리 > 100km가 (조회일수 × 5)건 이상
- 조건2: 선박별 평균 속도 > 50노트
- queryCompleted 시 1회만 계산, 렌더링 성능 영향 없음
- 사용자가 이후 그룹 변경 가능

기본값 변경:
- 궤적 표시: true (기본 활성화)
- 재생 배속: 500배속
- 로딩 완료 시 자동 재생 시작

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 10:14:08 +09:00
19b2cff39e feat: 리플레이 범례/궤적 최적화/로딩 프로그레스/UI 개선
- 리플레이 전용 범례(ReplayLegend): 재생 시점 선종별 카운트, 필터 동기화
- 궤적 표시 성능 최적화: 거리 필터(100m), 역비례 프레임 계산, 배속별 동일 시각적 길이
- 궤적 필터 동기화: 선종 OFF 즉시 제거, 프로그레스 드래그 시 클리어, 배속 변경 시 리셋
- 리플레이 로딩 프로그레스: 화면 중앙 원형 오버레이, 머지 타임스탬프 기반 진행률
- 선박 메뉴에서 필터 패널 직접 열기, 좌측 하단 필터/레이어 버튼 비활성화

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 09:59:30 +09:00
1e317c1cbe chore: gitignore 업데이트 및 추적 제외 파일 정리
- .env* 환경변수 파일 제외
- 빌드 산출물(*.zip), 서버 설정(httpd.conf) 제외
- tracking VesselListManager 참조용 디렉토리 제외
- .DS_Store, .md 파일 추적 해제

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 06:47:50 +09:00
cd3b534dd8 fix: 이미지 경로 BASE_URL 적용 (배포 환경 호환)
- 하드코딩된 /images/ 경로를 import.meta.env.BASE_URL 기반으로 변경
- 배포 환경(/kcgv/) 서브패스 호환성 확보

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 06:38:01 +09:00
fa34c6cd0c perf: Web Worker 데이터 파싱 및 배치 처리 최적화
- signalWorker.js 추가 (메인 스레드 파싱 오프로딩)
- useShipData 500ms 배치 인터벌 + Worker 연동
- stompClient에 subscribeShipsRaw 추가 (Worker용)
- signalApi에 fetchAllSignalsRaw 추가 (Worker용)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 06:37:53 +09:00
f273080d5e feat: MapContainer 통합 (항적조회, 리플레이, 추적 모드)
- TopBar, 항적조회 뷰어, 리플레이 타임라인 통합
- 배경지도 전환 레이어 가시성 토글
- 추적 모드 훅 연동

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 06:37:46 +09:00
83f5f72b0e feat: 추적 모드 반경 필터링 구현
- useTrackingMode 훅 (함정 중심 지도 이동 + 반경 원)
- useRadiusFilter 훅 (Bounding Box + Haversine 거리 계산)
- shipStore 반경 필터 연동

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 06:37:38 +09:00
b209c9498c feat: 리플레이 모드 구현
- replay 패키지 (stores, components, hooks, services, utils, types)
- WebSocket 기반 청크 데이터 수신 (ReplayWebSocketService)
- 시간 기반 애니메이션 (재생/일시정지/정지, 배속 1x~1000x)
- 항적 표시 토글 (playbackTrailStore - 프레임 기반 페이딩)
- 선박 상태 관리 + 필터링 (선종, 신호원)
- 드래그 가능한 타임라인 컨트롤러
- 라이브/리플레이 전환 (liveControl)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 06:37:20 +09:00
e74688a969 feat: 항적조회 기능 구현
- tracking 패키지 TS→JS 변환 (stores, services, components, hooks, utils)
- 모달 항적조회 + 우클릭 항적조회
- 라이브 연결선 (PathStyleExtension dash + 1초 인터벌)
- TrackQueryModal, TrackQueryViewer, GlobalTrackQueryViewer
- 항적 레이어 (trackLayer.js)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 06:36:57 +09:00
61dc5a0e4d feat: 레이아웃 UI 및 사이드바 개선
- Header, Sidebar, SideNav, ToolBar 컴포넌트 업데이트
- 사이드바 스타일 개선

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 06:36:27 +09:00
c068f55077 feat: 배경지도 전환 및 테마 시스템 구현
- 배경지도 타입 전환 (일반/전자해도/야간)
- 테마 연동 색상 시스템 (선박 라벨, 속도벡터 등)
- mapStore에 subscribeWithSelector 적용
- 신호원 우선순위/항적 조회기간 상수 추가

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 06:36:09 +09:00
a5131306c4 feat: 앱 구조 개선 및 공통 컴포넌트
- publish 영역 lazy loading 적용 (빌드 시 tree-shaking)
- Toast 공통 컴포넌트 추가
- assetPath 유틸 추가 (BASE_URL 기반 경로 해석)
- csvDownload 유틸 추가

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 06:35:50 +09:00
c123f234f2 chore: Vite 빌드 설정 및 프로젝트 구조 개선
- esbuild drop 옵션으로 빌드 시 console/debugger 자동 제거
- 개발용 폴더(publish, component/wrap) 빌드 시 제외
- 프록시 설정 추가 (signal-api, ship/image, tracks)
- index.html root 이동 (public/ → root)
- 의존성 업데이트

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 06:35:31 +09:00
8292251758 feat: TopBar 컴포넌트 및 추적 모드 기능 구현
[TopBar 구현]
- 좌표 표시 (마우스 위치 실시간 표시, 도분초/도 토글)
- 시간 표시 (UTC/KST 토글)
- 선박 검색 기능 (like 검색, 디바운싱)
- 지도/선박 모드 토글 버튼

[추적 모드 기능]
- PatrolShipSelector: 경비함정 선택 패널
  - 검색 기능 (함정명/ID like 검색)
  - 반경 설정 (10/25/50/100/200 NM)
  - 스크롤 가능한 함정 목록
- ShipContextMenu: 반경설정 서브메뉴 추가
  - 단일 경비함정 우클릭 시 반경 선택 가능
  - 화면 위치에 따른 서브메뉴 방향 자동 조정

[반경 필터링]
- 선박 렌더링: 반경 내 선박만 표시
- 범례 카운트 계산: 반경 내 선박 수 표시
- 검색 결과: 추적 모드 시 반경 내 선박만 검색
- Haversine 거리 계산 + Bounding Box 사전 필터링

[추적 선박 표시]
- ScatterplotLayer 3중 구조 (외곽링, 내부원, 중심점)
- 추적 중인 경비함정 위치에 시각적 마커 표시
2026-02-04 08:16:29 +09:00
519f3b3fe2 chore: publish 폴더 gitignore 추가
- 퍼블리시 원본 참조용 폴더 git 추적 제외
- 실제 구현은 src/components, src/pages에서 진행
- 빌드 및 커밋에서 제외

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 08:46:21 +09:00
d2580d9487 chore: TypeScript 파일 gitignore 추가
- 메인 프로젝트 참조용 TS/TSX 파일 git 추적 제외
- 항적조회, 항적분석, 리플레이 기능 참조용으로만 사용
- 빌드 및 커밋에서 제외

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 08:45:52 +09:00
8a159ce809 fix: 단독선박+레이더 통합 표시 및 모달 생성 로직 개선
- integrate 플래그를 활용한 통합선박 판별 로직 추가
  - shipStore.js: buildDynamicPrioritySet에 integrate 조건 추가
  - ShipBatchRenderer.js: 카운트 로직에 integrate 조건 추가
  - shipLayer.js: isIntegratedShip 함수 개선

- 선박 모달 생성 로직 개선
  - openDetailModal에서 레이더 대표 선박 자동 교체
  - 통합선박의 비레이더 신호원 우선순위 기반 선택

- 모달 신호상태 아이콘 표시 통일
  - ShipDetailModal.jsx: SignalFlags에 integrate 조건 추가
  - 선박 아이콘과 모달의 신호상태 표시 로직 통일

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 08:41:28 +09:00
ae48bca97a refactor: 카운트/필터 로직을 메인 프로젝트 렌더 사이클 구조로 전환
문제:
- 다크시그널 선박이 통합모드에서 렌더링 안 됨
  (통합모드 체크가 다크시그널 체크보다 먼저 실행)
- 카운트가 계속 증가 (cleanup과 카운트 계산의 동기화 불일치)

변경:
- applyFilterWithCache: 다크시그널 체크를 통합모드 체크보다 앞으로 이동
- shipStore: mutable Map/Set → immutable 패턴 전환 (featuresVersion/darkSignalVersion 제거)
- ShipBatchRenderer: calculateAndCleanupLiveShips 추가 (단일 패스 cleanup + 카운트)
- executeRender 내부에서 5초 쓰로틀 카운트 + filterHash 변경 즉시 재계산
- shipStore에서 updateCountsThrottled, recalculateCounts, calculateCounts 제거
- 모든 필터 토글에서 recalculateCounts() 호출 제거
- useShipLayer: features/darkSignalIds 참조 감시로 전환

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 12:40:20 +09:00
f2b2de6f68 fix: 레이더(000005) 카운트 제외 - 통합 여부 무관하게 항상 스킵
메인프로젝트(deck.ts:274-278)와 동일하게 signalSourceCode가
RADAR이면 통합/단독 무관하게 카운트에서 항상 제외.

기존: 단독 레이더(!integrate)만 제외 → 통합 레이더가 카운트에 포함되어
VTS_RADAR 필터 ON 시 과다집계 발생
수정: 모든 레이더를 카운트 + 타임아웃 체크에서 통합 조건 제거

원인: 통합그룹의 다른 장비(AIS 등)가 삭제/다크시그널 상태일 때
레이더만 features에 남아 있으면 해당 targetId가 추가 카운트됨

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 14:32:30 +09:00
5eac7678bf fix: mergeFeatures에 타임스탬프 비교 추가 (이전 시간대 데이터 무시)
메인프로젝트(deckStore.ts:163)와 동일하게 기존 저장된 데이터의
receivedTimestamp보다 이전 시간대의 메시지는 무시하도록 수정.

이전: 모든 메시지를 무조건 덮어씀 → 오래된 메시지가 최신 데이터를
덮어쓰거나 삭제/다크시그널 처리된 선박을 부활시킴
이후: newTimestamp < currentFeature.receivedTimestamp이면 스킵

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 13:48:29 +09:00
c4e40a0cef fix: 카운트 5초 쓰로틀 복원 및 targetId 중복 제거 수정
문제:
- incremental count가 매 메시지마다 스토어 갱신하여 범례 실시간 변동
- targetId 중복 제거 없이 개별 장비별로 카운트되어 수치 과다

수정:
- incremental count 제거, 5초 주기 fullRecount 방식으로 복원
- updateCountsThrottled: 타임아웃 체크 + calculateCounts 통합 (5초 주기)
- calculateCounts: targetId 중복 제거 포함 정확한 카운트 계산
- mergeFeatures에서는 features/darkSignalIds만 갱신, 카운트는 5초마다
- 필터 변경/삭제 시에는 recalculateCounts로 즉시 재계산

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 13:39:19 +09:00
08518c7c33 fix: initialKindCounts 선언 순서 수정 (TDZ 에러)
countRegistry가 initialKindCounts보다 먼저 선언되어 발생한
ReferenceError 수정. initialKindCounts를 countRegistry 위로 이동.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 13:27:03 +09:00
3b0190e3f3 perf: incremental count 최적화 (Priority 2)
- countCache 기반 5초 주기 O(n) 전체 카운트 → countRegistry 기반 incremental delta 카운트
- 변경된 선박만 카운트 증감 (mergeFeatures, deleteFeature, clearDarkSignals)
- fullRecount는 필터 변경/통합모드 전환 시에만 사용
- processTimeoutsThrottled 분리: 타임아웃 체크만 담당 (5초 주기)
- 미사용 parseAvetdr 함수 제거, throttle 설정 정리

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 13:23:26 +09:00
ce54d9d0db perf: Map/Set mutable update + 버전 카운터 패턴 적용
mergeFeatures, updateCountsThrottled, deleteFeatureById,
deleteFeaturesByIds, clearDarkSignals에서 new Map()/new Set()
전체 복사를 제거하고 기존 인스턴스를 직접 mutate.
Zustand 변경 감지는 featuresVersion/darkSignalVersion
카운터로 트리거.

5000척 기준 배치당 O(5000) Map 복사 → O(batch) 변경으로 개선.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 13:06:56 +09:00
f4f0cb274f dark 프로젝트 구현 현재 상태 스냅샷
- Vite 마이그레이션, OpenLayers+Deck.gl 지도 연동
- STOMP WebSocket 선박 실시간 데이터 수신
- 선박 범례/필터/카운트, 다크시그널 처리
- Ctrl+Drag 박스선택, 우클릭 컨텍스트 메뉴
- 측정도구, 상세모달, 호버 툴팁
- darkSignalIds Set 패턴, INSHORE/OFFSHORE 타임아웃

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 13:01:54 +09:00
junga
12258aa075 20260123_1 2026-01-23 13:04:07 +09:00
junga
29159e8aa5 20260122_3 2026-01-22 23:52:54 +09:00
junga
a96d05a4b3 20260122_2 2026-01-22 09:15:58 +09:00
junga
6366a53d5b 20260122_1 2026-01-22 09:14:01 +09:00
junga
11aa16164e first commit 2026-01-22 09:12:05 +09:00