커밋 그래프

145 커밋

작성자 SHA1 메시지 날짜
8c1cfdd6b5 Merge pull request 'fix: ST_AsText WKT 공백 불일치로 인한 daily merge 전량 필터 수정' (#80) from develop into main
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 4m12s
2026-02-21 01:17:02 +09:00
9fcd374f4b Merge pull request 'fix: ST_AsText WKT 공백 불일치로 인한 daily merge 전량 필터 수정' (#79) from feature/dashboard-phase-1 into develop 2026-02-21 01:16:40 +09:00
1544832899 fix: ST_AsText WKT 공백 불일치로 인한 daily merge 전량 필터 수정
PostGIS ST_AsText()는 "LINESTRING M (...)" (공백 포함) 반환하지만
Java 코드는 "LINESTRING M(...)" (공백 없음) 형식만 매칭하여
앱 재시작 후 DB fallback/warmup 데이터가 전량 필터되는 버그 수정.

- DB 읽기 시 WKT 정규화 (CacheWarmup, CacheBasedReader 4곳)
- merge processor regex에 \s* 방어적 처리 (Daily/Hourly)
- countWktPoints indexOf('(') 기반으로 개선
- BatchAdmin: dailyJob 수동 실행 시 timeBucket 파라미터 추가
- DataPipeline: L3 표시를 cachedDays → totalVessels로 변경

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 01:15:12 +09:00
51780b80bb Merge pull request 'fix: L2 워밍업 범위 확장 — Daily Job 전 기동 시 어제 데이터 포함' (#78) from develop into main
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 3m8s
2026-02-21 00:43:44 +09:00
9f16fee8b2 Merge pull request 'fix: L2 워밍업 범위 확장 — Daily Job 전 기동 시 어제 데이터 포함' (#77) from feature/dashboard-phase-1 into develop 2026-02-21 00:43:24 +09:00
3250da7347 fix: L2 워밍업 범위 확장 — Daily Job 전 기동 시 어제 데이터 포함
00:00~01:00 기동: 어제 00:00 ~ 현재 정각 (Daily Job용)
01:00 이후 기동: 오늘 00:00 ~ 현재 정각 (기존 동작)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 00:42:28 +09:00
e16aa2d645 Merge pull request 'chore: L2 HourlyTrackCache maxSize 3.5M→7M 상향' (#76) from develop into main
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 4m33s
2026-02-21 00:36:48 +09:00
397164e6cd Merge pull request 'chore: L2 HourlyTrackCache maxSize 3.5M→7M 상향' (#75) from feature/dashboard-phase-1 into develop 2026-02-21 00:36:18 +09:00
7681fc6031 chore: L2 HourlyTrackCache maxSize 3.5M→7M 상향
실측 24시간 기준 3.5M 100% 도달 확인 — 2배 여유(7M)로 상향 후
며칠 추이 관찰하여 상한선 확정 예정

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 00:35:35 +09:00
893a54ec8e Merge pull request 'chore: L2 HourlyTrackCache maxSize 3.5M→5M 상향' (#74) from develop into main
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 3m25s
2026-02-21 00:28:28 +09:00
e28d49958a Merge pull request 'chore: L2 HourlyTrackCache maxSize 3.5M→5M 상향' (#73) from feature/dashboard-phase-1 into develop 2026-02-21 00:28:03 +09:00
6db0a5a3fa chore: L2 HourlyTrackCache maxSize 3.5M→5M 상향
실측 24시간 기준 3.5M 100% 도달 확인 — 메모리 여유 있으므로
5M으로 상향 후 며칠 추이 관찰하여 상한선 확정 예정

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 00:26:34 +09:00
a0963a1332 Merge pull request 'fix: html2canvas oklch/oklab 색상 파싱 에러 수정' (#72) from develop into main
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 3m8s
2026-02-20 20:50:42 +09:00
b7f473b0da Merge pull request 'fix: html2canvas oklch/oklab 색상 파싱 에러 수정' (#71) from feature/dashboard-phase-1 into develop 2026-02-20 20:50:17 +09:00
d3e43654e9 fix: html2canvas oklch/oklab 색상 파싱 에러 수정
Tailwind CSS 4의 oklch()/color-mix(in oklab) 함수를 html2canvas가
파싱하지 못하는 문제 해결 — 캡처 전 모든 요소의 색상을 브라우저
computed RGB 값으로 강제 인라인 적용 후 캡처, 완료 후 원복

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 20:49:22 +09:00
3f55f80d2b Merge pull request 'feat: UI 레이아웃 수정 + 구역분석/STS 보고서 모달 + 이미지 저장' (#70) from develop into main
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 5m10s
2026-02-20 18:46:55 +09:00
fa2610c9a1 Merge pull request 'feat: UI 레이아웃 수정 + 구역분석/STS 보고서 모달 + 이미지 저장' (#69) from feature/dashboard-phase-1 into develop 2026-02-20 18:46:30 +09:00
b20510599c feat: UI 레이아웃 수정 + 구역분석/STS 보고서 모달 + 이미지 저장
- 날짜 입력 세로 배치 (좁은 사이드바 대응)
- 결과 리스트 높이 max-h-[40vh] 반응형 개선
- TimelineControl 반응형 폭 + z-index 수정
- VesselDetailModal: 임베디드 지도 + 방문이력 + 이미지 저장
- StsContactDetailModal: 2항적 지도 + 접촉통계 + 이미지 저장
- html2canvas 의존성 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 18:44:38 +09:00
d3520a6fd8 Merge pull request 'feat: 다중구역이동 항적 분석 + STS 접촉 분석 프론트엔드 이관' (#68) from develop into main
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 3m47s
2026-02-20 17:08:13 +09:00
efe6073cc7 Merge pull request 'feat: 다중구역이동 항적 분석 + STS 접촉 분석 프론트엔드 이관' (#67) from feature/dashboard-phase-1 into develop 2026-02-20 17:07:45 +09:00
1cc25f9f3b feat: 다중구역이동 항적 분석 + STS 접촉 분석 프론트엔드 이관
- terra-draw 기반 지도 폴리곤/사각형/원 그리기 + 편집 (OL Draw 대체)
- 구역 항적 분석: ANY/ALL/SEQUENTIAL 검색모드, 다중구역 시각화
- STS 선박쌍 접촉 분석: 접촉쌍 그룹핑, 위험도 indicator, ScatterplotLayer
- Deck.gl 레이어: PathLayer + TripsLayer + IconLayer (커서 기반 O(1) 보간)
- 공유 타임라인 컨트롤 (재생/배속/프로그레스바)
- CSV 내보내기 (다중 방문 동적 컬럼, BOM+UTF-8)
- ApiExplorer 5모드 통합 (positions/vessel/replay/area-search/sts)

신규 17파일 (features/area-search/), 수정 5파일

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 17:07:14 +09:00
a7b9e76d51 Merge pull request 'feat: 항적/리플레이 선종 아이콘 + Raw Data 패널' (#66) from develop into main
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 2m41s
2026-02-20 16:00:18 +09:00
b5bb22ea14 Merge pull request 'feat: 항적/리플레이 선종 아이콘 + Raw Data 패널' (#65) from feature/dashboard-phase-1 into develop 2026-02-20 15:59:56 +09:00
f41463d0f2 feat: 항적/리플레이 선종 아이콘 표시 수정 + Raw Data 패널 추가
- 속도 0일 때 이동 아이콘으로 표시하여 선종별 색상/형태 구분
- ApiExplorer 좌측 패널에 Swagger 스타일 JSON 응답 데이터 표시
- 3모드(최근위치/항적/리플레이) 각각 선택 데이터 실시간 표시

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 15:59:33 +09:00
9ae56f5517 Merge pull request 'fix: 항적 조회 500 에러 + 리플레이 쿼리 무반응 수정' (#64) from develop into main
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 3m35s
2026-02-20 15:37:39 +09:00
33acf86277 Merge pull request 'fix: 항적 조회 500 에러 + 리플레이 쿼리 무반응 수정' (#63) from feature/dashboard-phase-1 into develop 2026-02-20 15:37:05 +09:00
4e6e6392c6 fix: 항적 조회 500 에러 + 리플레이 쿼리 무반응 수정
- gisApi: mmsiList → vessels 필드명 백엔드 DTO 일치
- ReplaySetupPanel: datetime 포맷 ISO 'T' 유지 (백엔드 @JsonFormat 호환)
- replayWebSocket: STOMP 에러/응답 로깅 강화

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 15:36:42 +09:00
137a22a411 Merge pull request 'feat: Ship-GIS 기능 이관 — 최근위치/선박항적/뷰포트 리플레이' (#62) from develop into main
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 4m0s
2026-02-20 15:22:11 +09:00
e0dc0b855a Merge pull request 'feat: Ship-GIS 기능 이관 — 최근위치/선박항적/뷰포트 리플레이' (#61) from feature/dashboard-phase-1 into develop 2026-02-20 15:21:41 +09:00
ed0f3056b1 feat: Ship-GIS 기능 이관 — 최근위치/선박항적/뷰포트 리플레이
dark(ship-gis) 프로젝트의 맵 기반 3대 기능을 API 탐색기에 이관.
Feature 폴더 모듈화 구조로 타 프로젝트 재활용 가능하게 구성.

Phase 1: vessel-map 공유 모듈 (Deck.gl 9 + Zustand 5 + STOMP)
Phase 2: 최근 위치 (30초 폴링 + IconLayer + 선종 필터 + 팝업)
Phase 3: 선박 항적 (MMSI 조회 + PathLayer + 타임라인 보간)
Phase 4: 뷰포트 리플레이 (STOMP WebSocket 청크 + TripsLayer 애니메이션)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 15:19:21 +09:00
14e61e6bd0 Merge pull request 'perf: Daily Job 인메모리 캐시 기반 최적화 — N+1 SQL 제거' (#60) from develop into main
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 2m52s
2026-02-20 11:39:54 +09:00
fc7beac9f7 Merge pull request 'fix: shipimg path conflict' (#59) from feature/dashboard-phase-1 into develop 2026-02-20 11:39:32 +09:00
273d65c01a perf: Daily Job 인메모리 캐시 기반 최적화 — N+1 SQL 제거
Hourly Job에 적용된 캐시 기반 병합 패턴을 Daily Job에 동일 적용:
- CacheBasedDailyTrackReader: L2(HourlyTrackCache)에서 읽기 + DB fallback
- DailyTrackMergeProcessor: Java 인메모리 WKT 병합 + 통계 집계
- 비정상 검출: MMSI별 개별 쿼리 → 1회 bulk prefetch
- SQL ~20,000건 → ~3건 (99.98% 감소), 24분 → 30~60초 예상

삭제: DailyTrackProcessor, DailyTrackProcessorWithAbnormalDetection,
      BaseTrackProcessorWithAbnormalDetection (N+1 SQL 프로세서)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 11:38:48 +09:00
9a1d4b7b2e Merge pull request 'feat: recent-positions IMO + 선박사진 enrichment' (#57) from develop into main
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 2m46s
2026-02-20 02:18:23 +09:00
60f24a61a5 Merge pull request 'fix: shipimg 경로 충돌 수정' (#58) from feature/dashboard-phase-1 into develop 2026-02-20 02:17:35 +09:00
8a9efdaf95 fix: shipimg 경로 충돌 수정 — /{imo} 숫자 패턴 제약 추가
- /{imo} → /{imo:\d+}로 변경하여 /valid-list 경로와 충돌 방지

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 02:17:18 +09:00
a2ae39a232 Merge pull request 'feat: recent-positions 선박사진 enrichment' (#56) from feature/dashboard-phase-1 into develop 2026-02-20 02:12:07 +09:00
d49fd6a790 feat: recent-positions 응답에 선박사진 정보 enrichment 추가
- ShipImageService @PostConstruct로 85K IMO 인메모리 캐시 로드
- RecentVesselPositionDto에 shipImagePath, shipImageCount 필드 추가
- VesselPositionService에서 imo 기반 O(1) lookup으로 사진 정보 주입
- ShipImageRepository에 이미지 수 포함 쿼리 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 02:11:45 +09:00
c2a0c43fd6 Merge pull request 'feat: recent-positions IMO 필드 + 선박사진 보유 목록 API' (#54) from feature/dashboard-phase-1 into develop 2026-02-20 02:05:52 +09:00
27891baada feat: recent-positions IMO 필드 추가 + 선박사진 보유 목록 API
- RecentVesselPositionDto에 imo 필드 추가 (0이면 null 처리)
- GET /api/v2/shipimg/valid-list: 선박사진 보유 IMO 전체 목록 + 썸네일 경로
- 초기 로딩 시 선박 썸네일 즉시 표시 용도 (85K+ IMO)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 02:05:20 +09:00
0caea9c766 Merge pull request 'fix: UTC 타임존 변환 + Daily 캐시 부분 fallback 추가' (#53) from develop into main
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 3m20s
2026-02-20 00:47:45 +09:00
f5738978ed Merge pull request 'fix: UTC 타임존 변환 + Daily 캐시 부분 fallback 추가' (#52) from feature/dashboard-phase-1 into develop 2026-02-20 00:47:10 +09:00
68c22b3211 fix: UTC 타임존 변환 + Daily 캐시 부분 fallback 추가
- DateTimeParseUtil: zdt.toLocalDateTime() → withZoneSameInstant(systemDefault) 변환
  클라이언트 UTC 시각("Z" 접미사)이 KST로 변환되지 않아 9시간 밀리는 버그 수정
- GisServiceV2 queryWithCache: Daily 캐시 HIT 후 요청 MMSI 미존재 시
  DB fallback(hourly/5min 계층 조회) 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 00:46:29 +09:00
e9aa0302cd Merge pull request 'feat: 중국허가선박 최신 위치 조회 API' (#51) from develop into main
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 2m34s
2026-02-19 23:04:28 +09:00
c8369e193f Merge pull request 'feat: 중국허가선박 최신 위치 조회 API' (#50) from feature/dashboard-phase-1 into develop 2026-02-19 23:04:22 +09:00
00bfa97875 feat: 중국허가선박 최신 위치 조회 API 추가
GET /api/v2/vessels/chnprmship/recent-positions?minutes=60
ChnPrmShipCacheManager에서 지정 시간 내 신호 수신된 선박 조회.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 23:03:32 +09:00
9f98682347 Merge pull request 'fix: V2 캐시 조회 시 누락 MMSI DB fallback 추가' (#49) from develop into main
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 2m48s
2026-02-19 22:53:19 +09:00
b7dc6eacf8 Merge pull request 'fix: V2 캐시 조회 시 누락 MMSI DB fallback 추가' (#48) from feature/dashboard-phase-1 into develop 2026-02-19 22:52:42 +09:00
17c646e87a fix: V2 캐시 조회 시 누락 MMSI DB fallback 추가
L1/L2 캐시에 다른 선박 데이터가 있어 HIT로 판정되지만
요청한 MMSI가 캐시에 없을 때 DB fallback이 누락되는 버그 수정.
filterByMmsi() 후 누락된 MMSI에 대해 부분 DB fallback 실행.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 22:51:55 +09:00
e6cb152d29 Merge pull request 'feat: ChnPrmShip 전용 DB 이력 + API enrichment + ShipImage V2' (#47) from develop into main
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 2m35s
2026-02-19 22:38:17 +09:00