- 백엔드: backtrackAnalysisService 신규 개발
* AIS 기반 선박 항적 API 연동 및 공간 조회
* 공간(40%)/시간(25%)/행동(20%)/선박유형(15%) 가중치 위험도 점수 산정
* 상위 5척 리플레이 데이터 및 충돌 이벤트 생성
* Python 서버 미연동 시 폴백 메커니즘 제공
- 백엔드: 역추적 생성 시 동기 분석 → BacktrackResult 즉시 반환
- 프론트엔드: 모달에서 유출 시각/분석 범위/탐색 반경 직접 입력 가능
- 프론트엔드: 리플레이 바에 실제 분석 시간 범위 동적 표시
- DB: AIS_TRACK 테이블 신규 생성 (선박 항적 이력 + GIS 인덱스)
- aerialRouter/Service: stitch(이미지합성) + drone stream 기능 통합
- aerialService: IMAGE_API_URL(stitch) / OIL_INFERENCE_URL(inference) 분리
- aerialApi: stitchImages + DroneStream API 함수 공존
- MapView: analysis props(HEAD) + lightMode prop(INCOMING) 통합
- CctvView: 지도/리스트/그리드 3-way 뷰 채택 (INCOMING 확장)
- OilSpillView: analysis 상태 + 데모 자동 표시 useEffect 통합
- PredictionInputSection: POSEIDON/KOSPS 모델 추가 (ready 필드 포함)
- RightPanel: controlled props 방식 유지, 미사용 내부 상태 제거
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- KOSPS 모델 클릭 시 "준비중" alert 팝업
- 앙상블 모델 클릭 시 "준비중" alert 팝업
- 기본 선택 모델을 KOSPS → POSEIDON으로 변경
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 오염분석 버튼을 다각형 분석 / 원 분석으로 분리
- 다각형 분석: Convex Hull(Graham Scan) + Shoelace 알고리즘으로
확산 입자 외곽 다각형 면적(km²), 둘레(km), 꼭짓점 수 계산
- 원 분석: 향후 오픈 예정 팝업
- geo.ts에 convexHull, polygonAreaKm2, analyzeSpillPolygon 함수 추가
- OilSpillView → RightPanel에 oilTrajectory prop 전달
- 지도 범례에 최소화/펼치기 토글 버튼 추가
- CheckboxLabel 중복 className 경고 수정
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
고객요청사항 - 지도를 밝게 하거나, 선명하게 해서 확실히 구분해주세요.
- MapView에 lightMode prop 추가 및 해도 스타일(LIGHT_STYLE) 구현
- OpenFreeMap 벡터타일 기반: 육지(회색 #e8e8e8) + 바다(파랑 #a8cce0) 명확 구분
- 한글 지명 라벨 우선 표시 (name:ko → name 폴백)
- 도로/건물/경계선 회색 톤 통일, 해양 지명 이탤릭 표시
- 확산예측(OilSpillView)에 lightMode 적용
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 오염분석 섹션을 탭 UI로 개편 (다각형 분석 / 원 분석)
- 다각형 분석: 지도 클릭으로 꼭짓점 추가 후 분석 실행
- 원 분석: NM 프리셋 버튼(1·3·5·10·15·20·30·50) + 직접 입력, 사고지점 기준 자동 계산
- 분석 결과: 분석면적·오염비율·오염면적·해상잔존량·연안부착량·민감자원 개소 표시
- MapView: 다각형(PolygonLayer) / 원(ScatterplotLayer) 실시간 지도 시각화
- geo.ts: pointInPolygon, polygonAreaKm2, circleAreaKm2 유틸 함수 추가
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- prediction/image/ FastAPI 서버 Docker 환경 구성
- Dockerfile: PyTorch 2.1 + CUDA 12.1 기반 GPU 이미지
- docker-compose.yml: GPU 할당 + 데이터 볼륨 마운트
- requirements.txt: 서버 의존성 목록
- .env.example: 환경변수 템플릿
- DOCKER_USAGE.md: 빌드/실행/API 사용법 문서
- Dockerfile에 .dockerignore 제외 폴더 mkdir -p 추가
- .gitignore: prediction/image 결과물 및 모델 가중치(.pth) 제외 추가
- dbInsert_csv.py, dbInsert_shp.py 삭제 (미사용 DB 로직)
- api.py: dbInsert import 및 주석 처리된 DB 호출 코드 제거
- aerialRouter.ts: req.params 타입 오류 수정
- MapView: flyToIncident/onIncidentFlyEnd props 추가, moveend 이벤트 후 콜백 호출
- OilSpillView: 사고 지점 변경 시 flyTo 완료 후 재생(pendingPlayRef), 동일 지점은 즉시 재생
- opendrift/config.py: STORAGE_BASE 환경변수로 스토리지 경로 설정
- opendrift/dockerfile, .dockerignore 추가
- opendrift/createKmaImage.py 제거
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
[예측]
- OpenDrift Python API 서버 및 스크립트 추가 (prediction/opendrift/)
- 시뮬레이션 상태 폴링 훅(useSimulationStatus), 로딩 오버레이 추가
- HydrParticleOverlay: deck.gl 기반 입자 궤적 시각화 레이어
- OilSpillView/LeftPanel/RightPanel: 시뮬레이션 실행·결과 표시 UI 개편
- predictionService/predictionRouter: 시뮬레이션 CRUD 및 상태 관리 API
- simulation.ts: OpenDrift 연동 엔드포인트 확장
- docs/PREDICTION-GUIDE.md: 예측 기능 개발 가이드 추가
[CCTV/항공방제]
- CCTV 오일 감지 GPU 추론 연동 (OilDetectionOverlay, useOilDetection)
- CCTV 안전관리 감지 기능 추가 (선박 출입, 침입 감지)
- oil_inference_server.py: Python GPU 추론 서버
[관리자]
- 관리자 화면 고도화 (사용자/권한/게시판/선박신호 패널)
- AdminSidebar, BoardMgmtPanel, VesselSignalPanel 신규 컴포넌트
[기타]
- DB: 시뮬레이션 결과, 선박보험 시드(1391건), 역할 정리 마이그레이션
- 팀 워크플로우 v1.6.1 동기화
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
안전한 패턴 매칭으로 단독 color/background/fontWeight/fontSize/flex 스타일을
Tailwind 유틸리티 클래스로 변환. 혼합 style에서 개별 속성 추출은 제외하여
시각적 회귀 방지.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 확산분석: 오일 확산 방향 NE→SSW(200°)로 수정, 민감자원 여수 실제 좌표 적용
- 해류 화살표: 아이콘 ➤, 크기 22px, 투명도 증가, SSW 방향 동기화
- 통합조회: 선박/사고 마커 hover 시 다크 테마 툴팁 표시 (이름, 유형, 속도, 좌표)
- 선박 아이콘: SVG 삼각형 16×20 확대 + 글로우 효과 + pickable 전환
- vesselLayer(ScatterplotLayer 원형) 제거, vesselIconLayer로 통합
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- TextLayer: characterSet 'auto', NanumSquare 한글 폰트, outline 설정 (MapView, RealtimeDrone)
- 확산분석 탭: 진입 시 데모 궤적/방어선/민감자원 자동 로드 (useEffect + handleSelectAnalysis)
- SensorAnalysis: Vessel/Pollution 3DModel을 requestAnimationFrame 기반 360° 회전으로 전환
- 3D geometry useMemo 생성, Y축 회전 + X축 틸트, depth 기반 크기/밝기
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
항공탐색 탭:
- CctvView 크래시 수정 (cctvCameras → cameras 필드 매핑)
- AerialView 이중 서브메뉴 분기 → 플랫 switch 단순화
- SensorAnalysis SVG 300pt → Canvas 2D 5000/8000pt 고밀도 전환
- RealtimeDrone CSS 시뮬레이션 → MapLibre + deck.gl 실제 지도 전환
확산분석 탭:
- 시뮬레이션 백엔드 미구현 시 클라이언트 데모 궤적 fallback 생성
- AI 방어선 3개(직교차단/U형포위/연안보호) 자동 배치
- 민감자원 5개소(양식장/해수욕장/보호구역) deck.gl 레이어 표시
- 해류 화살표 11x11 그리드 TextLayer 추가
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
fetch('http://localhost:3001/...') → api.post('/simulation/run', ...)
배포 환경에서 CORS loopback 차단 문제 해결
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Board: 매뉴얼 CRUD + 첨부파일 API (012_board_ext.sql)
- HNS: 분석 CRUD 5개 API (013_hns_analysis.sql)
- Prediction: 분석/역추적/오일펜스 7개 API (014_prediction.sql)
- Aerial: 미디어/CCTV/위성 6개 API + PostGIS (015_aerial.sql)
- Rescue: 구난 작전/시나리오 3개 API + JSONB (016_rescue.sql)
- backtrackMockData.ts 삭제
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- HNS_SUBSTANCE 테이블 마이그레이션 SQL 추가 (002_hns_substance.sql)
- HNS 검색/상세 API 구현 (hnsRouter, hnsService)
- HNS 시드 스크립트 추가 (seedHns.ts, 20종 물질 데이터)
- 프론트엔드 HNSSubstanceView: 정적 HNS_SEARCH_DB → API 호출 전환
- HNSSearchSubstance 타입 common/types/hns.ts로 분리
- Mock 데이터 이동: data/ → common/mock/ (vesselMockData, backtrackMockData)
- layerDatabase.ts → common/services/layerService.ts 이동
- layerData.ts → common/data/layerData.ts 이동
- scat/index.ts 누락 수정 + .gitignore scat 규칙 수정
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 11개 탭 디렉토리 생성: tabs/{prediction,hns,rescue,weather,incidents,aerial,board,reports,assets,scat,admin}/
- 51개 컴포넌트를 역할 기반(views/, analysis/, layout/) → 탭 기반(tabs/) 구조로 이동
- weather 탭에 전용 hooks/, services/ 포함
- incidents 탭에 전용 services/ 포함
- 공통 지도 컴포넌트(MapView, BacktrackReplay)를 common/components/map/으로 이동
- 각 탭에 index.ts 생성하여 View 컴포넌트 re-export
- App.tsx import를 @tabs/ alias 사용으로 변경
- 전체 import 경로 수정 (탭 내부 상대경로, 외부 @common/ alias)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>