커밋 그래프

142 커밋

작성자 SHA1 메시지 날짜
5cf528fa72 Merge pull request 'chore: 운영 로그 레벨 정리 + daily 파티션 영구 보존' (#95) from feature/logging-and-partition-tuning into develop 2026-03-09 06:46:46 +09:00
d5ba32b308 docs: 릴리즈 노트 업데이트 2026-03-09 06:46:00 +09:00
9ffaf35aeb chore: 운영 로그 레벨 정리 + daily 파티션 영구 보존
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 06:05:10 +09:00
fab931c128 docs: 릴리즈 노트 정리 (2026-03-08)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 09:32:09 +09:00
66707e93cb Merge pull request 'feat: L3 Daily 캐시 DP 사전 간소화 + 14일 확대' (#93) from feature/cache-dp-simplification into develop 2026-03-08 09:30:20 +09:00
f628d381bb docs: 릴리즈 노트 업데이트
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 09:29:26 +09:00
0a0109fa7e feat: L3 Daily 캐시 DP 사전 간소화 + 14일 확대
- CacheTrackSimplifier: simplifyDpOnly() (DP-only 간소화), recalculateSpeeds() (Haversine 속도 재계산) 추가
- DailyTrackCacheManager: loadDay() 시 DP 사전 간소화 적용 (tolerance=0.001, ~100m)
- Daily 캐시 retention 7→14일, maxMemory 6→10GB
- Query/Batch DataSource: work_mem 256MB, synchronous_commit off 세션 튜닝

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 09:21:00 +09:00
c3a2ac3dea chore: 팀 워크플로우 v1.6.1 동기화
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 09:20:41 +09:00
ff6b8e6073 chore: CLAUDE_BOT_TOKEN 갱신 2026-03-06 08:00:11 +09:00
cb41337e22 docs: 릴리즈 노트 정리 (2026-03-02) 2026-03-02 16:48:06 +09:00
2436751434 Merge pull request 'fix(websocket): cancelQuery idempotent 처리 — 완료된 쿼리 취소 시 에러 대신 정상 응답' (#91) from feature/fix-cancel-query-and-quality into develop 2026-03-02 16:46:02 +09:00
bfed21dcb4 docs: 릴리즈 노트 업데이트 2026-03-02 16:44:46 +09:00
4fbf130326 fix(websocket): cancelQuery idempotent 처리 — 완료된 쿼리 취소 시 에러 대신 정상 응답
- parseTimestamp 실패 로깅 추가 (AreaSearchService)
- isNightTimeContact 야간 판정 로직 단순화 (VesselContactService)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 16:44:06 +09:00
69b8ce8adc docs: 릴리즈 노트 정리 (2026-03-02)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 15:39:18 +09:00
95b1ba6913 Merge pull request 'refactor(websocket): ChunkedTrackStreamingService 전수 최적화' (#89) from feature/websocket-replay-optimization into develop 2026-03-02 15:34:41 +09:00
242c2d13f5 docs: 릴리즈 노트 업데이트
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 15:28:45 +09:00
076cb6f8fe refactor(websocket): ChunkedTrackStreamingService 전수 최적화 — 버그수정 + 메트릭 DB + 데드코드 제거
Phase A: 버그 수정
- isQueryCancelled: queryCancelFlags 전체 순회 → queryId 직접 조회 (O(n)→O(1))
  한 쿼리 취소 시 서버 전체 쿼리 조기 종료되던 치명적 버그 해결
- QueryContext 내부 클래스 추출: 싱글턴 인스턴스 변수 5개를 쿼리별 로컬로 전환
  동시 쿼리 간 상태 교차 오염 원천 차단
- 대기열 타임아웃: 하드코딩 120초 → ActiveQueryManager 설정값 사용

Phase B: 쿼리 메트릭 DB 저장
- QueryMetricsService: signal.t_query_metrics 비동기 INSERT
- QueryMetricsController: GET /api/monitoring/query-metrics, /stats
- streamChunkedTracks finally 블록에서 자동 저장 (QueryBenchmark 데이터 연동)

Phase C: N+1 해소 + 데드코드 제거
- VesselInfo 배치 프리로드: viewportVesselIds 수집 후 1회 배치 조회
- 미사용 코드 ~400줄 삭제: simplificationStrategy, executorService, processQueryInChunks,
  batchGetVesselInfo, processChunk, selectTableByTimeRange, groupRangesByDate 등

Phase D: 코드 품질
- WKTReader: 싱글턴 공유 → ThreadLocal (스레드 안전성)
- avgSpeed 계산: 4곳 중복 → calculateAvgSpeed() 헬퍼 추출

2,984줄 → 2,575줄 (409줄 삭감)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 15:10:12 +09:00
119e8e5238 Merge pull request 'refactor: SignalKindCode 매핑 규칙 개선 — shipName BUOY 검출 + 치환 1회화' (#88) from feature/signal-kind-code-refactor into develop 2026-03-02 13:45:19 +09:00
e0fc760754 docs: 릴리즈 노트 업데이트 2026-03-02 13:44:23 +09:00
5e035f0362 refactor: SignalKindCode 매핑 규칙 개선 — shipName BUOY 검출 + 치환 1회화 + 응답 경로 최적화
- SignalKindCode 매핑 변경: aton→DEFAULT, tug/tender→DEFAULT,
  Vessel+towing/dredging/diving→DEFAULT, Vessel+leisure→DEFAULT
- shipName 기반 BUOY 검출: '.' '_' 문자 2개 이상 → BUOY
- 캐시 저장 시 1회 치환, API 응답 시 DB/캐시 값 직접 사용
- 응답 경로 6곳 resolve() 재계산 제거

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 13:42:36 +09:00
007af70166 docs: 릴리즈 노트 정리 (2026-03-02) 2026-03-02 00:20:41 +09:00
047117033b Merge pull request 'feat: 캐시 O(1) 조회 + 메모리 예산 관리 + L2 블록 간소화 포팅' (#86) from feature/perf-cache-optimization into develop 2026-03-02 00:13:55 +09:00
b95e0f1d1c docs: 릴리즈 노트 업데이트 2026-03-02 00:12:41 +09:00
322b04b309 feat: 캐시 O(1) 조회 + 메모리 예산 관리 + L2 블록 간소화 포팅
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>
2026-03-02 00:07:31 +09:00
5d1db92857 Merge pull request 'chore: settings.json에 CLAUDE_BOT_TOKEN 환경변수 추가' (#85) from feature/dashboard-phase-1 into develop 2026-03-01 23:12:39 +09:00
770207ee6c docs: 릴리즈 노트 업데이트 2026-03-01 23:11:06 +09:00
57a3e4d0d1 chore: settings.json에 CLAUDE_BOT_TOKEN 환경변수 추가
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 23:09:35 +09:00
82ae2651e1 Merge pull request 'perf: API 응답 크기 최적화 + Swagger 최신화' (#83) from feature/dashboard-phase-1 into develop 2026-03-01 22:55:26 +09:00
0249a1fb90 perf: API 응답 크기 최적화 — gzip 압축, NON_NULL, 정밀도 제한, Swagger 최신화
- application.yml: gzip 압축 활성화 (1KB 이상 JSON 자동 압축, 70~85% 감소)
- JacksonConfig: NON_NULL 전역 설정 (null 필드 직렬화 제거, 5~15% 감소)
- VesselPositionService: sog/cog 소수점 1자리, lon/lat 6자리 제한 (3~5% 감소)
- MapTileController: @Tag, @Operation, @Parameter Swagger 문서 추가
- LockMonitorController: @Tag, @Operation Swagger 문서 추가
- BatchAdminController daily-stats: @ApiResponse 응답 스키마 예시 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 22:54:19 +09:00
a90662b2f0 chore: 팀 워크플로우 v1.2.0→v1.5.0 동기화
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 22:53:57 +09:00
1e0656632a Merge pull request 'feat: DataPipeline 일별 차트 시각화 개선 — Stacked Bar + Duration Bar' (#81) from feature/dashboard-phase-1 into develop 2026-02-21 12:28:53 +09:00
5e6fdff787 feat: DataPipeline 일별 차트 시각화 개선 — Stacked Bar + Duration Bar
- 백엔드 daily-stats SQL 재설계: Job별 writeCount, execCount, avgDuration 반환
- vesselJobs 항상 0 버그 수정 (vesselAggregation 매칭 실패 → Job별 분리 구조)
- BarChart 다중 Series 지원 (stacked/grouped) + yFormatter
- DataPipeline: LineChart 1개 → Stacked Bar(처리건수) + Grouped Bar(소요시간) 2열 grid
- formatDuration null/undefined 가드 추가 (NaNh 표시 버그 수정)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 12:27:52 +09:00
9fcd374f4b Merge pull request 'fix: ST_AsText WKT 공백 불일치로 인한 daily merge 전량 필터 수정' (#79) from feature/dashboard-phase-1 into develop 2026-02-21 01:16:40 +09:00
1544832899 fix: ST_AsText WKT 공백 불일치로 인한 daily merge 전량 필터 수정
PostGIS ST_AsText()는 "LINESTRING M (...)" (공백 포함) 반환하지만
Java 코드는 "LINESTRING M(...)" (공백 없음) 형식만 매칭하여
앱 재시작 후 DB fallback/warmup 데이터가 전량 필터되는 버그 수정.

- DB 읽기 시 WKT 정규화 (CacheWarmup, CacheBasedReader 4곳)
- merge processor regex에 \s* 방어적 처리 (Daily/Hourly)
- countWktPoints indexOf('(') 기반으로 개선
- BatchAdmin: dailyJob 수동 실행 시 timeBucket 파라미터 추가
- DataPipeline: L3 표시를 cachedDays → totalVessels로 변경

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 01:15:12 +09:00
9f16fee8b2 Merge pull request 'fix: L2 워밍업 범위 확장 — Daily Job 전 기동 시 어제 데이터 포함' (#77) from feature/dashboard-phase-1 into develop 2026-02-21 00:43:24 +09:00
3250da7347 fix: L2 워밍업 범위 확장 — Daily Job 전 기동 시 어제 데이터 포함
00:00~01:00 기동: 어제 00:00 ~ 현재 정각 (Daily Job용)
01:00 이후 기동: 오늘 00:00 ~ 현재 정각 (기존 동작)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 00:42:28 +09:00
397164e6cd Merge pull request 'chore: L2 HourlyTrackCache maxSize 3.5M→7M 상향' (#75) from feature/dashboard-phase-1 into develop 2026-02-21 00:36:18 +09:00
7681fc6031 chore: L2 HourlyTrackCache maxSize 3.5M→7M 상향
실측 24시간 기준 3.5M 100% 도달 확인 — 2배 여유(7M)로 상향 후
며칠 추이 관찰하여 상한선 확정 예정

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 00:35:35 +09:00
e28d49958a Merge pull request 'chore: L2 HourlyTrackCache maxSize 3.5M→5M 상향' (#73) from feature/dashboard-phase-1 into develop 2026-02-21 00:28:03 +09:00
6db0a5a3fa chore: L2 HourlyTrackCache maxSize 3.5M→5M 상향
실측 24시간 기준 3.5M 100% 도달 확인 — 메모리 여유 있으므로
5M으로 상향 후 며칠 추이 관찰하여 상한선 확정 예정

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 00:26:34 +09:00
b7f473b0da Merge pull request 'fix: html2canvas oklch/oklab 색상 파싱 에러 수정' (#71) from feature/dashboard-phase-1 into develop 2026-02-20 20:50:17 +09:00
d3e43654e9 fix: html2canvas oklch/oklab 색상 파싱 에러 수정
Tailwind CSS 4의 oklch()/color-mix(in oklab) 함수를 html2canvas가
파싱하지 못하는 문제 해결 — 캡처 전 모든 요소의 색상을 브라우저
computed RGB 값으로 강제 인라인 적용 후 캡처, 완료 후 원복

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 20:49:22 +09:00
fa2610c9a1 Merge pull request 'feat: UI 레이아웃 수정 + 구역분석/STS 보고서 모달 + 이미지 저장' (#69) from feature/dashboard-phase-1 into develop 2026-02-20 18:46:30 +09:00
b20510599c feat: UI 레이아웃 수정 + 구역분석/STS 보고서 모달 + 이미지 저장
- 날짜 입력 세로 배치 (좁은 사이드바 대응)
- 결과 리스트 높이 max-h-[40vh] 반응형 개선
- TimelineControl 반응형 폭 + z-index 수정
- VesselDetailModal: 임베디드 지도 + 방문이력 + 이미지 저장
- StsContactDetailModal: 2항적 지도 + 접촉통계 + 이미지 저장
- html2canvas 의존성 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 18:44:38 +09:00
efe6073cc7 Merge pull request 'feat: 다중구역이동 항적 분석 + STS 접촉 분석 프론트엔드 이관' (#67) from feature/dashboard-phase-1 into develop 2026-02-20 17:07:45 +09:00
1cc25f9f3b feat: 다중구역이동 항적 분석 + STS 접촉 분석 프론트엔드 이관
- terra-draw 기반 지도 폴리곤/사각형/원 그리기 + 편집 (OL Draw 대체)
- 구역 항적 분석: ANY/ALL/SEQUENTIAL 검색모드, 다중구역 시각화
- STS 선박쌍 접촉 분석: 접촉쌍 그룹핑, 위험도 indicator, ScatterplotLayer
- Deck.gl 레이어: PathLayer + TripsLayer + IconLayer (커서 기반 O(1) 보간)
- 공유 타임라인 컨트롤 (재생/배속/프로그레스바)
- CSV 내보내기 (다중 방문 동적 컬럼, BOM+UTF-8)
- ApiExplorer 5모드 통합 (positions/vessel/replay/area-search/sts)

신규 17파일 (features/area-search/), 수정 5파일

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 17:07:14 +09:00
b5bb22ea14 Merge pull request 'feat: 항적/리플레이 선종 아이콘 + Raw Data 패널' (#65) from feature/dashboard-phase-1 into develop 2026-02-20 15:59:56 +09:00
f41463d0f2 feat: 항적/리플레이 선종 아이콘 표시 수정 + Raw Data 패널 추가
- 속도 0일 때 이동 아이콘으로 표시하여 선종별 색상/형태 구분
- ApiExplorer 좌측 패널에 Swagger 스타일 JSON 응답 데이터 표시
- 3모드(최근위치/항적/리플레이) 각각 선택 데이터 실시간 표시

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 15:59:33 +09:00
33acf86277 Merge pull request 'fix: 항적 조회 500 에러 + 리플레이 쿼리 무반응 수정' (#63) from feature/dashboard-phase-1 into develop 2026-02-20 15:37:05 +09:00
4e6e6392c6 fix: 항적 조회 500 에러 + 리플레이 쿼리 무반응 수정
- gisApi: mmsiList → vessels 필드명 백엔드 DTO 일치
- ReplaySetupPanel: datetime 포맷 ISO 'T' 유지 (백엔드 @JsonFormat 호환)
- replayWebSocket: STOMP 에러/응답 로깅 강화

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 15:36:42 +09:00