perf: Hourly Job 인메모리 병합 전환 — N+1 SQL 제거 #4

병합
htlee feature/hourly-inmemory-merge 에서 develop 로 1 commits 를 머지했습니다 2026-02-19 13:33:30 +09:00
소유자

Summary

  • Hourly Job에서 5분 트랙을 DB 대신 FiveMinTrackCache(Caffeine)에서 읽어 인메모리 병합
  • N+1 SQL 문제(60K+ 쿼리) → 인메모리 캐시 병합 (DB 쿼리 0~2회)
  • FiveMinTrackCache: Caffeine TTL 75분, 5분 적재 시 DB+캐시 동시 저장
  • CacheBasedHourlyTrackReader: 캐시 우선, DB fallback

Depends on

  • MR #3 (chore/team-workflow-init → develop) 선행 머지 필요

🤖 Generated with Claude Code

## Summary - Hourly Job에서 5분 트랙을 DB 대신 FiveMinTrackCache(Caffeine)에서 읽어 인메모리 병합 - N+1 SQL 문제(60K+ 쿼리) → 인메모리 캐시 병합 (DB 쿼리 0~2회) - FiveMinTrackCache: Caffeine TTL 75분, 5분 적재 시 DB+캐시 동시 저장 - CacheBasedHourlyTrackReader: 캐시 우선, DB fallback ## Depends on - MR #3 (chore/team-workflow-init → develop) 선행 머지 필요 🤖 Generated with [Claude Code](https://claude.com/claude-code)
htlee added 2 commits 2026-02-19 13:31:47 +09:00
- 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>
Hourly 집계의 N+1 DB 쿼리 패턴(60K+)을 인메모리 병합으로 교체.
5분 트랙 적재 시 FiveMinTrackCache에 보관하고 hourly job에서 캐시 기반으로
좌표 병합/통계 집계/간소화를 수행하여 DB 쿼리를 0~2회로 감소.

- FiveMinTrackCache: Caffeine 캐시 (TTL 75분, maxSize 500K)
- CacheBasedHourlyTrackReader: 캐시 기반 Reader + DB fallback
- HourlyTrackMergeProcessor: Java WKT 병합 + 비정상 검출 bulk prefetch
- @ConfigurationProperties 중복 해결 (프로그래밍 방식 Hikari 바인딩)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
htlee merged commit 5f0ef5e812 into develop 2026-02-19 13:33:30 +09:00
"로그인하여 이 대화에 참여"
No reviewers
레이블 없음
마일스톤 없음
담당자 없음
참여자 1명
알림
마감일
기한이 올바르지 않거나 범위를 벗어났습니다. 'yyyy-mm-dd'형식을 사용해주십시오.

마감일이 설정되지 않았습니다.

Reference: gc/signal-batch#4
No description provided.