release: 2026-04-17.2 (5건 커밋) #75

병합
htlee develop 에서 main 로 5 commits 를 머지했습니다 2026-04-17 07:19:52 +09:00
소유자

[2026-04-17.2]

추가

  • 어구 정체성 충돌(GEAR_IDENTITY_COLLISION) 탐지 패턴 — 동일 어구 이름이 서로 다른 MMSI 로 같은 5분 사이클에 동시 AIS 송출되는 스푸핑/복제 의심 패턴을 신규 탐지. 공존(simultaneous)/교체(sequential) 경로 분리, 공존 쌍은 gear_identity_collisions 에 UPSERT (누적 횟수 · 최대 거리 · 양측 좌표 · evidence JSONB append). 심각도는 거리/누적/스왑 기반 CRITICAL/HIGH/MEDIUM/LOW 자동 재계산, 운영자 확정 상태(CONFIRMED_ILLEGAL/FALSE_POSITIVE)는 보존. CRITICAL/HIGH 승격 시 prediction_events 등록(dedup 367분). /api/analysis/gear-collisions READ + resolve 액션 @Auditable GEAR_COLLISION_RESOLVE. 메뉴 "어구 정체성 충돌" nav_sort=950
  • gearCollisionStatuses 카탈로그 — 4단계 Badge intent 매핑, catalogRegistry 등록으로 쇼케이스 자동 노출

변경

  • prediction 5분 사이클 안정화gear_correlation_scores_pkey 충돌로 InFailedSqlTransaction 이 매 사이클 발생해 이벤트 생성·분석 upsert 가 전부 스킵되던 문제 해소. target_mmsi 이전을 SAVEPOINT 로 격리, 공존 경로는 이전 시도 자체를 안 해 재발 방지

문서

  • 프로젝트 산출문서 2026-04-17 기준 정비 — architecture.md shared/components/ui 9개·i18n 갱신, sfr-traceability.md v3.0 재작성(531라인), sfr-user-guide.md 헤더+SFR-01/02/09/10/11/12/13/17 구현 현황 갱신, stale 3건(data-sharing-analysis / next-refactoring / page-workflow) 제거

배포 체크리스트

  • 로컬 검증: Flyway V030 자동 적용 · gear_identity_collisions DDL · auth_perm_tree 엔트리 · track_gear_identity UPSERT(INSERT+UPDATE+severity 재계산+evidence append) · 이벤트 승격(dedup) 모두 확인
  • CI/CD 프론트 자동 배포(Gitea Actions)
  • backend systemctl restart kcg-ai-backend (rocky-211) — Flyway V030 은 이미 kcgaidb 에 반영됨, 신규 controller 반영 위해 재시작 필요
  • prediction systemctl restart kcg-ai-prediction (redis-211) — 새 fleet_tracker 분기 + event_generator 훅 반영
  • 운영 로그 확인
    • redis-211 journalctl -u kcg-ai-prediction 에서 affinity score transfer failed / analysis cycle failed 소실
    • gear identity collisions: N pairs touched 정상 출력
    • curl /api/analysis/gear-collisions/stats?hours=48 JSON 응답
## [2026-04-17.2] ### 추가 - **어구 정체성 충돌(GEAR_IDENTITY_COLLISION) 탐지 패턴** — 동일 어구 이름이 서로 다른 MMSI 로 같은 5분 사이클에 동시 AIS 송출되는 스푸핑/복제 의심 패턴을 신규 탐지. 공존(simultaneous)/교체(sequential) 경로 분리, 공존 쌍은 `gear_identity_collisions` 에 UPSERT (누적 횟수 · 최대 거리 · 양측 좌표 · evidence JSONB append). 심각도는 거리/누적/스왑 기반 CRITICAL/HIGH/MEDIUM/LOW 자동 재계산, 운영자 확정 상태(CONFIRMED_ILLEGAL/FALSE_POSITIVE)는 보존. CRITICAL/HIGH 승격 시 `prediction_events` 등록(dedup 367분). `/api/analysis/gear-collisions` READ + resolve 액션 `@Auditable GEAR_COLLISION_RESOLVE`. 메뉴 "어구 정체성 충돌" nav_sort=950 - **gearCollisionStatuses 카탈로그** — 4단계 Badge intent 매핑, catalogRegistry 등록으로 쇼케이스 자동 노출 ### 변경 - **prediction 5분 사이클 안정화** — `gear_correlation_scores_pkey` 충돌로 `InFailedSqlTransaction` 이 매 사이클 발생해 이벤트 생성·분석 upsert 가 전부 스킵되던 문제 해소. `target_mmsi` 이전을 SAVEPOINT 로 격리, 공존 경로는 이전 시도 자체를 안 해 재발 방지 ### 문서 - **프로젝트 산출문서 2026-04-17 기준 정비** — architecture.md shared/components/ui 9개·i18n 갱신, sfr-traceability.md v3.0 재작성(531라인), sfr-user-guide.md 헤더+SFR-01/02/09/10/11/12/13/17 구현 현황 갱신, stale 3건(data-sharing-analysis / next-refactoring / page-workflow) 제거 --- ## 배포 체크리스트 - [x] 로컬 검증: Flyway V030 자동 적용 · `gear_identity_collisions` DDL · auth_perm_tree 엔트리 · track_gear_identity UPSERT(INSERT+UPDATE+severity 재계산+evidence append) · 이벤트 승격(dedup) 모두 확인 - [ ] CI/CD 프론트 자동 배포(Gitea Actions) - [ ] **backend `systemctl restart kcg-ai-backend` (rocky-211)** — Flyway V030 은 이미 kcgaidb 에 반영됨, 신규 controller 반영 위해 재시작 필요 - [ ] **prediction `systemctl restart kcg-ai-prediction` (redis-211)** — 새 fleet_tracker 분기 + event_generator 훅 반영 - [ ] 운영 로그 확인 - [ ] redis-211 `journalctl -u kcg-ai-prediction` 에서 `affinity score transfer failed` / `analysis cycle failed` 소실 - [ ] `gear identity collisions: N pairs touched` 정상 출력 - [ ] `curl /api/analysis/gear-collisions/stats?hours=48` JSON 응답
htlee added 5 commits 2026-04-17 07:19:08 +09:00
- docs/architecture.md: shared/components/ui 9개·i18n 네임스페이스 갱신
- docs/sfr-traceability.md: v3.0 전면 재작성 (운영 상태 기반 531 라인)
- docs/sfr-user-guide.md: 헤더 + SFR-01/02/09/10/11/12/13/17 구현 현황 갱신
- docs/data-sharing-analysis.md / next-refactoring.md / page-workflow.md: stale 3건 제거
동일 어구 이름이 서로 다른 MMSI 로 같은 5분 사이클에 동시 AIS 송출되는
공존 케이스를 신규 탐지 패턴으로 분리해 기록·분류한다. 부수 효과로
fleet_tracker.track_gear_identity 의 PK 충돌로 인한 사이클 실패도 해소.

Prediction
- algorithms/gear_identity.py: detect_gear_name_collisions + classify_severity
- fleet_tracker.py: 공존/교체 분기 분리, UPSERT helper, savepoint 점수 이전
- output/event_generator.py: run_gear_identity_collision_events 추가
- scheduler.py: track_gear_identity 직후 이벤트 승격 호출

Backend (domain/analysis)
- GearIdentityCollision 엔티티 + Repository(Specification+stats)
- GearIdentityCollisionService (@Transactional readOnly / @Auditable resolve)
- GearCollisionController /api/analysis/gear-collisions (list/stats/detail/resolve)
- GearCollisionResponse / StatsResponse / ResolveRequest (record)

DB
- V030__gear_identity_collision.sql: gear_identity_collisions 테이블
  + auth_perm_tree 엔트리(detection:gear-collision nav_sort=950) + 역할별 권한

Frontend
- shared/constants/gearCollisionStatuses.ts + catalogRegistry 등록
- services/gearCollisionApi.ts (list/stats/get/resolve)
- features/detection/GearCollisionDetection.tsx (PageContainer+Section+DataTable
  + 분류 액션 폼, design system SSOT 준수)
- componentRegistry + feature index + i18n detection.json / common.json(ko/en)
claude-bot 이 변경사항을 승인하였습니다. 2026-04-17 07:19:47 +09:00
claude-bot left a comment
멤버

릴리즈 승인 (via /release skill)

릴리즈 승인 (via /release skill)
htlee merged commit fafed8ccdf into main 2026-04-17 07:19:52 +09:00
"로그인하여 이 대화에 참여"
No reviewers
레이블 없음
마일스톤 없음
담당자 없음
참여자 2명
알림
마감일
기한이 올바르지 않거나 범위를 벗어났습니다. 'yyyy-mm-dd'형식을 사용해주십시오.

마감일이 설정되지 않았습니다.

의존성

No dependencies set.

Reference: gc/kcg-ai-monitoring#75
No description provided.