# RELEASE-NOTES WING-OPS 프로젝트의 전체 변경 이력. [Keep a Changelog](https://keepachangelog.com/ko/1.0.0/) 형식 기반, Phase 단위로 기록. --- ## DB DDL 현행화 (2026-03-01) database/ 디렉토리를 운영 DB 기준으로 전면 재정리하고, wing_auth → auth 스키마 문서 수정. ### Added - `database/schema/` ERD용 순수 DDL 14파일 (운영 DB pg_dump 기반) - `00_extensions.sql` ~ `13_indexes.sql` (FK 의존성 순서) - `database/seed/` 초기 데이터 INSERT 14파일 - `database/README.md` (DB 아키텍처, 설치 절차, PostGIS 컬럼 참조) ### Changed - wing_auth → auth 스키마 표기 전면 수정 (docs/ 6개 + README + CLAUDE.md) - AUTH_DB_* 환경변수 참조 → DB_* 단일 구조로 통일 - DB 아키텍처 설명: wing 단일 DB + 3개 스키마 (public/auth/wing) ### Deprecated - `database/init.sql`, `database/auth_init.sql` → `_deprecated/`로 이동 ### PR - PR#62 (feature/css-refactoring → main) --- ## [Phase 7] CSS 리팩토링 (2026-03) 인라인 style을 Tailwind CSS 유틸리티 클래스로 전환하고, CSS 인프라를 구축. ### Added - CSS 인프라 구축: `index.css` 엔트리, `base.css`, `components.css`, `wing.css` (@tailwind @layer 체계) - `cn()` 유틸리티 함수 (clsx + tailwind-merge) ### Changed - 인라인 style 3,500건 이상 → Tailwind 클래스로 변환 (잔여 1,286건) - body default 인라인 스타일 1,055건 제거 - SCAT 우측 패널 CSS 회귀 수정 ### Refactored - `LoginPage`, `LayerTree`, `SubMenuBar`, `BacktrackReplayBar`, `MapView`, `ComboBox` 등 공통 컴포넌트 CSS 전환 - `HNSView`, `HNSLeftPanel`, `HNSRightPanel`, `HNSScenarioView`, `HNSSubstanceView`, `HNSRecalcModal`, `HNSAnalysisListTable` CSS 전환 - `IncidentsView`, `IncidentsLeftPanel`, `IncidentsRightPanel` CSS 전환 - `OilSpillView`, `OilSpillTheoryView`, `BoomDeploymentTheoryView`, `OilBoomSection`, `RightPanel`, `RecalcModal`, `BacktrackModal` CSS 전환 - `RescueScenarioView` CSS 전환 --- ## [Phase 6] MapLibre GL JS + deck.gl 전환 (2026-03) Leaflet을 MapLibre GL JS 5.x + deck.gl 9.x로 전환하여 GPU 기반 렌더링 체계 구축. ### Added - MapLibre GL JS 5.x + @vis.gl/react-maplibre 8.1 + deck.gl 9.x 통합 - deck.gl 레이어: ScatterplotLayer, IconLayer, PathLayer, TextLayer - TextLayer 한글 폰트 지원 - 3D 회전 애니메이션 - 확산분석 자동 데모 모드 - 통합조회 호버 툴팁 - 확산 방향 SSW 수정 - 선박 아이콘 개선 ### Removed - Leaflet + react-leaflet 완전 제거 ### Merged - MR#47, MR#53, MR#55 → develop --- ## [Phase 5] View 분할 + RBAC 2차원 권한 (2026-02) 대형 View 컴포넌트를 서브탭으로 분할하고, FEATURE_ID 기반 2차원 권한 체계 도입. ### Added - FEATURE_ID 상수 체계 (`featureIds.ts`) - RBAC 2차원 권한 시스템: 리소스(FEATURE_ID) x 오퍼레이션(RCUD) - `permResolver` 권한 해석 엔진 - AUTH_PERM 테이블 OPER_CD 컬럼 - RCUD 매트릭스 관리 UI (admin 탭) - 게시판 CRUD API (boardService/Router) + 프론트 연동 ### Changed - 대형 View 컴포넌트를 서브탭 단위로 분할 ### Merged - MR#29 → develop --- ## [Phase 4] Mock → API 전환 (2026-02 ~ 2026-03) 10개 탭의 Mock 데이터를 실제 PostgreSQL 기반 API로 전환. 5차에 걸쳐 순차 진행. ### Round 1 — Reports, Assets (2026-02-28) - Reports: 보고서 템플릿/생성/조회 CRUD API - DB 7개 테이블 (REPORT_TMPL, REPORT_TMPL_SECT, REPORT_ANALYSIS_CTGR 등) - 프론트 4개 컴포넌트 API 연동 (localStorage 제거) - Assets: 자산(장비/기관/담당자/선박보험) 관리 API - migration 008_assets.sql ### Round 2 — Incidents (2026-02-28) - Incidents: 사건/사고 이력 관리 API - migration 009_incidents.sql, 010_incidents_media.sql - 미디어 첨부파일 지원 ### Round 3 — SCAT, Board (2026-03-01) - SCAT: 구역/구간 조회 3 API + PostGIS - migration 011_scat.sql - Board: 매뉴얼 CRUD + 첨부파일 API - migration 012_board_ext.sql ### Round 4 — HNS, Prediction (2026-03-01) - HNS: 분석 CRUD 5 API - migration 013_hns_analysis.sql - Prediction: 분석/역추적/오일펜스 7 API - migration 014_prediction.sql ### Round 5 — Aerial, Rescue (2026-03-01) - Aerial: 미디어/CCTV/위성 6 API + PostGIS - migration 015_aerial.sql - Rescue: 구난 작전/시나리오 3 API + JSONB - migration 016_rescue.sql ### Fixed - Prediction 분석 상세 500 에러 (ACDNT_WEATHER 컬럼명 불일치) - 시뮬레이션 API CORS 에러 (localhost 하드코딩 → api 인스턴스) ### Changed - 하드코딩 URL → 환경변수 전환 (GeoServer, CORS, CSP 등) - backtrackMockData.ts 삭제 - HTTP 메소드 제한 결정 (GET/POST only) ### Merged - MR#31 (Reports) → develop - 이후 Round 2~5 순차 머지 --- ## [Phase 3] SQLite → PostgreSQL 전환 (2026-02) 로컬 SQLite를 원격 PostgreSQL 16 + PostGIS로 전환. ### Changed - wingDb: SQLite → PostgreSQL (pg Pool) - authDb: 초기 별도 DB → 이후 migration 005에서 wing 단일 DB로 통합 (authPool = wingPool re-export) - DB 연결 모듈 리팩토링 (wingDb.ts, authDb.ts) ### Removed - SQLite 관련 의존성 완전 제거 ### Merged - MR#22 → develop --- ## [Phase 1~2] 프로젝트 구조 전환 (2026-02) 모놀리식 구조를 common/ + tabs/ 패키지 구조로 전환하고, 지도 엔진을 교체. ### Added - `common/` 공통 모듈 분리 (components, hooks, services, store, types, utils) - `tabs/` 탭 단위 패키지 구조 (11개 탭) - Path alias: `@common/*`, `@tabs/*` ### Removed - OpenLayers 제거 ### Changed - 단일 src/ 구조 → common/ + tabs/ 이중 구조로 전환 - 컴포넌트 재배치 및 import 경로 정리 ### Merged - MR#21 → develop --- ## 기반 인프라 (전체 기간) 프로젝트 전반에 걸쳐 구축된 기반 기능. ### 인증 시스템 - JWT HttpOnly Cookie (`WING_SESSION`) 기반 인증 - Google OAuth 연동 - `requireAuth`, `requireRole`, `requirePermission` 미들웨어 체인 ### 보안 - Helmet (CSP, CORP cross-origin) - CORS 설정 - Rate-limit - 입력 살균 (sanitize 미들웨어) ### CI/CD - Gitea Actions 자동 배포 (`.gitea/workflows/deploy.yml`) - main 브랜치 push 시 자동 빌드/배포 ### 개발 도구 - `.githooks/` (pre-commit, commit-msg 자동 검증) - `.claude/` 팀 워크플로우 (rules, skills, scripts, agents) - Claude Code 스킬: `/push`, `/mr`, `/release`, `/create-mr`, `/fix-issue` ### 감사 로그 - 탭 이동 자동 기록 (sendBeacon) - 백엔드 audit 모듈 ### 메뉴 시스템 - 동적 메뉴 설정 (menuStore + menus API) - 드래그앤드롭 메뉴 정렬 (@dnd-kit) ### DB 마이그레이션 - `database/migration/001~016` (16개 마이그레이션 파일) - 001: 레이어 설정 - 002: HNS 물질 DB - 003~006: 인증/권한/설정 - 007~016: 업무 도메인 (Reports, Assets, Incidents, SCAT, Board, HNS, Prediction, Aerial, Rescue)