2744374f14
Merge pull request 'develop' ( #20 ) from develop into main
...
Build and Deploy Wing / build-and-deploy (push) Successful in 28s
Reviewed-on: #20
2026-02-17 06:06:30 +09:00
c8c1b556d6
Merge pull request 'refactor: 데드코드 정리 + 대형 파일 분리 + FSD 위반 해소' ( #19 ) from feature/refactor-cleanup into develop
...
Reviewed-on: #19
2026-02-17 06:05:41 +09:00
ec9d894ac8
refactor: FSD 위반 해소 — 공유 상수/함수를 shared/로 이동
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 00:04:40 +09:00
3fa0b67e97
refactor(styles): CSS 1,814줄 → 15개 컴포넌트 파일 분리
...
styles.css 모놀리스를 @import 기반 모듈 구조로 분리:
- base.css: CSS 변수, 리셋, 폰트
- layout.css: 그리드 레이아웃, 반응형
- components/: topbar, panels, toggles, speed, vessel-list,
ais-list, alarms, relations, map-panels, map-settings,
auth, weather, weather-overlay
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 00:01:04 +09:00
ec03a88fbd
refactor(dashboard): 사이드바 + 상태 훅 추출 분리
...
DashboardPage.tsx (808줄) → 3파일 분리:
- useDashboardState.ts (147줄): UI 상태 관리 훅
- DashboardSidebar.tsx (430줄): 좌측 사이드바 컴포넌트
- DashboardPage.tsx (295줄): 레이아웃 + 지도 영역
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 23:55:58 +09:00
4d67b26ffa
refactor(map3d): useGlobeOverlays 600줄 → 서브훅 2+1개 분리
...
- useGlobePairOverlay: pair lines + pair range + paint
- useGlobeFcFleetOverlay: fc lines + fleet circles + paint
- useGlobeOverlays: 오케스트레이터 (기존 호출부 호환)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 23:44:19 +09:00
b1551f800b
refactor(map3d): useDeckLayers 레이어 생성 팩토리 추출
...
- buildMercatorDeckLayers: Mercator 모드 Deck.gl 레이어 팩토리
- buildGlobeDeckLayers: Globe 모드 Deck.gl 레이어 팩토리
- useDeckLayers: 오케스트레이션 + 툴팁/클릭 + setProps
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 23:41:29 +09:00
e2dc927ad2
refactor(map3d): useGlobeShips 977줄 → 서브훅 3+1개 분리
...
- useGlobeShipLabels: Mercator 선명 라벨
- useGlobeShipLayers: Globe 선박 아이콘 레이어 + GeoJSON
- useGlobeShipHover: Globe 호버 오버레이 + 클릭 선택
- useGlobeShips: 오케스트레이터 (기존 호출부 호환)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 23:35:03 +09:00
c2ca830ef0
chore: 미사용 데드코드 삭제
...
- entities/vessel/lib/filter.ts (미사용 필터 유틸)
- entities/vessel/model/mockFleet.ts (미사용 mock 데이터)
- shared/lib/color/hexToRgb.ts (MapSettingsPanel 로컬 중복)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 23:20:47 +09:00
8eb162fd8b
Merge pull request 'release: develop → main 배포' ( #18 ) from develop into main
...
Build and Deploy Wing / build-and-deploy (push) Successful in 28s
Reviewed-on: #18
2026-02-16 22:47:39 +09:00
4d1a8a0d1e
Merge pull request 'feat(weather,track): 기상 오버레이 + vessel-track 병합' ( #17 ) from feature/weather-overlay into develop
...
Reviewed-on: #17
2026-02-16 22:47:26 +09:00
86a0b2276f
fix(web): vessel-track 안정화 반영
...
- Mercator/Globe track-replay 레이어 충돌 및 setProps 레이스 해결
- track DTO 좌표/시간 정규화 + stale query 응답 무시
- 조회 직후 표시 안정화 및 기본 100x 자동재생 적용
- Global Track Replay 패널 초기 위치 조정 + 헤더 드래그 지원
- liveRenderer batch rendering + trackReplay store 기반 구조 반영
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 22:43:08 +09:00
c09211d5ed
chore: develop 병합으로 충돌 해결
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 22:21:15 +09:00
6acf2045b2
chore: vessel-track 브랜치 병합 (squash)
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 22:12:48 +09:00
cb6493b8a1
feat(weather): 기상 타일 오버레이 + 수역별 날씨 패널
...
MapTiler Weather SDK 6종 기상 타일 오버레이:
- 바람/기온/강수/기압/레이더/구름 라디오 토글
- 3시간 단위 step 스냅 타임라인 + 드래그 실시간 seek
- 색상 범례, 배속 제어, 투명도 조절
- ServiceWorker 타일 캐시 (cache-first, 최대 2000장)
- SDK 시간 단위(epoch 초) 정합성 보장
Open-Meteo 수역별 기상 패널:
- 4개 수역 centroid 기반 해양/기상 데이터 5분 폴링
- 파고/풍속/수온/너울 카드 UI + 경고 하이라이트
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 21:45:07 +09:00
ea7dcc353f
Merge pull request 'feat(map): 항적조회 기능 (develop → main)' ( #15 ) from develop into main
...
Build and Deploy Wing / build-and-deploy (push) Successful in 23s
Reviewed-on: #15
2026-02-16 18:33:28 +09:00
c05ec159ce
Merge pull request 'feat(map): 항적조회 기능 구현' ( #14 ) from feature/vessel-track into develop
...
Reviewed-on: #14
2026-02-16 18:33:18 +09:00
69775c90a2
feat(map): 항적조회 + SVG 캐시 + fitBounds
...
- 대상선박 우클릭 컨텍스트 메뉴로 항적 조회 (6h~5d)
- Mercator: PathLayer(고정) + TripsLayer(애니메이션) + ScatterplotLayer(포인트)
- Globe: MapLibre 네이티브 line + arrow + circle 레이어
- rAF 직접 overlay 조작으로 React 재렌더링 방지
- SVG 아이콘 data URL 캐시로 네트워크 재요청 방지
- 항적 조회 시 자동 fitBounds (전체 항적 뷰포트 맞춤)
- API 프록시 /api/ais-target/:mmsi/track 엔드포인트 추가
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 18:19:01 +09:00
29be79d7bf
Merge pull request 'release: v0.3 배포 (지도 최적화 + 설정 영속화)' ( #13 ) from develop into main
...
Build and Deploy Wing / build-and-deploy (push) Successful in 19s
Reviewed-on: #13
2026-02-16 16:28:37 +09:00
c23264c3ba
Merge pull request 'feature/dual-rendering' ( #12 ) from feature/dual-rendering into develop
2026-02-16 16:26:10 +09:00
c423b59244
Merge remote-tracking branch 'origin/develop' into feature/dual-rendering
...
# Conflicts:
# apps/web/src/pages/dashboard/DashboardPage.tsx
2026-02-16 16:25:38 +09:00
fe5ec7100b
docs: CLAUDE.md 최신 구조 반영
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 16:24:52 +09:00
c03dee0ade
fix(map): globe 노란벽 해결 + 심해색 복구
...
- deck-globe 렌더 파이프라인 비활성화로 노란벽 해소
- 베이스 수색 원복 (#14606e/#114f5c)
- globe 필터 로직 제거 (불필요)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 16:04:58 +09:00
1fd9f3da82
fix(map): fill 단일화 + globe 배경색 심해색 통일
...
- fill 3-tier 제거 → 단일 레이어(전체 depth) 복원
- setSky: sky/horizon/fog를 심해색(#010610 )으로 설정
- 캔버스/map-area 배경: #010610 (타일 gap seam 비가시화)
- 타일 경계 gap으로 배경이 비칠 때 색상 차이를 제거
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 15:34:49 +09:00
3a001ca9b6
fix(map): fill 3-tier LOD로 타일 seam 해결
...
- 심해 fill 폴리곤이 globe 타일 경계에서 seam 아티팩트 발생
- bathymetry-fill: z3-7 (depth >= -2000, 천해만)
- bathymetry-fill-medium: z7-9 (depth >= -4000)
- bathymetry-fill-deep: z9+ (전체 depth)
- applyDepthGradient: 3개 fill 레이어 모두 적용
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 15:28:23 +09:00
2095503e50
fix(map): 심해 등심선 복원 + 전체 depth LOD
...
- shallowFilter 제거: 전체 depth 범위 렌더링 복원
- bathyFillColor: -8000m, -4000m 색상 stop 복원
- DEPTHS_MEDIUM: -4000m 추가 (z7-9)
- DEPTHS_DETAIL: -4000m, -8000m 추가 (z9+)
- 줌 기반 LOD가 vertex 제어 담당 (depth 필터 불필요)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 15:21:46 +09:00
f50c227fd4
fix(map): globe 모드 수역 fill/text 복구
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 15:15:45 +09:00
b022e4bc36
perf(map): 줌 기반 LOD + 심해 등심선 제거
...
- applyLandLayerLOD: 베이스맵 육지 레이어에 minzoom 적용
(landcover z9, transportation z8, building z14 등)
- 수심 3-tier LOD: coarse(z3-7), medium(z7-9), detail(z9+)
- shallowFilter: depth >= -2000, 심해 feature GPU 미전달
- applyDepthGradient ascending order 에러 수정
- vertex 경고 passthrough (디버깅용 유지)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 15:15:31 +09:00
d5700ba587
fix(map): zone 간소화를 projectionBusy 앞으로 이동
...
소스 데이터 간소화가 projectionBusy 가드 뒤에 있어서
globe 전환 시 원본 데이터(2100+ vertex)로 tessellation 진행 →
73,000+ vertex 폭증. setData를 가드 앞으로 이동하고
useMemo로 간소화 데이터 캐싱.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 13:59:21 +09:00
7bec1ae86d
fix(map): globe 수역 line vertex 초과 해결
...
zones-line도 globe tessellation에서 73,300+ vertex로 폭증.
globe 모드에서 수역 소스 데이터를 ring당 60점으로 서브샘플링.
원본 2100+ vertex → ~240 vertex → globe tessellation 후 65535 이내.
mercator 모드에서는 원본 데이터 유지.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 13:44:26 +09:00
99d714582b
fix(map): globe 모드 zones-fill 숨김 + 라벨 가드
...
- globe tessellation에서 수역 fill polygon vertex 65535 초과
(해안선 2100 vertex → globe에서 108890+로 폭증) → 노란 막대
- globe 모드에서 zones-fill visibility: none으로 설정
- guardedSetVisibility 적용으로 수역 라벨 사라짐 방지
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 13:38:37 +09:00
95d9ea8aef
fix(map): 라벨 사라짐 + easing 경고 + vertex 경고 수정
...
- guardedSetVisibility 도입: 현재 값과 동일하면 setLayoutProperty
호출 생략하여 style._changed 트리거 방지 → symbol 재배치로 인한
text-allow-overlap:false 라벨 사라짐 현상 해결
- useGlobeShips 기존 레이어 else 블록의 중복 expression 재설정 제거
(data-driven 표현식은 addLayer 시 1회 설정으로 충분)
- _render 래퍼에서 globe scrollZoom easing 경고 억제
- fleet-circles-ml-fill 레이어 완전 제거 (vertex 65535 초과 원인)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 13:34:42 +09:00
91df90b528
perf(map): Globe/Mercator 양방향 동시 렌더링
...
- overlay 파괴/재생성 대신 layers 비움으로 전환
- globe ship 레이어 visibility 즉시 토글 (projectionBusy 우회)
- fleet circles fill vertex 초과 수정 (steps 72→36/24)
- globe scrollZoom easing 경고 수정
- projection 비영속화 (항상 mercator 시작)
- globe 레이어 준비 전까지 3D 토글 비활성화
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 13:08:54 +09:00
4cf0f20504
Merge branch 'feature/globe-ship-precompute' into develop
2026-02-16 12:26:47 +09:00
d88c89403d
perf(map): globe 선박 렌더링 사전계산 최적화
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 12:26:42 +09:00
77e3a531e8
Merge branch 'feature/chnprmship-polling' into develop
2026-02-16 12:23:23 +09:00
39d9cc9db1
feat(ais): 초기 로드를 chnprmship API로 전환
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 12:23:18 +09:00
8dc216ae1c
Merge branch 'feature/persist-user-state' into develop
2026-02-16 12:18:46 +09:00
16ebf3abca
feat: 사용자 설정 영속화 + 지도 뷰 저장
...
usePersistedState hook으로 대시보드 상태를
localStorage에 자동 저장. 지도 뷰(중심/줌/방위)도
60초 주기 + 언마운트 시 저장하여 새로고침 복원.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 12:18:39 +09:00
bd3b3f9a8c
Merge branch 'feature/kst-timestamp' into develop
2026-02-16 12:12:50 +09:00
cc807bb5f6
feat: KST 타임스탬프 포맷 유틸 적용
...
shared/lib/datetime.ts에 KST 고정 포맷 함수 추가.
AIS 정보, 선박 목록, 대시보드 등의 날짜 표시를
로컬 포맷에서 KST 명시적 포맷으로 통일.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 12:12:43 +09:00
8e275518b2
Merge pull request 'feat(auth): Google OAuth 로그인 구현' ( #8 ) from develop into main
...
Build and Deploy Wing / build-and-deploy (push) Successful in 19s
Reviewed-on: #8
2026-02-16 08:50:35 +09:00
ca43bbcebb
Merge pull request 'feat(auth): Google OAuth 로그인 구현' ( #7 ) from feature/auth-login into develop
2026-02-16 08:48:24 +09:00
20db4cb0cf
style(auth): 로그인 페이지 UI 조정
...
- 로고: WING → GC WING + demo 라벨
- 하단: GC Surveillance → GC SI Team
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 08:47:50 +09:00
79b21c7d44
feat(auth): Google OAuth 로그인 구현
...
- shared/auth 모듈: AuthProvider, ProtectedRoute, useAuth, authApi
- 페이지: LoginPage(Google OAuth), PendingPage, DeniedPage
- WING_PERMIT 역할 기반 접근 제어
- Topbar에 사용자 이름 + 로그아웃 버튼 추가
- App.tsx에 react-router 라우팅 + AuthProvider 래핑
- DEV 모드 Mock 로그인 지원 (김개발)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 08:44:25 +09:00
a594154512
Merge pull request 'ci: MapTiler API 키 환경변수 전달 + 프로덕션 지도 스타일 적용' ( #6 ) from develop into main
...
Build and Deploy Wing / build-and-deploy (push) Successful in 19s
Reviewed-on: #6
2026-02-16 07:53:21 +09:00
22099862e6
Merge pull request 'ci: 빌드 시 MapTiler API 키 환경변수 전달' ( #5 ) from ci/actions-trigger into develop
2026-02-16 07:52:35 +09:00
705cc696f9
ci: 빌드 시 MapTiler API 키 환경변수 전달
...
프로덕션 빌드에서 VITE_MAPTILER_KEY가 누락되어
OSM 폴백 스타일로 로드되던 문제 해결
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 07:50:17 +09:00
5d613ccea3
Merge pull request 'ci: Actions 활성화 후 CI/CD 파이프라인 검증' ( #4 ) from develop into main
...
Build and Deploy Wing / build-and-deploy (push) Successful in 1m20s
Reviewed-on: #4
2026-02-16 07:40:20 +09:00
fd3cedc6c1
Merge pull request 'ci: Actions 활성화 후 CI/CD 트리거 확인' ( #3 ) from ci/actions-trigger into develop
2026-02-16 07:39:45 +09:00