AI 기반 불법조업 탐지·차단 플랫폼 (React 19 + MapLibre + deck.gl + Zustand + Tailwind CSS)
Go to file
htlee e5d123e4c5 feat(prediction): dark 의심 점수화 + transship 베테랑 관점 재설계
12h 누적 분석 결과 dark/transship이 운영 불가 수준으로 판정되어
탐지 철학을 근본부터 전환.

## dark 재설계: 넓은 탐지 + 의도적 OFF 의심 점수화

기존 "필터 제외" 방식에서 "넓게 기록 + 점수 산출 + 등급별 알람"으로 전환.
해경 베테랑 관점의 8가지 패턴을 가점 합산하여 0~100점 산출.

- P1 이동 중 OFF (gap 직전 SOG > 2kn)
- P2 민감 수역 경계 근처 OFF (영해/접속수역/특정조업수역)
- P3 반복 이력 (7일 내 재발) — 가장 강력
- P4 gap 후 이동거리 비정상 (은폐 이동)
- P5 주간 조업 시간 OFF
- P6 gap 직전 이상 행동 (teleport/급변)
- P7 무허가 선박 가점
- P8 장기 gap (3h/6h 구간별)
- 감점: gap 시작 위치가 한국 AIS 수신 커버리지 밖

완전 제외:
- 어구 AIS (GEAR_PATTERN 매칭, fleet_tracker SSOT)
- 한국 선박 (MMSI 440*, 441*) — 해경 관할 아님

등급: CRITICAL(70+) / HIGH(50~69) / WATCH(30~49) / NONE
이벤트는 HIGH 이상만 생성 (WATCH는 DB 저장만).

신규 함수:
- algorithms/dark_vessel.py: analyze_dark_pattern, compute_dark_suspicion
- scheduler.py: _is_dark_excluded, _fetch_dark_history (사이클당 1회 7일 이력 일괄 조회)

pipeline path + lightweight path 모두 동일 로직 적용.
결과는 features JSONB에 {dark_suspicion_score, dark_patterns,
dark_tier, dark_history_7d, dark_history_24h, gap_start_*} 저장.

## transship 재설계: 베테랑 함정근무자 기준

한정된 함정 자원으로 단속 출동을 결정할 수 있는 신뢰도 확보.

상수 재조정:
- SOG_THRESHOLD_KN: 2.0 → 1.0 (완전 정박만)
- PROXIMITY_DEG: 0.001 → 0.0007 (~77m)
- SUSPECT_DURATION_MIN: 60 → 45 (gap tolerance 있음)
- PAIR_EXPIRY_MIN: 120 → 180
- GAP_TOLERANCE_CYCLES: 2 신규 (GPS 노이즈 완화)

필수 조건 (모두 충족):
- 한국 EEZ 관할 수역 이내
- 환적 불가 선종 제외 (passenger/military/tanker/pilot/tug/sar)
- 어구 AIS 양쪽 제외
- 45분 이상 지속 (miss_count 2 사이클까지 용인)

점수 체계 (base 40):
- 야간(KST 20~04): +15
- 무허가 가점: +20
- COG 편차 > 45°: +20 (나란히 가는 선단 배제)
- 지속 ≥ 90분: +20
- 영해/접속수역 위치: +15

등급: CRITICAL(90+) / HIGH(70~89) / WATCH(50~69)
WATCH는 저장 없이 로그만. HIGH/CRITICAL만 이벤트.

pair_history 구조 확장:
- 기존: {(a,b): datetime}
- 신규: {(a,b): {'first_seen', 'last_seen', 'miss_count', 'last_lat/lon/cog_a/cog_b'}}
- miss_count > GAP_TOLERANCE_CYCLES면 삭제 (즉시 리셋 아님)

## event_generator 룰 교체

- dark_vessel_long 룰 제거 → dark_critical, dark_high (features.dark_tier 기반)
- transship 룰 제거 → transship_critical, transship_high (features.transship_tier 기반)
- DEDUP: ILLEGAL_TRANSSHIP 67→181, DARK_VESSEL 127→131, ZONE_DEPARTURE 127→89

## 공통 정리

- scheduler.py의 _gear_re 삭제, fleet_tracker.GEAR_PATTERN 단일 SSOT로 통합
2026-04-09 07:42:15 +09:00
.claude chore: .env.development → .example + pre-commit 모노레포 대응 2026-04-07 13:52:53 +09:00
.gitea/workflows feat: System Flow 뷰어 추가 (system-flow.html) — 102 노드, 133 엣지 2026-04-07 17:10:22 +09:00
.githooks chore: .env.development → .example + pre-commit 모노레포 대응 2026-04-07 13:52:53 +09:00
backend feat(backend): Role.colorHex 추가 + V017 migration 2026-04-08 10:52:36 +09:00
database/migration feat: S1 마스터 데이터 + prediction 기반 DB 스키마 (V008~V013) 2026-04-07 11:49:26 +09:00
deploy docs: 배포 문서 보강 + CI/CD 모노레포 수정 + CLAUDE.md 배포 섹션 2026-04-07 13:43:19 +09:00
docs docs: 릴리즈 노트 정리 (2026-04-08) 2026-04-08 13:42:41 +09:00
frontend fix(frontend): 아이콘 전용 버튼 접근 이름 누락 7곳 보완 2026-04-08 13:16:20 +09:00
prediction feat(prediction): dark 의심 점수화 + transship 베테랑 관점 재설계 2026-04-09 07:42:15 +09:00
.gitignore chore: .env.development.example → .env.example (서버 hook .env.* 차단 대응) 2026-04-07 13:54:22 +09:00
ATTRIBUTIONS.md chore: 팀 워크플로우 기반 초기 프로젝트 구성 2026-04-06 14:11:29 +09:00
CLAUDE.md docs: 디자인 시스템 SSOT 개발 지침 + 릴리즈 노트 갱신 2026-04-08 13:29:28 +09:00
Makefile feat: S2 prediction 분석 엔진 모노레포 이식 2026-04-07 12:56:51 +09:00
README.md chore: 팀 워크플로우 기반 초기 프로젝트 구성 2026-04-06 14:11:29 +09:00

AI 기반 불법조업 탐지·차단 플랫폼

해양경찰청 AIS 신호 기반 불법 조업 선박 탐지, 단속 의사결정 지원 플랫폼.

기술 스택

분류 기술 버전
프레임워크 React + TypeScript 19.2 / 5.9
번들러 Vite (Rolldown) 8.0
지도 MapLibre GL + deck.gl 5.22 / 9.2
차트 ECharts 6.0
상태관리 Zustand 5.0
스타일 Tailwind CSS + CVA 4.2 / 0.7
다국어 react-i18next ko / en
린트 ESLint (Flat Config) 10

실행

npm install
npm run dev      # 개발 서버
npm run build    # 프로덕션 빌드 (~480ms)
npm run lint     # ESLint 검사

프로젝트 구조

src/
├── lib/charts/       ECharts 공통 (BaseChart + 프리셋)
├── lib/map/          MapLibre + deck.gl (BaseMap + 레이어 + hooks)
├── lib/i18n/         다국어 (10 네임스페이스, ko/en)
├── lib/theme/        디자인 토큰 + CVA 변형
├── data/mock/        공유 더미 데이터 (7 모듈)
├── stores/           Zustand 스토어 (8개)
├── services/         API 서비스 샘플
├── shared/           공유 UI 컴포넌트
├── features/         도메인별 페이지 (13그룹, 31페이지)
├── app/              라우터, 인증, 레이아웃
└── styles/           CSS (Dark/Light 테마)

문서

문서 설명
docs/architecture.md 아키텍처 현황 (기술스택, 구조, 렌더링 최적화, 테마)
docs/sfr-user-guide.md SFR 사용자 가이드 (메뉴별 기능 설명, 구현/미구현 현황)
docs/sfr-traceability.md SFR 요구사항 추적 매트릭스 (개발자용, 소스 경로 포함)
docs/page-workflow.md 31개 페이지 역할 + 4개 업무 파이프라인
docs/data-sharing-analysis.md 데이터 공유 분석 + mock 통합 결과
docs/next-refactoring.md 다음 단계 TODO (API 연동, 실시간, 코드 스플리팅)

SFR 요구사항 대응 현황

20개 SFR 전체 UI 구현 완료. 백엔드 연동 대기 중.

SFR 기능 화면 상태
SFR-01 로그인·권한 관리 /login, /access-control UI 완료
SFR-02 환경설정·공지·공통 /system-config, /notices UI 완료
SFR-03 통합 데이터 허브 /data-hub UI 완료
SFR-04 AI 예측모델 관리 /ai-model UI 완료
SFR-05 위험도 지도 /risk-map UI 완료
SFR-06 단속 계획·경보 /enforcement-plan UI 완료
SFR-07 단일함정 순찰경로 /patrol-route UI 완료
SFR-08 다함정 경로최적화 /fleet-optimization UI 완료
SFR-09 Dark Vessel 탐지 /dark-vessel UI 완료
SFR-10 어구 탐지 /gear-detection UI 완료
SFR-11 단속·탐지 이력 /enforcement-history UI 완료
SFR-12 모니터링 대시보드 /dashboard, /monitoring UI 완료
SFR-13 통계·성과 분석 /statistics UI 완료
SFR-14 외부 서비스 연계 /external-service UI 완료
SFR-15 모바일 서비스 /mobile-service UI 완료
SFR-16 함정 Agent /ship-agent UI 완료
SFR-17 AI 알림 발송 /ai-alert UI 완료
SFR-18/19 MLOps / LLMOps /mlops UI 완료
SFR-20 AI Q&A 지원 /ai-assistant UI 완료