- 백엔드: 관할서 목록 API, zone 필터링 쿼리 추가
- 프론트: ScatLeftPanel 관할서 드롭다운, ScatMap/ScatPopup 개선
- 기상탭: WeatherRightPanel 리팩토링
- prediction/scat: PDF 파싱 → 지오코딩 → ESI 매핑 파이프라인
- vite.config: proxy 설정 추가
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- prediction: 커스텀 다크 캘린더/시간 드롭다운, DMS 좌표 입력, 모델 버튼 3열 배치
- incidents: 밝은 지도 테마, 해양환경관리법 제22조 기반 오염물 배출규정 기능
- 지도 클릭시 영해기선 거리별 배출 가능 여부 표시 (OSM 실측 좌표 기반)
- 3해리/12해리/25해리 경계선 표시
- weather: 기상 범례 사이즈 축소 + 폰트 축소
- map: 풍속/파고/수온/해류 패널 축소·투명화, 확대/축소 버튼 축소, 좌표 중앙 배치
- map: 범례 기본 접힌 상태
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- MMSI 선종 불일치 탐지: AIS 등록 선종 vs AI 영상 분석 선종 비교, 지도 위 위치 표시
- 변화 감지: AS-IS/현재 시점 복합 정보원(위성/CCTV/드론/AIS) 오버레이 비교
- 연안자동감지: 지도 폴리곤 드로잉으로 감시 구역 등록, 주기/모니터링 방법 설정
- 위성요청 라벨 '위성영상'으로 변경, 서브탭 순서 재배치
- aerial:spectral 권한 트리 마이그레이션 추가 (022)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Mapbox placeholder → VWorld 위성 타일(WMTS) 실제 영상으로 교체
- 완료 항목 클릭 시 해당 지역에 위성 영상 레이어 오버레이
- 선택 지점에 📷 마커 표시
- VWorld API 키 환경변수(VITE_VWORLD_API_KEY) 연동
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 더보기/접기 토글 제거
- 페이지당 5건 표시 + ◀ 1 2 ▶ 페이지 네비게이션
- "총 N건 중 1–5" 현재 범위 표시
- 필터 변경 시 전체 목록 대상 페이징 적용
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 전체 요소 높이 h-7(28px)로 통일
- 상단 패딩 py-2→pt-1, 아이콘 w-8→w-7, 텍스트 13px→12px
- 탭 버튼 py-1.5→h-full, 새요청 py-2→h-7
- 헤더 하단 마진 mb-2 유지
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 헤더(🛰 위성 촬영 요청) + 탭(요청목록/히스토리지도) + 새요청 버튼을 한 줄로 통합
- 지도 뷰 높이 calc(100vh - 160px)로 확대하여 영상 중첩 표시 공간 확보
- 헤더/탭 사이즈 축소로 컴팩트 레이아웃
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 좌상단: 캘린더(date picker) + 촬영 이력 있는 날짜 바로가기 버튼
- 날짜 선택 시 해당일 촬영 내역만 필터링하여 리스트 표시
- 완료 항목 클릭 시 지도에 위성 영상 오버레이 표시 (이미지 레이어)
- 선택된 구역 폴리곤 하이라이트 (두꺼운 테두리 + 진한 채움)
- 하단 상세 정보 바: 구역명, 위성, 해상도, 좌표, 영상 표출 상태
- 요청일자를 2026-03 기준으로 업데이트 + dateKey 필드 추가
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- SatRequest status에 '취소' 상태 추가
- 필터 탭에 '취소' 추가
- 대기/촬영중 상태 모두 취소 가능 (confirm 팝업)
- 취소된 요청은 빨간 ✕ 배지 + 투명도 60%
- satRequests를 상태(state)로 관리하여 실시간 상태 변경
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 모달 높이 85vh 고정 (max-h → height)
- 지도 영역 minHeight 350px 보장
- Optical/SAR/Elevation 탭 전환 시 지도 크기 일정 유지
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 백엔드: GET /api/aerial/satellite/passes — 한국 주변 위성 패스 시뮬레이션
UP42 API 연동 준비 (Workspace ID: b9bc92ae, TODO 주석)
6개 위성 궤도 데이터 (KOMPSAT-3A, Pléiades Neo, Sentinel-1/2, WV-3, SkySat)
- 프론트 API: fetchSatellitePasses() + SatellitePass 인터페이스
- UP42 모달: MapLibre 지도에 위성 궤도 라인 실시간 표시
한국 영역 AOI 점선 박스 + 궤도별 색상 구분
위성 클릭 시 해당 궤도 하이라이트 (나머지 투명)
- 패스 타임라인: 통과 시각, 해상도, 앙각, 상승/하강 방향, 긴급도 표시
- 궤도 범례 오버레이 추가
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 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>
- 함정: MarineTraffic 스타일 삼각형 (선수 방향 위, 상태색 채움)
- 드론: 쿼드콥터 아이콘 (X자 팔 + 프로펠러 회전 애니메이션 + 카메라 렌즈)
- 함정↔드론 점선 연결선 유지
- 송출중 REC LED 깜빡임, 드론 모델명 라벨
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 함정: 삼각형 아이콘 + 함정명 라벨 (좌하단)
- 드론: 원형 아이콘 (십자 프로펠러 + 본체 + 카메라 렌즈) (우상단)
- 함정↔드론 점선 연결선으로 소속 관계 표시
- 상태별 색상: 송출중(초록), 연결중(시안), 오류(빨강), 대기(회색)
- 송출중 드론 빨간 LED 깜빡임 유지
- 드론 모델명 라벨 (M300/M30T/Mavic3E)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 드론 미선택 시 MapLibre 지도에 드론 위치 표시 (부산/인천/목포)
- 드론 SVG 아이콘 (본체+팔4개+프로펠러+카메라, 상태별 색상)
- 송출중 드론은 빨간 LED 깜빡임 애니메이션
- 드론 클릭 → 다크 팝업 (함정명, 드론모델, IP, 상태)
대기중: "스트림 시작" 버튼 / 송출중: "영상 보기" 버튼
- 스트림 선택 시 자동으로 영상 그리드로 전환
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- PredictionCard를 StatBox와 동일한 가로 레이아웃(라벨-값)으로 변경
- 폰트 사이즈 text-xs → text-[9px]로 축소하여 오염 종합 상황과 일치
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- KOSPS 모델 클릭 시 "준비중" alert 팝업
- 앙상블 모델 클릭 시 "준비중" alert 팝업
- 기본 선택 모델을 KOSPS → POSEIDON으로 변경
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 다각형/원 분석 탭 버튼 사이즈 축소 + 활성 탭 스타일 통일
- 다각형 분석: 설명 텍스트 + 그라데이션 "다각형 분석수행" 버튼
- 원 분석: 반경(NM) 프리셋 버튼(1,3,5,10,15,20,30,50) + 직접 입력
사고지점 기준 원형 영역 면적 계산 (NM² + km²)
- 분석 결과: NM²/km² 면적, 원 둘레, 반경 표시
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 원 분석 버튼 클릭 시 입력 폼 토글 (중심 위도, 경도, 반경 km)
- 사고 지점 좌표를 기본값으로 자동 설정
- πr² 면적, 2πr 둘레 계산 결과 표시
- 결과: 오염 면적(km²), 원 둘레(km), 반경(km), 중심 좌표
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>
- AI 자동 추천: 클릭 시 "향후 오픈 예정" 팝업 표시
- 수동 배치 탭 제거
- 시뮬레이션: V자형 오일붐 자동 배치 + 차단 시뮬레이션 통합 실행
알고리즘 설정(해류 직교 보정, 안전 마진, 최소 차단 효율, 파고 보정) 시뮬레이션 탭 내 통합
- 초기화: 확인 팝업 추가 (오일펜스만 초기화, 확산예측 결과 유지)
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>
- KBS 재난안전포탈 CCTV를 iframe에서 HLS 직접 재생으로 전환
- 백엔드 KBS HLS 리졸버 엔드포인트 추가 (/api/aerial/cctv/kbs-hls/:cctvId/stream.m3u8)
- KBS API 3단계 리졸브: 팝업API → loomex API → m3u8 (5분 캐시)
- CCTV 미선택 시 MapLibre 지도에 마커 표시 + 팝업 영상 선택
- 우측 미니맵을 실제 MapLibre 지도로 교체
- KBS API 정확 좌표로 19개 CCTV 업데이트 + 신규 2건 추가 (울산 달동, 제주 도남동)
- PredictionInputSection 중복 className 수정
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>
## Summary
- 기상 맵 컨트롤 컴포넌트 추가 및 KHOA API 연동 개선
- KHOA API 엔드포인트 교체 및 해양예측 오버레이 Canvas 렌더링 전환
## 변경 파일
- OceanForecastOverlay.tsx
- WeatherMapOverlay.tsx
- WeatherView.tsx
- useOceanForecast.ts
- khoaApi.ts
- vite.config.ts
## Test plan
- [ ] 기상정보 -> 기상 레이어 -> 해황 예보도 클릭 -> 이미지 렌더링 확인
- [ ] 기상정보 -> 기상 레이어 -> 백터 바람 클릭 -> 백터 이미지 렌더링 확인
Co-authored-by: Nan Kyung Lee <nankyunglee@Nanui-Macmini.local>
Reviewed-on: #78
Co-authored-by: leedano <dnlee@gcsc.co.kr>
Co-committed-by: leedano <dnlee@gcsc.co.kr>
- 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>
- UsersPanel: 테이블+페이징+등록모달+상세모달(비밀번호초기화/잠금해제)
- PermissionsPanel: 사용자별 역할 할당 탭 추가
- BoardMgmtPanel: 공지사항/게시판/QNA 관리자 일괄 삭제
- VesselSignalPanel: VTS/VTS-AIS/V-PASS/E-NAVI/S&P AIS 타임라인 모니터링
- AdminSidebar/AdminPlaceholder/adminMenuConfig 신규
- 권한 미들웨어 부모 리소스 fallback 로직 추가
- 조직 목록 API, 관리자 삭제 API 추가
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
해양수산부 공공데이터(유류오염보장계약관리) 1,391건을 SHIP_INSURANCE 테이블에 임포트하고,
백엔드 API 및 프론트엔드 ShipInsurance 컴포넌트를 실제 DB 데이터 기반으로 전환.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- useSubMenu에 scat 서브메뉴 설정 추가 (survey, distribution, pre-scat)
- ScatView wrapper 컴포넌트로 서브탭 분기 처리
- SurveyView, DistributionView placeholder 컴포넌트 생성
- hasPermission에 부모 리소스 fallback 로직 추가 (scat:survey → scat)
- App.tsx에서 PreScatView → ScatView 교체
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 방제선/유회수기/이송펌프/방제차량/살포장치 장비 필터 드롭다운 추가
- 페이지네이션 위 합계 행에 필터된 기관의 장비별 총합 표시
- 장비 필터 선택 시 해당 컬럼 헤더/셀/합계 항목 cyan 하이라이트
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 152개 기관 방제장비 현황 엑셀 데이터 DB 마이그레이션 (018)
- 연락처 탭에 기관 기본 정보(기관명, 유형, 관할청, 주소, 대표 연락처) 섹션 추가
- 담당자 목록에 직책/담당자명/연락처 표시 및 cyan 색상 강조
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
CCTV 실시간 영상:
- CCTVPlayer 컴포넌트 (hls.js 기반 HLS/MJPEG/MP4 재생)
- 백엔드 HLS 프록시 엔드포인트 (CORS 우회, m3u8 URL 재작성)
- KHOA 15개 + KBS 6개 실제 해안 CCTV 연동
- Vite dev proxy, 스트림 타입 자동 감지 유틸리티
HNS 분석:
- HNS 시나리오 저장/불러오기/재계산 기능
- 물질 DB 검색 및 상세 정보 연동
- 좌표/파라미터 입력 UI 개선
- Python 확산 모델 스크립트 (hns_dispersion.py)
공통:
- 3D 지도 토글, 보고서 생성 개선
- useSubMenu 훅, mapUtils 확장
- ESLint set-state-in-effect 수정
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
기존 HTML Blob → .doc 저장 방식을 OWPML 표준 HWPX(ZIP+XML) 포맷으로 교체.
JSZip으로 HWPX 파일을 순수 브라우저에서 생성하여 한글에서 직접 열 수 있도록 구현.
- hwpxExport.ts 신규: HWPX ZIP 패키징 (mimetype, header.xml, section0.xml 등)
- reportUtils.ts: exportAsHWP → dynamic import로 HWPX 위임
- ReportsView.tsx, TemplateFormEditor.tsx: 구조화 데이터 직접 전달
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- className 중복 속성 31건 수정 (12파일)
- KOSPS codeBox spread TypeError 해결
- HNS 페놀(C₆H₅OH) 물질 데이터 추가
- ScatRightPanel 280px 우측 패널 신규 구현 (3탭+액션버튼)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
대형 파일 집중 변환:
- SatelliteRequest: 134→66 (hex 색상 일괄 변환)
- IncidentsView: 141→90, MediaModal: 97→38
- HNSScenarioView: 78→38, HNSView: 49→31
- LoginPage, MapView, PredictionInputSection 등 중소 파일 8개
변환 패턴: hex 색상→text-[#hex], CSS 변수→Tailwind 유틸리티,
flex/grid/padding/fontSize/fontWeight/overflow 등 정적 속성 className 이동
Co-Authored-By: Claude Opus 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>
- scatDetailData는 scatConstants에 없는 export — import 제거, seg.id 직접 사용
- deck.gl → @loaders.gl/worker-utils가 Node.js child_process.spawn 참조하나
브라우저에서 미사용 코드 경로이므로 shimMissingExports: true로 해결
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- App.tsx: 중복 API_BASE_URL 정의 → @common/services/api import
- MapView.tsx: GeoServer localhost:8080 → VITE_GEOSERVER_URL 환경변수
- ShipInsurance.tsx: 해운조합 API URL → VITE_HAEWOON_API_URL 환경변수
- server.ts CORS: 운영 도메인 → FRONTEND_URL 환경변수 통합
- server.ts CSP: localhost 허용을 개발 환경(NODE_ENV≠production)에만 적용
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>
ACDNT_WEATHER 테이블의 실제 컬럼명에 맞게 weather 쿼리 수정
(WEATHER_DTM→OBS_DTM, WIND_SPD→WIND 등 존재하지 않는 컬럼 참조 제거)
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>
- PostGIS GEOMETRY 컬럼 추가 (010_postgis_geom.sql)
- ASSET_ORG.GEOM (84건), ACDNT.LOC_GEOM (12건) + GIST 인덱스
- SCAT 테이블 생성 + 시드 (011_scat.sql)
- CST_SRVY_ZONE 28건, CST_SECT 1,092건, 상세 21건
- GEOMETRY 컬럼 + GIST 공간 인덱스
- 백엔드 API: GET /api/scat/zones, /sections, /sections/:sn
- 프론트엔드: Mock 데이터 완전 제거, API 호출로 전환
- 에러 상태 UI, USE_YN 논리삭제 조건 적용
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 기상 API URL http:// → https:// 변경 (KHOA, data.go.kr)
- deploy.yml에 VITE_DATA_GO_KR_API_KEY, VITE_WEATHER_API_KEY 환경변수 추가
- Gitea Actions Secrets에 DATA_GO_KR_API_KEY, AIS_API_KEY 등록 완료
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- DB: ACDNT, SPIL_DATA, PRED_EXEC, ACDNT_WEATHER, ACDNT_MEDIA 5개 테이블 생성
- 시드: 사고 12건, 유출정보 12건, 예측실행 18건, 기상 6건, 미디어 6건
- 백엔드: incidentsService + incidentsRouter (사고 목록/상세/예측/기상/미디어 5개 API)
- 프론트: IncidentsView, IncidentTable, IncidentsLeftPanel, MediaModal mock → API 전환
- mockIncidents, WEATHER_DATA, MEDIA_DATA 3개 mock 완전 제거
- SECTION_DATA, MOCK_SENSITIVE, mockVessels는 별도 도메인으로 유지
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- DB 스키마: ASSET_ORG, ASSET_EQUIP, ASSET_CONTACT, ASSET_UPLOAD_LOG 4개 테이블
- 초기 데이터: 84개 기관, 469개 장비, 86개 담당자 시드
- 백엔드: assetsService + assetsRouter (기관 목록/상세/업로드이력 3개 API)
- 프론트: AssetManagement, AssetMap, AssetUpload mock → API 호출 전환
- ShipInsurance: 외부 API 의존 데모 데이터 컴포넌트 내부 상수로 이동
- assetMockData.ts 의존성 완전 제거
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- DB 마이그레이션 007_reports.sql: 7개 테이블 (REPORT_TMPL, REPORT_TMPL_SECT,
REPORT_ANALYSIS_CTGR, REPORT_CTGR_SECT, REPORT, REPORT_SECT_DATA 등)
+ 초기 데이터 (5개 템플릿, 3개 카테고리, 섹션 정의)
- 백엔드 reportsService.ts: 템플릿/카테고리 조회, 보고서 CRUD, 섹션 UPSERT
- 백엔드 reportsRouter.ts: GET/POST only 패턴 (보안취약점 가이드 준수)
- GET /api/reports, GET /api/reports/:sn (조회)
- POST /api/reports (생성), POST /:sn/update (수정), POST /:sn/delete (삭제)
- POST /:sn/sections/:sectCd (개별 섹션 수정)
- 프론트 reportsApi.ts: API 호출 + OilSpillReportData ↔ API 변환 + 캐싱
- 프론트 4개 컴포넌트 localStorage → API 전환:
ReportsView, OilSpillReportTemplate, TemplateFormEditor, ReportGenerator
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- BoardView.tsx: initialPosts mock 제거, fetchBoardPosts API로 전환
- 서브탭별 카테고리 필터링 (NOTICE/DATA/QNA)
- 실제 페이지네이션 (totalCount 기반)
- hasPermission 기반 글쓰기 버튼 조건부 노출
- BoardWriteForm.tsx: createBoardPost/updateBoardPost API 직접 호출
- 카테고리 코드 DB 규격 (NOTICE/DATA/QNA) 사용
- 작성자 입력 필드 제거 (JWT 인증 사용자 자동 설정)
- BoardDetailView.tsx: fetchBoardPost API로 상세 조회
- 본인 게시글만 수정/삭제 버튼 노출 (authorId 비교)
- 댓글 mock 제거, 향후 구현 예정 안내 표시
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- ../../../data/layerData → @common/data/layerData
- ../../../data/layerDatabase → @common/services/layerService
- MR#23 파일 이동 후 서브컴포넌트에 반영 누락된 import 경로 수정
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- wing + wing_auth DB를 wing 단일 DB로 통합 (wing/auth 스키마 분리)
- wingPool 단일 Pool + search_path 설정, authPool 하위 호환 유지
- 게시판 BOARD_POST DDL + 초기 데이터 10건 마이그레이션
- boardService/boardRouter CRUD 구현 (페이징, 검색, 소유자 검증, 논리삭제)
- requirePermission 카테고리별 서브리소스 동적 적용 (board:notice, board:qna 등)
- 프론트엔드 boardApi 서비스 + BoardListTable mock→API 전환
- CRUD-API-GUIDE (범용 가이드 + 게시판 튜토리얼) 문서 작성
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>