커밋 그래프

36 커밋

작성자 SHA1 메시지 날짜
jeonghyo.K
81255c4839 추가 수정사항 반영
1. 페이지네이션, 스크롤, 날짜 선택 ui 추가
2. 공통코드 조회 api 적용 (위성 조회, 등록 팝업 등)
3. 필수값 입력 메세지 추가
2026-02-11 16:49:26 +09:00
jeonghyo.K
1c991d8229 위성 오타 수정 2026-02-11 13:51:15 +09:00
jeonghyo.K
e79c50baea 위성 메뉴 개발 2026-02-11 13:46:36 +09:00
jeonghyo.K
a0a7f19e58 기상 메뉴 개발
1. 각 탭의 컴포넌트 개발
2. api 연결 및 화면 표출 추가
2026-02-10 13:15:12 +09:00
LHT
e45be93e71 chore: publish 폴더 복원 및 그레이스풀 폴백 적용
- git 이력에서 publish 파일 45개 복원 (layouts, pages, components, scss)
- Sidebar.jsx: import.meta.glob 패턴으로 publish 폴더 없이도 빌드 가능
- App.jsx: lazy import에 catch 추가로 publish 누락 시 안내 메시지 표시
- .gitignore: src/publish/ 제외 해제 (git 추적 포함)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 14:29:01 +09:00
LHT
7522318ff9 chore: 폐쇄망 배포 환경 구성 및 불필요 파일 정리
- Yarn Offline Mirror 설정 (.yarnrc, .yarn-offline-cache/)
- Windows 폐쇄망 초기 세팅 스크립트 (setup-windows.bat)
- README.md 폐쇄망 세팅 가이드 추가
- .DS_Store 8개 git 추적 제거
- 손상된 파일명(셸 명령어 파일명) 4개 git 추적 제거
- .gitignore 정리 (**/.DS_Store, !README.md, package-lock.json 제외)
- SCSS 스타일 수정 반영
- signalWorker.js 수정 반영

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 14:14:27 +09:00
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