kcg-ai-monitoring/docs/RELEASE-NOTES.md
htlee 2eddd01d17 docs: 릴리즈 노트 정리 (2026-04-13)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 11:14:44 +09:00

16 KiB
Raw Blame 히스토리

Release Notes

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

[Unreleased]

[2026-04-13]

추가

  • LGCNS MLOps 메뉴 — 시스템관리 > AI 플랫폼 하위, 모델 레지스트리/학습 파이프라인/서빙 현황/모델 모니터링 탭 구성
  • AI 보안(SER-10) 메뉴 — 시스템관리 > 감사·보안 하위, AI 모델 보안 감사/Adversarial 공격 탐지/데이터 무결성 검증/보안 이벤트 타임라인
  • AI Agent 보안(SER-11) 메뉴 — 시스템관리 > 감사·보안 하위, 에이전트 실행 로그/정책 위반 탐지/자원 사용 모니터링/신뢰도 대시보드
  • V025 마이그레이션 — auth_perm_tree에 admin:lgcns-mlops, admin:ai-security, admin:ai-agent-security 노드 + ADMIN 역할 CRUD 권한 시드
  • prediction 알고리즘 재설계 — dark_vessel 의심 점수화(8패턴 0~100), transshipment 베테랑 재설계, vessel_store/scheduler 개선
  • 프론트엔드 지도 레이어 구조 정리 — BaseMap, useMapLayers, static layers 리팩토링

변경

  • NoticeManagement CRUD 권한 가드 — admin:notices CREATE/UPDATE/DELETE 체크 추가 (disabled + 툴팁)
  • EventList CRUD 권한 가드 — enforcement:event-list UPDATE + enforcement:enforcement-history CREATE 체크 추가 (disabled + 툴팁)

[2026-04-09.2]

추가

  • 워크플로우 연결 5단계 — 탐지→단속 관통 워크플로우 구현

    • VesselAnalysis 직접 조회 API 5개 (/api/analysis/*) — iran proxy 없이 prediction DB 직접 조회
      • vessels 목록 (필터: mmsi, zone, riskLevel, isDark)
      • vessels/{mmsi} 최신 분석 (features JSONB 포함)
      • vessels/{mmsi}/history 분석 이력 (24h)
      • dark 베셀 목록 (MMSI 중복 제거)
      • transship 의심 목록
    • EventList 인라인 액션 4종 — 확인(ACK)/선박상세/단속등록/오탐 처리
    • MMSI → VesselDetail 링크 — EventList, DarkVessel, EnforcementHistory 3개 화면
    • VesselDetail 전면 개편 — prediction 직접 API 전환, dark 패턴 시각화(tier/score/patterns), 환적 분석, 24h AIS 수신 타임라인, 단속 이력 탭
    • DarkVesselDetection prediction 전환 — iran proxy 제거, tier 기반 KPI/필터/정렬
    • EnforcementHistory eventId 역추적 — 단속→이벤트 역링크
    • EnforcementPlan 미배정 CRITICAL 이벤트 패널 — NEW 상태 CRITICAL 이벤트 표시
    • 모선추론 자동 연결 — CONFIRM→LabelSession, REJECT→Exclusion 자동 호출
    • 30초 자동 갱신 — EventList, DarkVessel (silentRefresh 패턴, 깜박임 없음)
  • admin 메뉴 4개 서브그룹 — AI 플랫폼/시스템 운영/사용자 관리/감사·보안

  • V018 마이그레이션 — prediction_events.features JSONB 컬럼

  • V019 마이그레이션 — ai-operations:llm-ops 권한 트리 항목

  • analysisApi.ts 프론트 서비스 (직접 조회 API 5개 연동)

  • PredictionEvent.features 타입 확장 (dark_tier, transship_score 등)

  • 메뉴 DB SSOT 구조화 — auth_perm_tree 기반 메뉴·권한·i18n 통합

    • auth_perm_tree에 메뉴 컬럼 추가 (url_path, label_key, component_key, nav_group, nav_sort)
    • labels JSONB 다국어 지원 ({"ko":"종합 상황판", "en":"Dashboard"}) — DB가 i18n SSOT
    • 보이지 않는 도메인 그룹 8개 삭제 (surveillance, detection 등) → 권한 트리 = 메뉴 트리 완전 동기화
    • 패널 노드 parent_cd 실제 소속 페이지로 수정 (어구식별→어구탐지, 전역제외→후보제외)
    • vessel:vessel-detail 권한 노드 제거 (드릴다운 전용, 인증만 체크)
    • 공유 리소스 분리: statistics:reports, admin:data-hub, admin:notices 독립 노드 생성
    • V020~V024 마이그레이션 5건
  • 프론트엔드 동적 메뉴/라우팅 — DB 기반 자동 구성

    • menuStore(Zustand) + componentRegistry(lazy loading) + iconRegistry
    • NAV_ENTRIES/PATH_TO_RESOURCE 하드코딩 제거
    • App.tsx DynamicRoutes: DB menuConfig에서 Route 자동 생성
    • MainLayout: DB menuConfig에서 사이드바 자동 렌더링
  • PermissionsPanel 개선 — DB labels 기반 표시명 + 페이지/패널 아이콘 구분 + 메뉴 순서 정렬

  • DB migration README.md 전면 재작성 — V001~V024, 49테이블, 149인덱스 실측 문서화

변경

  • event_generator.py INSERT에 features JSONB 추가 (이벤트에 분석 핵심 특성 저장)
  • @RequirePermission 12곳 수정 — 삭제된 그룹 rsrc_cd → 구체적 자식 리소스
  • EnforcementController vesselMmsi 필터 파라미터 추가
  • enforcement.ts getEnforcementRecords에 vesselMmsi 파라미터 추가

수정

  • /map-control labelKey 중복 해소 (nav.riskMap → nav.mapControl, "해역 관리")
  • system-flow 08-frontend.json 누락 노드 14개 추가

문서

  • i18n darkTier/transshipTier/adminSubGroup/mapControl 키 추가 (ko/en)

[2026-04-09]

추가

  • Dark Vessel 의심 점수화 — 기존 "gap≥30분→dark" 이분법에서 8가지 패턴 기반 0~100점 점수 산출 + CRITICAL/HIGH/WATCH/NONE 등급 분류
    • P1 이동 중 OFF / P2 민감 수역 / P3 반복 이력(7일) / P4 거리 비정상 / P5 주간 조업 OFF / P6 직전 이상행동 / P7 무허가 / P8 장기 gap
    • 한국 AIS 수신 커버리지 밖은 자연 gap 가능성으로 감점
    • 어구(gear) AIS, 한국 선박(440/441) dark 판정 완전 제외
    • features JSONB에 dark_suspicion_score, dark_patterns, dark_tier, dark_history_7d 등 저장
  • Transshipment 베테랑 관점 재설계 — 점수 기반 40~130점 판정 (CRITICAL/HIGH/WATCH)
    • SOG 2.0→1.0kn, 근접 110→77m, 지속 60→45분 + gap tolerance 2사이클
    • 한국 EEZ 관할 수역 이내 필수, 어구/여객/군함/유조 제외
    • 야간·무허가·COG편차·장기지속·영해위치 가점
    • pair_history 구조 확장: {'first_seen', 'last_seen', 'miss_count'} (GPS 노이즈 내성)

변경

  • stats_aggregator hourly: UTC→KST hour boundary 전환, by_category/by_zone JSONB 집계 추가
  • event_generator 룰 전면 재편:
    • EEZ_INTRUSION: 실측 zone_code(TERRITORIAL_SEA/CONTIGUOUS_ZONE/ZONE_*) 기반 신규 3룰
    • HIGH_RISK_VESSEL: risk.py CRITICAL 임계값과 동일(70점) 연동, 50~69점 MEDIUM 분리
    • DARK_VESSEL: features.dark_tier 기반 CRITICAL/HIGH 룰 (기존 gap>60 룰 교체)
    • ILLEGAL_TRANSSHIP: features.transship_tier 기반 CRITICAL/HIGH 룰 (기존 단순 룰 교체)
    • break 제거 → mmsi당 복수 카테고리 동시 매칭 가능
    • dedup 윈도우 prime 값 분산 (60/120/360→67/127/367 등, 정시 일제 만료 회피)
  • lightweight path 신호 보강: vessel_store 24h 궤적으로 dark/spoofing/speed_jump 산출
  • compute_lightweight_risk_score에 dark gap + spoofing 가점 추가 (max 60→100)
  • _gear_re 중복 제거 → fleet_tracker.GEAR_PATTERN SSOT 통합
  • AnalysisResult.to_db_tuple features sanitize: 중첩 dict/list 지원

수정

  • prediction_stats_hourly.by_category/by_zone 영구 NULL → 채움
  • prediction_stats_hourly.critical_count 영구 0 → CRITICAL 이벤트 수 반영
  • prediction_events 카테고리 2종(ZONE_DEPARTURE/ILLEGAL_TRANSSHIP)만 → 6종 이상
  • KPI dark_vessel/eez_violation 영구 0 → 정상 집계
  • 이벤트 홀수/짝수시 4~22배 진폭 → dedup prime 분산으로 완화
  • dark 과다 판정 해소: 핫픽스(한국 수신 영역 필터) + 2차(의심 점수화)
  • transship 과다 판정 해소: 사이클당 2,400~12,600 → CRITICAL/HIGH/WATCH 점수 기반

[2026-04-08]

추가

  • 디자인 시스템 쇼케이스 (/design-system.html) — UI 단일 진실 공급원(SSOT)
    • 별도 Vite entry, 메인 SPA와 분리 (designSystem-*.js 54KB)
    • 10개 섹션: Intro / Token / Typography / Badge / Button / Form / Card / Layout / Catalog / Guide
    • 추적 ID 체계 TRK-<카테고리>-<슬러그> (예: TRK-BADGE-critical-sm)
    • 호버 시 툴팁, "ID 복사 모드", URL 해시 딥링크 #trk=...
    • 단축키 A로 다크/라이트 토글
    • 한글/영문 라벨 병기로 카탈로그 검토 용이
  • 신규 공통 컴포넌트:
    • Button (5 variant × 3 size = 15) @shared/components/ui/button
    • Input / Select / Textarea / Checkbox / Radio @shared/components/ui/
    • TabBar / TabButton (underline / pill / segmented 3 variant) @shared/components/ui/tabs
    • PageContainer (size sm/md/lg + fullBleed) @shared/components/layout/PageContainer
    • PageHeader (icon + title + description + demo + actions) @shared/components/layout/PageHeader
    • Section (Card 단축) @shared/components/layout/Section
  • 중앙 레지스트리:
    • catalogRegistry.ts — 23개 카탈로그 메타 (id/title/description/source/items 자동 enumerate)
    • variantMeta.ts — Badge intent 8종 + Button variant 5종 의미 가이드
    • statusIntent.ts — 한글/영문 ad-hoc 상태 → BadgeIntent + getRiskIntent(0~100)
  • 4 catalog에 intent 필드 추가: eventStatuses / enforcementResults / enforcementActions / patrolStatuses + getXxxIntent() 헬퍼
  • UI 공통 카탈로그 19종 (frontend/src/shared/constants/) — 백엔드 enum/code_master 기반 SSOT
    • violation/alert/event/enforcement/patrol/engine/userRole/device/parentResolution/ modelDeployment/gearGroup/darkVessel/httpStatus/userAccount/loginResult/permission/ vesselAnalysis/connection/trainingZone + kpiUiMap
    • 표준 API: get{Cat}Intent(code), get{Cat}Label(code, t, lang), get{Cat}Classes/Hex
  • 시맨틱 텍스트 토큰 (theme.css @layer utilities) — Tailwind v4 복합 이름 매핑 실패 대응
    • text-heading/label/hint/on-vivid/on-bright, bg-surface-raised/overlay 직접 정의
  • Badge 시스템 재구축 — CVA 기반 8 intent × 4 size (rem), !important 제거
  • cn() 유틸 (lib/utils/cn.ts) — clsx + tailwind-merge, 시맨틱 토큰 classGroup 등록
  • ColorPicker 컴포넌트 — 팔레트 grid + native color + hex 입력
  • Role.colorHex (백엔드 V017 migration) — auth_role.color_hex VARCHAR(7), 빌트인 5개 역할 기본 색상 시드
  • System Flow 뷰어 (/system-flow.html) — 시스템 전체 데이터 흐름 시각화
    • 102 노드 + 133 엣지, 10개 카테고리 매니페스트
    • stage/menu 두 가지 그룹화 토글, 검색/필터/딥링크 지원
    • 포커스 모드 (1-hop 연결 노드만 활성화, 나머지 dim)
    • 메인 SPA와 분리된 별도 entry, 산출문서 노드 ID 참조용
    • /version 스킬 사후 처리로 manifest version 자동 동기화
    • CI/CD에서 버전별 스냅샷을 서버 archive에 영구 보존
  • 백엔드 GET /api/stats/hourly?hours=24 — 시간별 통계 조회 (PredictionStatsHourly)
  • V014 prediction 보조 테이블 12개 (fleet_vessels, gear_correlation_scores 등)
  • V015 NUMERIC precision 일괄 확대 (score→7,4, pct→12,2)
  • V016 parent workflow 누락 컬럼 일괄 추가 (17+ 컬럼, candidate_mmsi generated column)

변경

  • 35+ feature 페이지 PageContainer/PageHeader 마이그레이션 — admin/detection/enforcement/field-ops/patrol/statistics/ai-operations/parent-inference/dashboard/monitoring/surveillance/vessel/risk-assessment 전체
  • VesselDetail -m-4 negative margin 해킹 → <PageContainer fullBleed> 정리
  • LiveMapView fullBleed 패턴 적용
  • Badge intent 팔레트 테마 분리: 라이트(파스텔 bg-X-100 text-X-900) + 다크(translucent bg-X-500/20 text-X-400)
  • 40+ 페이지 Badge/시맨틱 토큰 마이그레이션
    • Badge className 직접 작성 → intent/size prop 변환
    • 컬러풀 액션 버튼 → text-on-vivid (흰색), 검색/필터 버튼 → bg-blue-400 text-on-bright
    • ROLE_COLORS 4곳 중복 제거 → getRoleBadgeStyle() 공통 호출
    • PermissionsPanel 역할 생성/수정에 ColorPicker 통합
  • DataTable width 의미 변경: 고정 → 선호 최소 너비 (minWidth), 컨텐츠 자동 확장 + truncate
  • dateFormat.ts sv-SE 로케일로 YYYY-MM-DD HH:mm:ss 일관된 KST 출력
  • MonitoringDashboard PagePagination 제거 (데이터 페이지네이션 오해 해소)

수정

  • 접근성 (WCAG 2.1 Level A) — axe DevTools 위반 전수 처리:
    • <Select> 컴포넌트 TypeScript union 타입으로 aria-label/aria-labelledby/title 컴파일 강제
    • 네이티브 <select> 5곳 aria-label
    • 아이콘 전용 <button> 16곳 aria-label
    • <input>/<textarea> 28곳 aria-label (placeholder 자동 복제 포함)
    • AIModelManagement 토글 → role="switch" + aria-checked
  • Badge className 위반 37건 전수 제거<Badge intent="..."> 패턴으로 통일
  • 하드코딩 bg-X-500/20 text-X-400 56곳 제거 — 카탈로그 API + intent 사용
  • 인라인 <button> type 누락 86곳 보정
  • CSS Safari 호환성: backdrop-filter -webkit- prefix 추가 (디자인 쇼케이스)
  • trk-pulse keyframe outline-color → opacity (composite-only 최적화)
  • Dashboard RiskBar 단위 버그 (0~100 정수를 *100 하던 코드 → 범위 감지)
  • ReportManagement, TransferDetection p-5 space-y-4 padding 복구
  • EnforcementHistory 그리드 minmax 적용으로 컬럼 잘림 해소
  • timeline 시간 formatDateTime 적용 (ISO T 구분자 처리)
  • prediction e2e 5가지 이슈 수정 (2026-04-08)
    • gear_correlation: psycopg2 Decimal × float TypeError → _load_all_scores() float 변환
    • violation_classifier: (mmsi, analyzed_at) 기준 UPDATE + 중국선박 EEZ 판정 로직
    • kpi_writer / stats_aggregator: UTC → KST 날짜 경계 통일
    • parent workflow 스키마 ↔ 코드 불일치 → V016로 일괄 해결
  • DemoQuickLogin hostname 기반 노출 (Gitea CI .env 차단 대응)
  • 프론트 전수 mock 정리: eventStore.alerts, enforcementStore.plans, transferStore 완전 제거
  • Dashboard/MonitoringDashboard/Statistics 하드코딩 → 실 API 전환
  • UTC → KST 시간 표시 통일 (@shared/utils/dateFormat.ts 공통 유틸)
  • i18n group.parentInference JSON 중복키 제거
  • RiskMap Math.random() 격자 제거, MTIS 라벨 + "AI 분석 데이터 수집 중" 안내
  • 12개 mock 화면에 "데모 데이터" 노란 배지 추가

[2026-04-07]

추가

  • 모노레포 구조 전환 (frontend/ + backend/ + prediction/ + database/)
  • Spring Boot 백엔드 초기화 + Flyway DB 마이그레이션 (V001~V013)
  • 자체 인증 시스템 (JWT + 트리 기반 RBAC + 감사로그 + 데모 계정)
  • 모선 워크플로우 + 관리자 화면 + 권한 라우트 가드
  • 권한 관리 UI 고도화 (트리 RBAC PermissionsPanel)
  • iran 백엔드 실연결 + 시스템 상태 + AI 채팅 기반 구현
  • 마스터 데이터 + prediction 기반 DB 스키마 (V008~V013)
  • 백엔드 API — 이벤트/통계/단속/마스터 데이터 CRUD
  • prediction 분석 엔진 모노레포 이식 (14개 알고리즘, 7단계 파이프라인)
  • prediction 출력 모듈 5종 (이벤트/위반/KPI/통계/경보)
  • alerts API + AIAlert/Dashboard 위험선박 실데이터 전환
  • VesselDetail + LiveMapView 실데이터 전환
  • 프론트 15개 화면 실데이터 연동 (EventList, Statistics, Dashboard 등)
  • 배포 환경 구성 (rocky-211 백엔드 + redis-211 prediction + nginx 프록시)

수정

  • prediction_stats_monthly.stat_month CHAR(7) → DATE 타입 변경
  • 권한 트리 UX 개선 + 라벨 사이드바 일치 + EXPORT 가드

변경

  • 시스템 관리 페이지 백엔드 연결 + 메트릭 카드

문서

  • 배포 문서 보강 + CI/CD 모노레포 수정

기타

  • 팀 워크플로우 초기화 + Prettier + 타입 에러 수정
  • .env 파일 서버 정책 준수 + pre-commit 모노레포 대응