커밋 그래프

17 커밋

작성자 SHA1 메시지 날짜
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