커밋 그래프

133 커밋

작성자 SHA1 메시지 날짜
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
3669b837f1 Merge pull request 'feat: ChnPrmShip 전용 DB 이력 + API enrichment + ShipImage V2' (#46) from feature/dashboard-phase-1 into develop 2026-02-19 22:37:58 +09:00
0cc6e58f9b feat: ChnPrmShip 전용 DB 이력 + API enrichment + ShipImage V2
- t_chnprmship_positions 월별 파티션 테이블 (PartitionManager 관리)
- ChnPrmShipPositionSyncStep: 5분 Job 편승 캐시→DB 이중 적재
- ChnPrmShip 캐시 TTL 2→7일, 워밍업 소스 전용 DB + t_ais_position 이중화
- tracks/vessels API: includeChnPrmShip=true 시 ChnPrmShipInfo enrichment
- ShipImageControllerV2: /api/v2/shipimg/{imo} 추가
- SwaggerConfig: V2 경로 분리 + shipimg V2 그룹 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 22:37:03 +09:00
85c8b5b28e Merge pull request 'docs: Swagger UI 현행화' (#45) from develop into main
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 2m34s
2026-02-19 21:30:31 +09:00
198afc1fdc Merge pull request 'docs: Swagger UI 현행화 — 서버 URL, @Schema, @Parameter' (#44) from feature/dashboard-phase-1 into develop 2026-02-19 21:30:06 +09:00
508f35a214 docs: Swagger UI 현행화 — 서버 URL, DTO @Schema, @Parameter 추가
- SwaggerConfig: 서버 URL을 현행 환경(192.168.1.18:18090)으로 업데이트
- AbnormalTrackResponse: 13개 필드에 @Schema 어노테이션 추가
- AbnormalTrackStatsResponse: 7개 필드에 @Schema 어노테이션 추가
- GisController V1: minutes 파라미터 4곳에 @Parameter 추가
- BatchAdminController: step/details 엔드포인트에 @Operation 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 21:29:40 +09:00
b581233240 Merge pull request 'fix: 캐시 maxSize 설정 경로 수정' (#43) from develop into main
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 2m36s
2026-02-19 21:00:42 +09:00
f34d4921b7 Merge pull request 'fix: 캐시 maxSize 설정 경로 수정' (#42) from feature/dashboard-phase-1 into develop 2026-02-19 20:53:18 +09:00
8a5e77ab80 fix: 캐시 maxSize 설정 경로 수정 — application.yml이 실제 소스
application-prod.yml의 five-min-track/hourly-track가 app.ais-api 아래에
잘못 중첩되어 적용되지 않았음. application.yml의 app.cache 아래가 실제
@Value가 읽는 경로이므로 해당 파일을 수정.

- L1: 700K→1.5M, L2: 1.4M→3.5M (application.yml)
- application-prod.yml: 잘못된 중첩 제거

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 20:52:55 +09:00
a237648fe7 Merge pull request 'fix: L1/L2 캐시 maxSize 상향 + AisTarget hitRate 타입 수정' (#41) from develop into main
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 3m10s
2026-02-19 20:47:46 +09:00
10e99b6cee Merge pull request 'fix: L1/L2 캐시 maxSize 상향 + AisTarget hitRate 타입 수정' (#40) from feature/dashboard-phase-1 into develop 2026-02-19 20:47:45 +09:00
9774a75988 fix: L1/L2 캐시 maxSize 상향 + AisTarget hitRate 타입 수정
- L1(5분): 700K→1.5M (실측 612K, 87% 포화 → 41%)
- L2(시간): 1.4M→3.5M (실측 1.27M, 91% 포화 → 36%)
- AisTarget hitRate: String("64.41%") → double(64.41)
  프론트엔드 .toFixed() 호출 시 타입 에러 수정

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 20:47:14 +09:00
5cf6e32d71 Merge pull request 'perf: API 응답 최적화 + 점진적 렌더링 + 해구 choropleth 지도' (#39) from develop into main
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 2m35s
2026-02-19 20:26:23 +09:00