23828c742e
refactor: codex 이식 완료 — 환경변수 동적화 + @Table schema 제거 + import 정리
...
- Backend: @Table(schema="kcg") 하드코딩 제거 → application.yml default_schema 활용
- Backend: application.yml/prod.yml 환경변수 ${} 패턴 전환
- Backend: WebConfig CORS 5174 포트 추가
- Frontend: tsconfig resolveJsonModule 추가
- Prediction: scheduler/snpdb/vessel_store import 위치 + 주석 codex 동기화
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 01:17:57 +09:00
2534c9dbca
fix: time_bucket 수집 안전 윈도우 도입 — incremental fetch 데이터 누락 방지
...
snpdb 5분 버킷 데이터가 적재 완료까지 ~12분 소요되는데,
기존 fetch_incremental이 상한 없이 미완성 버킷을 수집하여
_last_bucket이 조기 전진 → 뒤늦게 완성된 행 영구 누락.
- time_bucket.py 신규: safe_bucket(12분 지연) + backfill(3 bucket)
- snpdb.py: fetch_all_tracks/fetch_incremental에 safe 상한 + 백필 하한
- vessel_store.py: merge_incremental sort+keep='last', evict_stale time_bucket 우선
- config.py: SNPDB_SAFE_DELAY_MIN=12, SNPDB_BACKFILL_BUCKETS=3
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 15:11:20 +09:00
b8b60bf314
fix: timestamp fallback에서 UTC→KST 변환 추가
...
Codex 리뷰 지적: timestamp fallback 분기에서 UTC aware 값을
replace(tzinfo=None)로 tz만 제거하면 KST time_bucket과 9시간 어긋남.
astimezone(KST) 후 tz 제거하도록 수정.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 07:05:15 +09:00
d15039ce18
fix: vessel_store _last_bucket 타임존 오류 수정
...
snpdb time_bucket은 tz-naive KST인데 UTC tzinfo를 강제 부여하여
incremental fetch WHERE time_bucket > %s 비교 시 미래 시간으로 해석,
항상 0 rows 반환 → 1h 어구 그룹이 점진적으로 소멸하는 버그.
tz-naive 그대로 유지하도록 수정 (load_initial, merge_incremental 3곳).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 05:53:14 +09:00
f09186a187
feat: 어구 리플레이 서브클러스터 분리 렌더링 + 일치율 감쇠 개선
...
- 서브클러스터별 독립 폴리곤/센터/center trail 렌더링
- 반경 밖 이탈 선박 강제 감쇠 (OUT_OF_RANGE)
- Backend correlation API에 sub_cluster_id 추가
- 모델 패널 5개 항상 표시, 드롭다운 기본값 70%
- DISPLAY_STALE_SEC (time_bucket 기반) 폴리곤 노출 필터
- AIS 수집 bbox 122~132E/31~39N 확장
- historyActive 시 deck.gl 이중 렌더링 수정
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 09:01:03 +09:00
bbbc326e38
refactor: FleetClusterLayer 10파일 분리 + deck.gl 리플레이 기반 구축
...
FleetClusterLayer.tsx 2357줄 → 10개 파일 분리:
- fleetClusterTypes/Utils/Constants: 타입, 기하 함수, 모델 상수
- useFleetClusterGeoJson: 27개 useMemo GeoJSON 훅
- FleetClusterMapLayers: MapLibre Source/Layer JSX
- CorrelationPanel/HistoryReplayController: 패널 서브컴포넌트
- GearGroupSection/FleetGearListPanel: 좌측 목록 (DRY)
- FleetClusterLayer: 오케스트레이터 524줄
deck.gl + Zustand 리플레이 기반 (Phase 0~2):
- zustand 5.0.12, @deck.gl/geo-layers 9.2.11 설치
- gearReplayStore: Zustand + rAF 애니메이션 루프
- gearReplayPreprocess: TripsLayer 전처리 + cursor O(1) 보간
- useGearReplayLayers: deck.gl 레이어 빌더 (10fps 스로틀)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 07:44:07 +09:00
1bf70f46ac
feat: 분석 용어/색상 통일 + 경량 분석 + 항적 미니맵
...
- AI분석/현장분석/보고서 위험도 용어 통일 (HIGH→WATCH, MEDIUM→MONITOR, LOW→NORMAL)
- 공통 riskMapping.ts: ALERT_COLOR/EMOJI/LEVELS, RISK_TO_ALERT, STATS_KEY_MAP
- deck.gl 오버레이 색상 현장분석 팔레트로 통일
- Python 경량 분석: 파이프라인 미통과 412* 선박에 위치 기반 간이 AnalysisResult 생성
- 현장분석 fallback 제거: classifyStateFallback/classifyFishingZone → Python 결과 전용
- 보고서 위험 평가: Python riskCounts 실데이터 기반으로 전면 교체
- 현장분석 우측 패널: 항적 미니맵 (72시간, fetchVesselTrack API)
- 현장분석 좌측 패널: 위험도 점수 기준 섹션 추가
2026-03-25 12:39:22 +09:00
433141a3e8
feat: AI 분석 통계 서버사이드 전환 + 어구/선단 UI 개선
...
- Backend: /api/vessel-analysis 응답에 stats 집계 필드 추가
- Backend: GroupPolygonService.getGearStats() 어구 SQL 집계
- Frontend: 클라이언트 사이드 stats/gearStats 계산 로직 완전 제거
- Frontend: 가상 선박 마커, 어구 겹침 팝업, 패널 아코디언
- Frontend: cnFishingSuspects에 모선 포함
- Python: vessel_store COG bearing 계산 (마지막 2점 기반)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 15:55:15 +09:00
4c22d5f1f9
fix(prediction): 어구그룹 탐지 — 전체 AIS 선박 대상으로 확장
...
- detect_gear_groups: vessel_dfs(분류 대상만) → vessel_store.get_all_latest_positions()(전체 14K선박)
- build_all_group_snapshots: 동일하게 all_positions 기반으로 전환
- vessel_store: get_all_latest_positions() 메서드 추가
- 결과: 0 gear groups → 210 gear groups (GEAR_IN_ZONE 57, GEAR_OUT_ZONE 45)
2026-03-24 14:17:44 +09:00
2f0ff22d1b
feat: 한국 레이어 핵심 기능 통합 — 해외시설·현장분석·선단강조·버그수정 ( #145 )
2026-03-23 08:19:54 +09:00
a68dfb21b2
feat: Python 어선 분류기 + 배포 설정 + 백엔드 모니터링 프록시
...
- prediction/: FastAPI 7단계 분류 파이프라인 + 6개 탐지 알고리즘
- snpdb 궤적 조회 → 인메모리 캐시(13K척) → 분류 → kcgdb 저장
- APScheduler 5분 주기, Python 3.9 호환
- 버그 수정: @property last_bucket, SQL INTERVAL 바인딩, rollback, None 가드
- 보안: DB 비밀번호 하드코딩 제거 → env 환경변수 필수
- deploy/kcg-prediction.service: systemd 서비스 (redis-211, 포트 8001)
- deploy.yml: prediction CI/CD 배포 단계 추가 (192.168.1.18:32023)
- backend: PredictionProxyController (health/status/trigger 프록시)
- backend: AppProperties predictionBaseUrl + AuthFilter 인증 예외
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 12:10:21 +09:00