diff --git a/docs/README.md b/docs/README.md index 15d0981..9e9d819 100755 --- a/docs/README.md +++ b/docs/README.md @@ -277,7 +277,7 @@ GOOGLE_CLIENT_ID=your-google-client-id | 문서 | 설명 | |------|------| | [INSTALL_GUIDE.md](INSTALL_GUIDE.md) | 설치 매뉴얼 (온라인/오프라인, DB 초기화) | -| [CHANGELOG.md](CHANGELOG.md) | 전체 변경 이력 | +| [RELEASE-NOTES.md](RELEASE-NOTES.md) | 전체 변경 이력 | ### 코드 컨벤션 (`.claude/rules/`) diff --git a/docs/RELEASE-NOTES.md b/docs/RELEASE-NOTES.md new file mode 100644 index 0000000..c042f73 --- /dev/null +++ b/docs/RELEASE-NOTES.md @@ -0,0 +1,219 @@ +# CHANGELOG + +WING-OPS 프로젝트의 전체 변경 이력. +[Keep a Changelog](https://keepachangelog.com/ko/1.1.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)