GPS 스푸핑 등 비정상 운항 패턴의 강화학습 분류기 고도화를 위해,
비정상 궤적을 정상 테이블(5min/hourly/daily)과 캐시(L1/L2)에도
포함 저장하는 설정 플래그 추가.
- vessel.batch.track.include-abnormal-in-tracks 플래그 (기본 false)
- 5min: isAbnormal 시에도 filteredTracks에 포함 (플래그 true)
- Hourly/Daily: correctedTrack null 시에도 originalTrack 포함 (플래그 true)
- 비정상 검출 + t_abnormal_tracks 기록은 플래그와 무관하게 항상 유지
- prod 환경 true 설정 (강화학습 데이터 수집)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Phase 1: L1/L2/L3 캐시 키 기반 직접 O(1) 조회 (전체 스캔 대체)
Phase 2: 64GB JVM 메모리 예산 논리적 파티셔닝 (캐시 35GB/쿼리 20GB)
Phase 3: L2 HourlyTrackCache 6시간 경과 엔트리 Nth-point 간소화
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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>
- CollectDB 다중 신호 수집 → S&P Global AIS API 단일 수집으로 전환
- sig_src_cd + target_id 이중 식별자 → mmsi(VARCHAR) 단일 식별자
- t_vessel_latest_position → t_ais_position 테이블 전환
- 레거시 배치/유틸 ~30개 클래스 삭제 (VesselAggregationJobConfig, ShipKindCodeConverter 등)
- AisTargetCacheManager 기반 캐시 이중 구조 (최신위치 + 트랙 버퍼)
- CacheBasedVesselTrackDataReader + CacheBasedTrackJobListener 신규 추가
- VesselStaticStepConfig: 정적정보 CDC 변경 검출 + hourly job 편승
- SignalKindCode enum: vesselType/extraInfo 기반 선종 자동 분류
- WebSocket/STOMP 전체 mmsi 전환 (StompTrackStreamingService ~40곳)
- 모니터링/성능 최적화 코드 mmsi 기반 전환
- DataSource 설정 통합 (snpdb 단일 DB)
- AreaBoundaryCache Polygon→Geometry 캐스트 수정 (MULTIPOLYGON 지원)
- ConcurrentHashMap 적용 (VesselTrackStepConfig 동시성 버그 수정)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- POST /api/v2/tracks/vessels: DailyTrackCacheManager 캐시-DB 분리 조회
- 모든 V2 항적 엔드포인트에 ActiveQueryManager 공유 Semaphore 적용
- 포인트 버짓: 총 포인트 초과 시 비율 기반 균등 분배 간소화
- prod/prod-mpr/query 프로파일에 rest.v2.query 설정 추가
- 원격 DB 필요 테스트 @Disabled 처리, Maven Wrapper/gitattributes 정비
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- IntegrationVesselService에 전용 DataSource 자체 생성/관리 추가
- vessel.integration.datasource.* 설정으로 별도 DB 연결 가능
- @PostConstruct에서 경량 HikariDataSource 생성 (max 3, min 1)
- 미설정 시 queryDataSource 자동 폴백 (기존 동작 유지)
- prod: 별도 DB (mdadb2 gis.t_ship_integration_sub) → 전용 DataSource
- dev/prod-mpr: queryDB signal 스키마 → queryDataSource 폴백
- 기존 DataSourceConfig 4개 파일 수정 없이 프로파일 완벽 호환
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Phase 1.1 + 1.2: WebSocket 리플레이 요청 동시 부하 제어
- ActiveQueryManager에 Fair Semaphore 기반 글로벌 동시 쿼리 제한 추가 (기본 30개)
- @Async 스트리밍 메서드 내에서 슬롯 획득 (인바운드 채널 블로킹 방지)
- 쿼리 완료/실패/취소 시 finally 블록에서 반드시 리소스 반환
- 글로벌 Semaphore 슬롯 반환
- 세션별 쿼리 카운트 감소 (기존 누락 수정)
- ActiveQueryManager 쿼리 정리
- TrackQueryInterceptor 세션 제한값 외부 설정화 (@Value)
- application-prod.yml에 websocket.query 설정 추가
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add GisControllerV2/GisServiceV2 for CompactVesselTrack responses
- Add nationalCode and shipKindCode fields to REST API responses
- Add flexible DateTime parsing support (multiple formats)
- Add TrackConverter utility for track data conversion
- Update SwaggerConfig with V2 API endpoints and unified tags
- Update ProdDataSourceConfig for prod-mpr profile support
- Enhance Swagger documentation for all DTOs