Merge pull request 'release: 2026-03-09 (119건 커밋)' (#96) from develop into main
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 8m12s
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 8m12s
This commit is contained in:
커밋
9d6e5ca408
@ -4,6 +4,15 @@
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
## [2026-03-09]
|
||||||
|
|
||||||
|
### 변경
|
||||||
|
- 운영 로그 레벨 정리 — CACHE-MONITOR 루틴 로그(putAll/get) DEBUG 전환, 중요 이벤트(removeRange/simplify) INFO 유지
|
||||||
|
- Spring Batch/HikariCP 로그 INFO→WARN 하향
|
||||||
|
|
||||||
|
### 기타
|
||||||
|
- t_vessel_tracks_daily 파티션 영구 보존 설정 추가 (기본 3개월→무한)
|
||||||
|
|
||||||
## [2026-03-08]
|
## [2026-03-08]
|
||||||
|
|
||||||
### 추가
|
### 추가
|
||||||
|
|||||||
@ -60,7 +60,7 @@ public class FiveMinTrackCache {
|
|||||||
for (VesselTrack track : tracks) {
|
for (VesselTrack track : tracks) {
|
||||||
put(track);
|
put(track);
|
||||||
}
|
}
|
||||||
log.info("[CACHE-MONITOR] L1.putAll: input={}, cacheBefore={}, cacheAfter={}, stats=[{}]",
|
log.debug("[CACHE-MONITOR] L1.putAll: input={}, cacheBefore={}, cacheAfter={}, stats=[{}]",
|
||||||
tracks.size(), beforeSize, cache.estimatedSize(), getStats());
|
tracks.size(), beforeSize, cache.estimatedSize(), getStats());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -89,7 +89,7 @@ public class FiveMinTrackCache {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int totalTracks = result.values().stream().mapToInt(List::size).sum();
|
int totalTracks = result.values().stream().mapToInt(List::size).sum();
|
||||||
log.info("[CACHE-MONITOR] L1.getTracksInRange [{}, {}): mmsi={}, tracks={}, cacheTotal={}",
|
log.debug("[CACHE-MONITOR] L1.getTracksInRange [{}, {}): mmsi={}, tracks={}, cacheTotal={}",
|
||||||
start, end, result.size(), totalTracks, cache.estimatedSize());
|
start, end, result.size(), totalTracks, cache.estimatedSize());
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -133,7 +133,7 @@ public class FiveMinTrackCache {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int totalTracks = result.values().stream().mapToInt(List::size).sum();
|
int totalTracks = result.values().stream().mapToInt(List::size).sum();
|
||||||
log.info("[CACHE-MONITOR] L1.getTracksForVessels [{}, {}): requestedMmsi={}, lookups={}, hits={}, resultMmsi={}, tracks={}",
|
log.debug("[CACHE-MONITOR] L1.getTracksForVessels [{}, {}): requestedMmsi={}, lookups={}, hits={}, resultMmsi={}, tracks={}",
|
||||||
start, end, mmsiKeys.size(), lookupCount, hitCount, result.size(), totalTracks);
|
start, end, mmsiKeys.size(), lookupCount, hitCount, result.size(), totalTracks);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -64,7 +64,7 @@ public class HourlyTrackCache {
|
|||||||
for (VesselTrack track : tracks) {
|
for (VesselTrack track : tracks) {
|
||||||
put(track);
|
put(track);
|
||||||
}
|
}
|
||||||
log.info("[CACHE-MONITOR] L2.putAll: input={}, cacheBefore={}, cacheAfter={}, stats=[{}]",
|
log.debug("[CACHE-MONITOR] L2.putAll: input={}, cacheBefore={}, cacheAfter={}, stats=[{}]",
|
||||||
tracks.size(), beforeSize, cache.estimatedSize(), getStats());
|
tracks.size(), beforeSize, cache.estimatedSize(), getStats());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -92,7 +92,7 @@ public class HourlyTrackCache {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int totalTracks = result.values().stream().mapToInt(List::size).sum();
|
int totalTracks = result.values().stream().mapToInt(List::size).sum();
|
||||||
log.info("[CACHE-MONITOR] L2.getTracksInRange [{}, {}): mmsi={}, tracks={}, cacheTotal={}",
|
log.debug("[CACHE-MONITOR] L2.getTracksInRange [{}, {}): mmsi={}, tracks={}, cacheTotal={}",
|
||||||
start, end, result.size(), totalTracks, cache.estimatedSize());
|
start, end, result.size(), totalTracks, cache.estimatedSize());
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -133,7 +133,7 @@ public class HourlyTrackCache {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int totalTracks = result.values().stream().mapToInt(List::size).sum();
|
int totalTracks = result.values().stream().mapToInt(List::size).sum();
|
||||||
log.info("[CACHE-MONITOR] L2.getTracksForVessels [{}, {}): requestedMmsi={}, lookups={}, hits={}, resultMmsi={}, tracks={}",
|
log.debug("[CACHE-MONITOR] L2.getTracksForVessels [{}, {}): requestedMmsi={}, lookups={}, hits={}, resultMmsi={}, tracks={}",
|
||||||
start, end, mmsiKeys.size(), lookupCount, hitCount, result.size(), totalTracks);
|
start, end, mmsiKeys.size(), lookupCount, hitCount, result.size(), totalTracks);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -86,7 +86,7 @@ public class CompositeTrackWriter implements ItemWriter<AbnormalDetectionResult>
|
|||||||
if (hourlyTrackCache != null) {
|
if (hourlyTrackCache != null) {
|
||||||
long l2Before = hourlyTrackCache.size();
|
long l2Before = hourlyTrackCache.size();
|
||||||
hourlyTrackCache.putAll(normalTracks);
|
hourlyTrackCache.putAll(normalTracks);
|
||||||
log.info("[CACHE-MONITOR] CompositeTrackWriter → L2.putAll: tracks={}, L2 before={}, after={}",
|
log.debug("[CACHE-MONITOR] CompositeTrackWriter → L2.putAll: tracks={}, L2 before={}, after={}",
|
||||||
normalTracks.size(), l2Before, hourlyTrackCache.size());
|
normalTracks.size(), l2Before, hourlyTrackCache.size());
|
||||||
}
|
}
|
||||||
} else if ("daily".equals(targetTable)) {
|
} else if ("daily".equals(targetTable)) {
|
||||||
|
|||||||
@ -87,19 +87,12 @@ spring:
|
|||||||
logging:
|
logging:
|
||||||
level:
|
level:
|
||||||
root: INFO
|
root: INFO
|
||||||
gc.mda.signal_batch: DEBUG
|
gc.mda.signal_batch: INFO
|
||||||
gc.mda.signal_batch.global.util: INFO
|
gc.mda.signal_batch.monitoring: INFO
|
||||||
gc.mda.signal_batch.global.websocket.service: INFO
|
org.springframework.batch: WARN
|
||||||
gc.mda.signal_batch.batch.writer: INFO
|
|
||||||
gc.mda.signal_batch.batch.reader: INFO
|
|
||||||
gc.mda.signal_batch.batch.processor: INFO
|
|
||||||
gc.mda.signal_batch.domain: INFO
|
|
||||||
gc.mda.signal_batch.monitoring: DEBUG
|
|
||||||
gc.mda.signal_batch.monitoring.controller: INFO
|
|
||||||
org.springframework.batch: INFO
|
|
||||||
org.springframework.jdbc: WARN
|
org.springframework.jdbc: WARN
|
||||||
org.postgresql: WARN
|
org.postgresql: WARN
|
||||||
com.zaxxer.hikari: INFO
|
com.zaxxer.hikari: WARN
|
||||||
|
|
||||||
# 개발 환경 배치 설정 (성능 최적화)
|
# 개발 환경 배치 설정 (성능 최적화)
|
||||||
vessel: # spring 하위가 아닌 최상위 레벨
|
vessel: # spring 하위가 아닌 최상위 레벨
|
||||||
@ -267,8 +260,10 @@ vessel: # spring 하위가 아닌 최상위 레벨
|
|||||||
retention-days: 60 # 구역별 선박 항적: 60일
|
retention-days: 60 # 구역별 선박 항적: 60일
|
||||||
t_grid_vessel_tracks:
|
t_grid_vessel_tracks:
|
||||||
retention-days: 30 # 해구별 선박 항적: 30일
|
retention-days: 30 # 해구별 선박 항적: 30일
|
||||||
|
t_vessel_tracks_daily:
|
||||||
|
retention-months: 0 # 일별 항적: 영구 보관
|
||||||
t_abnormal_tracks:
|
t_abnormal_tracks:
|
||||||
retention-months: 0 # 비정상 항적: 무한 보관
|
retention-months: 0 # 비정상 항적: 영구 보관
|
||||||
|
|
||||||
# S&P AIS API 캐시 TTL (운영: 120분)
|
# S&P AIS API 캐시 TTL (운영: 120분)
|
||||||
app:
|
app:
|
||||||
|
|||||||
불러오는 중...
Reference in New Issue
Block a user