커밋 그래프

105 커밋

작성자 SHA1 메시지 날짜
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
8e7e8ff2de Merge pull request 'perf: API 응답 최적화 + 점진적 렌더링 + 해구 choropleth 지도' (#38) from feature/dashboard-phase-1 into develop 2026-02-19 20:25:52 +09:00
0cdb46d063 perf: API 응답 최적화 + 점진적 렌더링 + 해구 choropleth 지도
백엔드:
- haegu/realtime: DB 공간 JOIN(12s) → 인메모리 캐시 순회(~50ms)
- batch/statistics: N+1 JobExplorer(1.1s) → 단일 SQL 집계(~100ms)
- batch/daily-stats: N+1×7일(9s) → 직접 SQL 2쿼리(~200ms)
- throughput: pg_total_relation_size 매번 호출(1.4s) → Caffeine 5분 캐시
- quality: 풀스캔(0.6s) → 24시간 범위 제한

프론트엔드:
- Promise.allSettled 차단 → 개별 .then() 점진적 렌더링
- useCachedState 훅: 페이지 전환 시 이전 데이터 즉시 표시
- AreaStats: 해구 폴리곤 choropleth 지도 + 선박수 범례 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 20:24:28 +09:00
c3d0b15f97 Merge pull request 'feat: Phase 4 — 비정상 항적 + 시스템 메트릭 (7/7 완성)' (#37) from develop into main
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 2m40s
2026-02-19 19:20:31 +09:00
97b71b16e1 Merge pull request 'feat: Phase 4 — 비정상 항적 + 시스템 메트릭 (7/7 완성)' (#36) from feature/dashboard-phase-1 into develop 2026-02-19 19:20:21 +09:00
7a17d8e1d8 feat: Phase 4 — 비정상 항적 + 시스템 메트릭 페이지 (7/7 완성)
- AbnormalTracks: 유형별 통계, 일별 추이 차트, 검출 목록 테이블
  - abnormalApi 클라이언트 (recent, summary, types)
- ApiMetrics: 시스템 메트릭, 캐시 상세(L1/L2/L3/AIS), 처리 지연, 히트율
  - 10초 폴링으로 실시간 갱신
- i18n: abnormal.* 17키 + metrics.* 21키 한/영 추가
- 전체 7개 페이지 라우팅 완성 (Navbar 메뉴 전부 활성)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 19:19:51 +09:00
6f17006811 Merge pull request 'feat: Phase 3 — API Explorer 지도 스캐폴딩' (#35) from develop into main
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 2m35s
2026-02-19 19:14:40 +09:00
20cb4b3337 Merge pull request 'feat: Phase 3 — API Explorer 지도 스캐폴딩' (#34) from feature/dashboard-phase-1 into develop 2026-02-19 19:14:30 +09:00
8fafaad6c0 feat: Phase 3 — API Explorer 지도 스캐폴딩
- MapLibre GL JS 5 지도 컨테이너 (Light/Dark 테마 자동 전환)
- Sidebar 접기/펼치기 레이아웃 (320px 사이드바 + 전체 높이 지도)
- API 유형 선택 UI (최근 위치 / 해구별 항적 / 선박별 항적)
- gisApi 클라이언트 (V1/V2 REST API 인터페이스)
- 지도 상수 (한반도 중심, 항적 색상, OpenFreeMap 타일)
- i18n 한/영 explorer.* 키 12개 추가
- lazy loading: ApiExplorer 청크 분리 (gzip 278KB)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 19:14:03 +09:00
f49f1ac4e4 Merge pull request 'perf: L1/L2 캐시 maxSize 상향 (실측 기반)' (#33) from develop into main
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 2m45s
2026-02-19 19:10:05 +09:00
c44075d72b Merge pull request 'perf: L1/L2 캐시 maxSize 상향 (실측 기반)' (#32) from feature/dashboard-phase-1 into develop 2026-02-19 19:09:55 +09:00
4b8b48e494 perf: L1/L2 캐시 maxSize 상향 (실측 기반)
- L1 FiveMinTrackCache: 500K→700K (실측 504K, 30% 여유)
- L2 HourlyTrackCache: 780K→1.4M (실측 1.08M, 30% 여유)
- 기존 산정: 30K MMSI × 버킷 → 실측: 190K MMSI (6.3배 과소 산정)
- L2 메모리 영향: +1.5GB (총 8.6GB, 힙 20~24GB 기준 36~43%)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 19:09:29 +09:00
eabeee1bb7 Merge pull request 'fix: 해구 통계 ROUND 함수 타입 캐스팅 오류 수정' (#31) from develop into main
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 2m31s
2026-02-19 19:01:28 +09:00
9ca3057abd Merge pull request 'fix: 해구 통계 ROUND 함수 타입 캐스팅 오류 수정' (#30) from feature/dashboard-phase-1 into develop 2026-02-19 19:01:17 +09:00
029f912783 fix: 해구 통계 ROUND 함수 타입 캐스팅 오류 수정
GREATEST() 반환값이 double precision이라 ROUND(dp, int) 호출 시
PostgreSQL에서 미지원 함수 에러 발생 → 전체 나눗셈 결과를 ::numeric 캐스팅

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 19:00:50 +09:00
ec20dc8e76 Merge pull request 'fix: 해구 조회 바운딩 박스 간소화' (#29) from develop into main
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 2m36s
2026-02-19 18:54:44 +09:00
908f047f55 Merge pull request 'fix: 해구 조회 바운딩 박스 간소화' (#28) from feature/dashboard-phase-1 into develop 2026-02-19 18:54:35 +09:00
61ec36c74a fix: 해구 조회 ST_Contains 제거 — 바운딩 박스 조인으로 간소화
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 18:54:16 +09:00
e2a692a5e2 Merge pull request 'fix: 해구 통계 디버그 로깅' (#27) from develop into main
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 2m31s
2026-02-19 18:50:25 +09:00
c72e3cad36 Merge pull request 'debug: 해구 조회 에러 로깅' (#24) from feature/dashboard-phase-1 into develop 2026-02-19 18:50:13 +09:00
6b1d5f3479 fix: 해구 통계 조회 에러 응답 노출 + 디버그 로깅 추가
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 18:49:27 +09:00
86f0c457e3 Merge pull request 'fix: toLocalDateTime 변환 강화' (#23) from develop into main
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 2m29s
2026-02-19 18:39:54 +09:00
b46b9335a0 Merge pull request 'fix: toLocalDateTime 변환 강화' (#22) from feature/dashboard-phase-1 into develop 2026-02-19 18:39:50 +09:00
6c63133fd8 fix: toLocalDateTime 변환 강화 — 타입 불일치 로깅 + toString 폴백
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 18:39:43 +09:00
1c963b3d75 Merge pull request 'fix: Timestamp 캐스팅 오류 수정' (#21) from develop into main
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 2m31s
2026-02-19 18:36:19 +09:00
8911259f29 Merge pull request 'fix: Timestamp 캐스팅 오류 수정' (#20) from feature/dashboard-phase-1 into develop 2026-02-19 18:35:35 +09:00
508cc264ee fix: MonitoringController Timestamp 캐스팅 오류 수정
- JdbcTemplate이 timestamptz를 java.sql.Timestamp로 반환하는 케이스 처리
- toLocalDateTime() 유틸 메서드로 Timestamp/OffsetDateTime/LocalDateTime 통합 변환

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 18:34:47 +09:00
065f14ede4 Merge pull request 'fix: MonitoringController 레거시 타일 쿼리 전환 + 해구 통계 수정' (#19) from develop into main
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 2m45s
2026-02-19 18:30:55 +09:00
1f209954bf Merge pull request 'fix: MonitoringController 레거시 타일 쿼리 → AIS 위치/항적 기반 전환' (#18) from feature/dashboard-phase-1 into develop 2026-02-19 18:30:39 +09:00