- LogCleanupJob: 보존 기간 초과 배치 로그 삭제 Tasklet Job
- 대상: batch_api_log(30일), Spring Batch 메타(90일),
batch_failed_record/RESOLVED(90일), batch_recollection_history(90일)
- application.yml에서 테이블별 보존 기간 설정 가능
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
tb_ship_risk_info에서 전체 IMO 조회 → 파티션 병렬 처리로
RisksByImos API 호출 → tb_ship_risk_detail_info에 INSERT
Closes#65
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- IMO 목록을 N개 파티션으로 분할하여 병렬 API 호출
- ImoFetchTasklet으로 IMO 조회 단계 분리
- sourceStepExecutionId → sourceJobExecutionId 마이그레이션
- afterFetch 중복 실행 방지 플래그 추가
- partition-count 설정 외부화 (dev:2, prod:4)
- ChnPrmShip 전용 캐시/API 구현 (GET /api/ais-target/chnprmship)
- ChnPrmShipCacheManager: Caffeine 캐시 (TTL 2일, 최대 2000건)
- ChnPrmShipCacheWarmer: 기동 시 DB에서 최근 2일 데이터 워밍업
- ChnPrmShipProperties: MMSI 목록 리소스 파일 로딩 (1,402척)
- AisTargetDataWriter: 배치 수집 시 대상 MMSI 캐시 연동
- AisTargetRepositoryImpl: int8→Integer 안전 변환 (toInt/toLong)
- AisTargetRepository: findLatestByMmsiInSince 시간 범위 필터 추가
- DbSyncTasklet: 마지막 성공 시각 기반 동적 범위 + 최대 60분 캡
- 캐시 진단용 SQL 쿼리 파일 추가
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Swagger @Operation/@Schema 상세 설명 추가 (검색, 필터, 폴리곤 API)
- Kafka 조건부 활성화 (KafkaAutoConfiguration exclude + @ConditionalOnProperty)
- kafka.enabled=false일 때 Kafka 빈 미생성 (@Nullable 처리)
- AisTargetResponseDto에 classType, core20Mmsi 필드 및 @Schema 추가
- ApiResponse에 @Schema 어노테이션 추가
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- tp_SNP_AIS_Signal → tp_Global_AIS_Signal (3개 프로파일)
- scripts/collect_signalkind_candidates.sh 추가
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* 🔧 Schema/Table 하드코딩 제거
* 🔥 BatchSchemaProperties.java 제거 및 @Value Schema 설정 방식 통일
* 🗃️ 용어 표준화
- Facility Port
- Common Code
- Risk&Compliance
- Movement
- Event
- PSC
- 선박제원정보
- AisTargetDataWriter: DB 저장 제거, 캐시 업데이트만 수행
- AisTargetDbSyncJob 신규 생성: 15분 주기 캐시→DB 동기화
- AisTargetDbSyncTasklet: 캐시에서 최근 15분 데이터 조회 후 UPSERT
- application.yml: ais-target-db-sync 설정 추가
데이터 흐름 변경:
- 기존: API(1분) → 캐시 + DB (매분 33K 건 저장)
- 변경: API(1분) → 캐시만, DB는 15분마다 MMSI별 최신 1건 저장
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- aisTargetImportJob: S&P Global AIS API 연동 (매 분 15초)
- AIS Target 조회 API (MMSI/시간/공간/폴리곤/WKT 검색)
- 항해 조건 필터 검색 API (SOG/COG/Heading/Destination/Status)
- Caffeine 캐시 적용 (TTL 120분, 최대 30만건)
- partitionManagerJob: 매일 1회 일별,월별 파티션 자동 생성
[개선]
- API context-path: /snp-api로 변경 (다른 API 서비스의 Proxy 설정 충돌 방지)
- BaseApiReader 상태 초기화 로직 추가 (재실행 시 0건 버그 수정)
- logback-spring.xml: 로그 파일 분리 및 롤링 정책 적용