kcg-monitoring/docs/RELEASE-NOTES.md

12 KiB
Raw Blame 히스토리

Release Notes

이 문서는 Keep a Changelog 형식을 따릅니다.

[Unreleased]

[2026-03-23.6]

수정

  • LIVE 모드 렌더링 최적화: useMonitor 1초 setInterval 제거 (60배 과잉 재계산 해소)
  • useKoreaFilters currentTime 의존성 제거 (5분 polling 시에만 필터 재계산)
  • useKoreaData aircraft/satellite LIVE↔REPLAY 분리 (LIVE에서 불필요한 매초 propagation 제거)
  • 특정어업수역 실제 폴리곤 좌표 적용 (bbox 직사각형 → 원본 GeoJSON EPSG:3857→WGS84 변환)
  • FishingZoneLayer zone 속성 매칭 수정 (id→zone, 폴리곤 투명 렌더링 해결)
  • 선박/분석 라벨 폰트 크기 80% 축소 (가독성 개선)
  • DB migration 008 적용 (is_transship_suspect 칼럼 추가 → AI 분석 API 500 에러 해결)

[2026-03-23.5]

추가

  • 이란 시설 deck.gl SVG 전환: OilFacility/Airport/MEFacility/MEEnergyHazard → IconLayer(SVG) + TextLayer
  • 26개 고유 SVG 아이콘 (배경 원형 + 색상 테두리 + 고유 실루엣)
  • 중동 에너지/위험시설 데이터 84개 (meEnergyHazardFacilities)
  • 나탄즈-디모나 핵시설 교차공격 리플레이 이벤트 (D+20)
  • AI 해양분석 챗 UI (AiChatPanel, API placeholder)
  • LayerPanel 해외시설 3단계 트리 (국가→카테고리→하위시설)

변경

  • 한국 군사/정부/NK 발사장 아이콘: emoji → SVG IconLayer 업그레이드 (19종)
  • 시설 라벨 SDF 테두리 적용 (fontSettings.sdf + outlineWidth:8) — 사막/위성 배경 가독성
  • 라벨 폰트 크기 ~1.2배 상향 (이란/한국 공통)
  • ReplayMap/SatelliteMap: DeckGLOverlay + 줌 스케일 연동

수정

  • IranDashboard LayerPanel 카운트 전수 보정 (하드코딩→실제 데이터 기반)
  • fishing-zones GeoJSON 좌표 보정
  • overseas 국가 키: overseasUK → overseasIsrael

[2026-03-23.4]

추가

  • 환적탐지 Python 이관: 프론트엔드 O(n²) 근접탐지 → 서버사이드 그리드 공간인덱스 O(n log n)
  • 필터 배지 클릭 → 대상 선박 목록 패널 (MMSI/이름/국적/유형/속도) + CSV 다운로드
  • 중국어선감시 KoreaFilters 통합: 다른 감시 탭과 동일한 선박 비활성화/배지/카운트 동작
  • 중국 어구그룹 감시 배지: 어구그룹 수(고유 모선명) 기준 집계

변경

  • deck.gl updateTriggers 적용: 줌 변경 시 레이어 accessor 재평가 최소화
  • 선박 카테고리/국적 토글: JS-level 배열 필터링 → MapLibre GPU-side filter 표현식
  • Ship.mtCategory/natGroup 사전 계산: Set.has() O(1) 필터 룩업 (getMarineTrafficCategory 매번 호출 제거)
  • LIVE 모드: currentTime 의존성 분리 → 매초 선박 재계산 제거
  • 분석 레이어 데이터/스타일 useMemo 분리: 줌 변경 시 ships 필터링 스킵
  • SVG 데이터 URI 모듈 레벨 캐싱

수정

  • 비허가 어구 그룹: 2개 이상일 때만 그룹 탐지/폴리곤 생성
  • 한국 필터 토글 시 선박 표시 복원 (anyKoreaFilterOn 조건 분기)
  • 필터별 개별 탐지 카운트 (합산 → 탭별 분리)
  • 헤더 1행 배치 (flex-wrap:nowrap), 이란 mode-toggle 좌측/지도 모드 중앙
  • onPick useCallback 안정화 (매 렌더 28개 정적 레이어 재생성 방지)
  • 감시 목록 Flag 빈값 표기: '??' → '-'

[2026-03-23.3]

변경

  • App.tsx 분해: IranDashboard + KoreaDashboard 추출 (771줄→163줄)
  • useStaticDeckLayers 분할: 레이어별 서브훅 4개 (1,086줄→85줄)
  • StaticFacilityPopup 독립 컴포넌트 추출 (KoreaMap -200줄)
  • geometry/shipClassification 유틸 추출
  • SharedFilterContext + useSharedFilters (카테고리 필터 공유)
  • API 클라이언트 래퍼 + usePoll 폴링 유틸 추가
  • 줌 이벤트 ref 기반 디바운싱

[2026-03-23.2]

추가

  • 중국어선감시 탭: CN 어선 + 어구 패턴 선박 필터링
  • 중국어선감시 탭: 조업수역 ~Ⅳ 폴리곤 동시 표시
  • 어구 그룹 수역 내/외 분류 (조업구역내 붉은색, 비허가 오렌지)
  • 패널 3섹션 독립 접기/펴기 (선단 현황 / 조업구역내 어구 / 비허가 어구)
  • 폴리곤 클릭·zoom 시 어구 행 자동 스크롤
  • localStorage 기반 레이어/필터 상태 영속화 (13개 항목)
  • AI 분석 닫힘 시 위험도 마커 off

변경

  • AI 분석 패널 위치 조정 (줌 버튼 간격 확보)
  • 백엔드 vessel-analysis 조회 윈도우 1h → 2h

수정

  • FleetClusterLayer 마운트 조건 완화 (clusters 의존 제거)

[2026-03-23]

추가

  • 해외시설 레이어: 위험시설(원전/화학/연료저장) + 중국·일본 발전소/군사시설
  • 현장분석 Python 연동 + FieldAnalysisModal (어구/선단 분석 대시보드)
  • 선단 선택 시 소속 선박 deck.gl 강조 (어구 그룹과 동일 패턴)
  • 전 시설 kind에 리치 Popup 디자인 통합 (헤더·배지·상세정보)
  • LAYERS 패널 카운트 통일 — 하드코딩→실제 데이터 기반 동적 표기

변경

  • DOM Marker → deck.gl 전환 (폴리곤 인터랙션 포함)
  • 줌 레벨별 아이콘/텍스트 스케일 연동 (z4=0.8x ~ z14=4.2x)

수정

  • 불법어선 탭 복원 + ShipLayer feature-state 필터 에러 수정
  • 해외시설 토글을 militaryOnly에서 분리 (선박/항공기 필터 간섭 해소)
  • deck.gl 레이어 호버 시 pointer 커서 표시
  • prediction 증분 수집 버그 수정 (vessel_store.py)

[2026-03-20]

변경

  • deck.gl 전면 전환: DOM Marker → GPU 렌더링 (WebGL)
  • 정적 마커 11종 deck.gl 전환 + 줌 레벨별 스케일

추가

  • NK 미사일 궤적선 + 정적 마커 Popup + 어구 강조
  • Python 분석 결과 오버레이: 위험도 마커 + 다크베셀/GPS 스푸핑 경고
  • AI 분석 통계 패널 (우상단, 접이식): 분석 대상/위험/다크/선단 집계
  • 불법어선/다크베셀/중국어선감시 Python 분석 연동
  • Backend vessel-analysis REST API + DB 테이블 복원
  • 특정어업수역 ~Ⅳ 실제 폴리곤 기반 수역 분류

수정

  • 해저케이블 날짜변경선 좌표 보정 + 렌더링 성능 개선

[2026-03-19]

추가

  • OpenSky OAuth2 Client Credentials 인증 (토큰 자동 갱신)

변경

  • OpenSky 수집 주기 60초 → 300초 (일일 크레딧 소비 11,520 → 2,304)
  • 인라인 CSS 정리 — 공통 클래스 추출 + Tailwind 전환

수정

  • OSINT 기사 중복 수집 방지: title 기반 24h 중복 체크 추가 (GDELT/Google News)
  • MapLibre symbol layer race condition 해소: hover를 feature-state로 분리, ships-korean-label visibility 제어로 변경

[2026-03-18]

추가

  • OSINT 수집기: GDELT + Google News RSS 백엔드 수집 (@Scheduled 2분)
  • Satellite 수집기: CelesTrak TLE 백엔드 수집 (@Scheduled 10분)
  • GET /api/osint?region=iran|korea, GET /api/satellites?region=iran|korea REST API
  • Caffeine 캐시 TTL 2일 (Aircraft 포함 전체 통일)
  • DB 마이그레이션: ship_positions, osint_feeds, satellite_tle 테이블 + 샘플 데이터
  • 프론트엔드 OSINT/위성 데이터 백엔드 API 우선 호출 + 직접 호출 fallback
  • 지진파 수집기: USGS FDSN API, 이란 bbox(M2+), 5분 주기
  • 기압 수집기: Open-Meteo API, 이란 5개 관측점, 10분 주기
  • DB: seismic_events, pressure_readings 테이블 (마이그레이션 004)
  • REST: GET /api/sensor/seismic, GET /api/sensor/pressure
  • 센서 API 서비스(sensorApi.ts): 백엔드 지진/기압 실데이터 연동
  • 선박 모달 S&P Global 다중 사진 슬라이드 (좌우 화살표 + 인디케이터)
  • 선박 모달 드래그 이동 (헤더 영역 grab)
  • LiveControls KST/UTC 라디오 버튼 그룹
  • 한국 선박 현황 헤더 ON/OFF 토글 → 지도 강조 링+라벨 표시 (기본 ON)
  • 우측 패널 한국 선박 목록: hover 시 지도 강조 링, 클릭 시 선박 모달 호출
  • 지진 포인트 클릭 → 지도 flyTo + SeismicMarker 진도별 펄스 원형 영향범위 표시
  • SatelliteMap flyTo 지원

변경

  • 프론트엔드 패키지 구조 리팩토링: components/ → common/layers/iran/korea/ 분리
  • App.tsx 분해: 1,179줄 → 588줄 (useIranData, useKoreaData, useKoreaFilters 훅 추출)
  • SensorChart: 더미 → 실데이터(지진/기압), x축 동적 시간 표시
  • SensorChart 그래프 순서: 지진파 → 기압 → 소음(DEMO) → 방사선(DEMO)
  • 히스토리 프리셋: 1H/2H/3H/6H (최소 1시간, 8칸 구조)
  • 센서 API 파라미터: hours → min (기본 2880=48h)
  • 센서 데이터 polling: 초기 48h 전체 → 10분마다 incremental merge
  • 선박 데이터 polling: 초기 60분 → 5분마다 6분 윈도우 merge + 60분 stale 제거
  • 선박 모달 고정 크기(300px) + 사진 영역 고정(160px, object-contain)
  • 선박 모달 데이터 레이아웃: 2컬럼 그리드 + 연관 정보 쌍 배치 + 긴 값 단독행
  • 선박 모달 CSS 통일 (태그 패딩/배경, 컬럼 간격 12px)
  • 선박 모달 사진 탭: S&P Global 명칭, 고화질(_2) 기본 표시
  • Overpass API 외부 호출 제거 → 정적 인프라 데이터
  • 지진파 그래프: LineChart → ScatterChart (진도별 색상/크기, 이벤트 점 표시)
  • 기압 그래프: 해수면 기압 보정(SLP), 관측소별 개별 라인, 원본 포인트 기반 렌더링
  • 그래프 데이터 범위: 표시 범위보다 1칸 확장 (y축 시작점 연결)
  • Tooltip: KST 시간 포맷, 상단 고정, 전체 스타일 통일
  • OilFacilityLayer: planned ring SVG 내부 이동 (아이콘 중심 정렬)
  • 밝은 테마: 지도 라벨 text-shadow CSS 변수 분리

수정

  • 002 마이그레이션 search_path에 public 추가 (PostGIS 타입 참조)
  • LiveControls KST 시간 이중 오프셋(+9h×2) 수정 + KST/UTC 토글
  • nginx /shipimg/ 프록시: ^~ 추가 (정적파일 regex 우선매칭 방지)
  • 센서 API(/api/sensor/*) 인증 예외 처리 (공개 데이터)
  • 선박 모달 열 때마다 S&P Global 우선 탭 리셋 (MarineTraffic 포커스 유지 버그)
  • S&P Global 사진 URL: IMO 기반 이미지 목록 API 연동 (잘못된 번호 패턴 제거)
  • deploy.yml: SSH SCP+실행 각 3회 재시도 (kex_exchange 거부 대응)

기타

  • 로그인 화면 KCG 로고에 DEMO 문구 오버레이

[2026-03-17]

추가

  • 프론트엔드 모노레포 이관 (frontend/ 폴더 구조)
  • signal-batch API 연동 (한국 선박 실시간 위치 데이터)
  • Tailwind CSS 4 + CSS 변수 테마 시스템 (dark/light)
  • i18next 다국어 지원 (ko/en) — 28개 컴포넌트 적용
  • 레이어 패널 트리 구조 재설계 (카테고리별 온/오프, 접이식 범례)
  • Google OAuth 로그인 + DEV LOGIN 인증 우회 (개발 모드)
  • 선박 이미지 탭 전환 UI (signal-batch / MarineTraffic)
  • 백엔드 Spring Boot 3.2 스켈레톤 (JDK 21)
  • Google OAuth + JWT 인증 API (@gcsc.co.kr 도메인 제한)
  • 백엔드 항공기 수집기 (Airplanes.live + OpenSky, @Scheduled 60초 주기)
  • 인메모리 캐시 + PostGIS DB 적재 (향후 리플레이 지원)
  • GET /api/aircraft?region=iran|korea REST API
  • DB 마이그레이션: aircraft_positions 테이블 (geometry + GiST 인덱스)
  • 헤더 우측 사용자 프로필/이름 + 로그아웃 버튼
  • 로그인 화면 KCG 로고 적용 (kcg.svg)
  • 브라우저 탭 favicon/제목 변경 (kcg-dashboard-demo)
  • PostgreSQL 스키마 (events, news, osint, users, login_history)
  • Python FastAPI 분석서버 placeholder
  • Gitea Actions CI/CD 파이프라인 (main merge 시 자동 배포)
  • nginx 설정 (SPA + API 프록시 + 외부 API CORS 프록시)
  • systemd 서비스 (kcg-backend, JDK 21, 2~4GB 힙)

수정

  • 항공기 API 폴링 주기 15초/25초 → 60초 (Rate Limit 대응)
  • CORS: CorsFilter 최우선 순위 등록 (프로덕션 도메인 허용)
  • 프로덕션 빌드 시 console/debugger 자동 제거
  • CI/CD 워크플로우 전면 재구성: act 컨테이너(node:24) 환경 대응
  • CI 빌드 실패 해결: @rollup/rollup-darwin-arm64 직접 의존성 제거
  • 모노레포 pre-commit hook frontend/ 디렉토리 기준 실행

변경

  • JDK 17 → 21 업그레이드 (pom.xml, sdkmanrc, CI/CD, systemd)
  • 프론트엔드 REPLAY 모드: 외부 API 호출 제거, 샘플 데이터 전용
  • 프론트엔드 airplaneslive.ts / opensky.ts 삭제 (백엔드로 대체)
  • Vite 프록시에서 airplaneslive / opensky 항목 제거
  • deploy.yml: Gitea secrets → .env 파일로 백엔드 환경변수 배포
  • systemd/nginx: 배포 경로 /devdata/services/kcg/ 반영
  • 외부 API 호출 CORS 프록시 전환 (Airplanes.live, OpenSky, CelesTrak)
  • App.css 하드코딩 색상 → CSS 변수 토큰 전환 (테마 반응)
  • 선박 분류 체계 AIS shipTy 파싱 개선
  • 한국 선박 데이터 폴링 주기 15초 → 4분