커밋 그래프

84 커밋

작성자 SHA1 메시지 날짜
ebbb074866 docs: CHANGELOG.md → RELEASE-NOTES.md 이름 변경 (git exclude 회피)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 16:08:11 +09:00
13d6ca69e2 refactor(db): DDL 스크립트 현행화 + wing_auth→auth 스키마 문서 전면 수정
- database/schema/ 14개 DDL 파일 신규 생성 (운영 DB pg_dump 기반)
- database/seed/ 14개 초기 데이터 파일 분리
- database/_deprecated/로 구 init.sql, auth_init.sql 이동
- database/README.md 신규 작성 (DB 아키텍처, 설치 절차)
- docs/ 6개 가이드 문서 wing_auth→auth 스키마 구조로 수정
- README.md, CLAUDE.md wing 단일 DB 구조 반영

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 15:16:38 +09:00
a2cfc02b70 chore: 백업 디렉토리 제거 및 gitignore 추가
docs/_backup_*/ 패턴을 .gitignore에 추가하여
문서 백업 디렉토리가 커밋에 포함되지 않도록 설정.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 14:05:42 +09:00
6fbb3fc249 docs: 전체 프로젝트 문서 최신 기준 신규 작성
Phase 6(MapLibre+deck.gl), CSS 리팩토링, RBAC, 10탭 API 전환 등
현재 시스템 상태를 정확히 반영하여 모든 문서를 처음부터 재작성.

- README.md: 기술 스택(MapLibre+deck.gl), 빌드, 구조, 스킬 갱신
- CLAUDE.md: CSS @layer, RBAC, HTTP 정책, 백엔드 모듈 반영
- docs/README.md: 아키텍처 상세 (3-Layer, 인증, 권한, CSS)
- docs/DEVELOPMENT-GUIDE.md: 워크플로우 전체 흐름 + 실전 예시
- docs/INSTALL_GUIDE.md: 온라인/오프라인 설치 매뉴얼
- docs/COMMON-GUIDE.md: 공통 로직 9개 섹션 (인증~CSS)
- docs/MENU-TAB-GUIDE.md: 새 탭 추가 5단계 + 예시
- docs/CRUD-API-GUIDE.md: End-to-End CRUD API 패턴
- docs/MOCK-TO-API-GUIDE.md: Mock→API 전환 10단계 프로세스
- docs/_backup_20260301/: 기존 문서 백업

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 14:03:08 +09:00
34cf046787 fix(css): CSS 회귀 버그 3건 수정 + SCAT 우측 패널 구현
- className 중복 속성 31건 수정 (12파일)
- KOSPS codeBox spread TypeError 해결
- HNS 페놀(C₆H₅OH) 물질 데이터 추가
- ScatRightPanel 280px 우측 패널 신규 구현 (3탭+액션버튼)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 13:11:21 +09:00
b00bb56af3 refactor(css): Phase 3 인라인 스타일 → Tailwind 대규모 변환 (486건)
대형 파일 집중 변환:
- 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>
2026-03-01 12:06:15 +09:00
628c07f4fb refactor(css): 인라인 style → Tailwind className 일괄 변환 (229건)
안전한 패턴 매칭으로 단독 color/background/fontWeight/fontSize/flex 스타일을
Tailwind 유틸리티 클래스로 변환. 혼합 style에서 개별 속성 추출은 제외하여
시각적 회귀 방지.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 11:38:59 +09:00
1dacb22487 refactor(css): 인라인 스타일 → Tailwind 추가 변환 (Phase 2 계속)
대형 파일 추가 변환:
- HNSSubstanceView: 275→209건 (66건 변환)
- OilSpillTheoryView: 435→417건 (18건 변환)
- IncidentsLeftPanel: 61→34건 (27건 변환)
- RescueView: 54→47건 (7건 변환)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 11:31:41 +09:00
3fc8f03238 refactor(css): 인라인 스타일 → Tailwind 유틸리티 클래스 변환 (Phase 2, ~990건)
Phase 2: 정적 인라인 스타일을 Tailwind className으로 변환
- common/: MapView, BacktrackReplayBar, LoginPage, LayerTree, ComboBox, SubMenuBar
- hns/: HNSSubstanceView, HNSScenarioView, HNSView, HNSLeftPanel 등 8파일
- prediction/: BoomDeploymentTheoryView, OilBoomSection, RecalcModal, RightPanel 등 8파일
- incidents/: IncidentsView, IncidentsLeftPanel, IncidentsRightPanel
- rescue/: RescueScenarioView
- aerial/: SatelliteRequest, AerialTheoryView
- assets/: ShipInsurance, AssetTheory, AssetManagement 등 5파일
- board/: BoardView
- reports/: ReportsView, OilSpillReportTemplate, ReportGenerator
- weather/: WeatherMapOverlay, WeatherView, WeatherRightPanel

변환 패턴: color/background/border/borderRadius/display/flex/gap/fontSize/fontWeight → Tailwind
동적 스타일(rgba, gradient, 삼항 조건부, 런타임 변수)은 style prop에 유지
JS 번들: 2,921KB → 2,897KB (-24KB)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 11:24:13 +09:00
dec066e8bb refactor(css): CSS 인프라 구축 + body default 인라인 스타일 1,055건 제거
Phase 0: CSS 인프라 구축
- Tailwind config 색상 불일치 수정 (t1/t2/t3 → CSS 변수 값으로 통일)
- index.css 1,302줄 → @import 엔트리포인트 7줄로 축소
- common/styles/base.css: @layer base 추출 (CSS 변수, 리셋, body 기본값)
- common/styles/components.css: @layer components + utilities 추출
- common/styles/wing.css: wing-* 디자인 시스템 클래스 신규 정의
- common/utils/cn.ts: className 조합 유틸리티
- App.css 삭제 (내용을 components.css로 통합)

Phase 1: body default 인라인 스타일 일괄 제거
- fontFamily: 'var(--fK)' 781건 제거 (body font-family 상속)
- color: 'var(--t1)' 274건 제거 (body color 상속)
- 빈 style={{}} 78건 정리
- 31개 파일, JS 번들 23KB 감소

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 10:45:01 +09:00
e27cdcdf85 Merge pull request 'feat(map): Phase 6 MapLibre + deck.gl 시각화 개선' (#55) from feature/phase6-maplibre-deckgl into develop
Reviewed-on: #55
2026-03-01 10:05:17 +09:00
9384290bf3 feat(frontend): 확산 방향 SSW 수정 + 통합조회 호버 툴팁 + 선박 아이콘 개선
- 확산분석: 오일 확산 방향 NE→SSW(200°)로 수정, 민감자원 여수 실제 좌표 적용
- 해류 화살표: 아이콘 ➤, 크기 22px, 투명도 증가, SSW 방향 동기화
- 통합조회: 선박/사고 마커 hover 시 다크 테마 툴팁 표시 (이름, 유형, 속도, 좌표)
- 선박 아이콘: SVG 삼각형 16×20 확대 + 글로우 효과 + pickable 전환
- vesselLayer(ScatterplotLayer 원형) 제거, vesselIconLayer로 통합

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 10:01:55 +09:00
6367640ea5 Merge pull request 'feat(phase6): MapLibre + deck.gl 전환 + 항공탐색/확산분석 시각화 개선' (#53) from feature/phase6-maplibre-deckgl into develop
Reviewed-on: #53
2026-03-01 09:34:29 +09:00
86b4a03c12 feat(frontend): TextLayer 한글 폰트 + 확산분석 자동 데모 + 3D 회전 애니메이션
- 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>
2026-03-01 09:33:00 +09:00
60d8d1af95 Merge pull request 'feat(map): Phase 6 MapLibre GL JS + deck.gl 전환 + 탭 시각화 개선' (#51) from feature/phase6-maplibre-deckgl into develop
Reviewed-on: #51
2026-03-01 09:02:05 +09:00
6356b0a3bd feat(frontend): 항공탐색 탭 개선 + 확산분석 데모 데이터 시각화
항공탐색 탭:
- 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>
2026-03-01 08:59:13 +09:00
199b2635e2 Merge pull request 'feat(map): Leaflet → MapLibre GL JS + deck.gl 전환 (Phase 6)' (#49) from feature/phase6-maplibre-deckgl into develop
Reviewed-on: #49
2026-03-01 03:06:51 +09:00
195e69c86d fix(map): ScatMap scatDetailData import 제거 + Vite shimMissingExports 설정
- 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>
2026-03-01 03:04:11 +09:00
07635d6ed0 Merge pull request 'feat(map): Leaflet → MapLibre GL JS + deck.gl 전환 (Phase 6)' (#47) from feature/phase6-maplibre-deckgl into develop
Reviewed-on: #47
2026-03-01 03:00:25 +09:00
353047dede chore(map): develop 병합 (Phase 6 충돌 해결)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 02:59:18 +09:00
85749c2f68 feat(map): Leaflet → MapLibre GL JS + deck.gl 전환 (Phase 6)
지도 엔진을 Leaflet 1.9에서 MapLibre GL JS 5.x + deck.gl 9.x로 전환.
15개 파일 수정, Leaflet 완전 제거. WebGL 단일 canvas로 z-index 충돌 해결,
유류 입자 ScatterplotLayer GPU 렌더링으로 10~100배 성능 향상.

- MapView.tsx: MapLibre Map + DeckGLOverlay(MapboxOverlay interleaved)
- 유류 입자/오일펜스/HNS: deck.gl ScatterplotLayer/PathLayer
- 역추적 리플레이: createBacktrackLayers() 함수 패턴
- 기상 오버레이: WeatherMapOverlay/OceanCurrent/WindParticle deck.gl 전환
- 수온 히트맵: WaterTemperatureLayer deck.gl ScatterplotLayer
- 해황예보도: MapLibre image source + raster layer
- SCAT/Assets/Incidents: MapLibre Map + deck.gl 레이어
- WMS 밝기: raster-brightness-min/max 네이티브 속성

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 02:48:54 +09:00
0540495e9f Merge pull request 'feat(phase4): SCAT~Rescue 6개 탭 Mock → API 전환 + 하드코딩 제거' (#45) from feature/scat-api-conversion into develop
Reviewed-on: #45
2026-03-01 01:44:02 +09:00
5e4044d461 fix: 하드코딩 URL 제거 + 환경변수 전환
- 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>
2026-03-01 01:36:07 +09:00
08b8f16001 fix(prediction): 시뮬레이션 API를 localhost 대신 api 인스턴스 사용
fetch('http://localhost:3001/...') → api.post('/simulation/run', ...)
배포 환경에서 CORS loopback 차단 문제 해결

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 01:31:58 +09:00
bf16762dab fix(prediction): 분석 상세 조회 500 에러 수정
ACDNT_WEATHER 테이블의 실제 컬럼명에 맞게 weather 쿼리 수정
(WEATHER_DTM→OBS_DTM, WIND_SPD→WIND 등 존재하지 않는 컬럼 참조 제거)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 01:30:10 +09:00
481c93e249 Merge pull request 'feat(phase4): Board/HNS/Prediction/Aerial/Rescue Mock → API 전환' (#43) from feature/scat-api-conversion into develop
Reviewed-on: #43
2026-03-01 01:22:45 +09:00
ff085252b0 feat(phase4): Board/HNS/Prediction/Aerial/Rescue Mock → API 전환
- 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>
2026-03-01 01:17:10 +09:00
624fb8aec4 Merge pull request 'feat(scat): SCAT Mock → API 전환 + PostGIS GEOMETRY 일괄 적용' (#41) from feature/scat-api-conversion into develop
Reviewed-on: #41
2026-02-28 23:29:13 +09:00
736c6ae429 feat(scat): SCAT Mock → API 전환 + PostGIS GEOMETRY 일괄 적용
- 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>
2026-02-28 23:26:51 +09:00
73c18ab979 Merge pull request 'fix(weather): Mixed Content 수정 + CI 환경변수 추가' (#39) from fix/weather-mixed-content into develop 2026-02-28 22:46:31 +09:00
45fc9068aa fix(weather): Mixed Content 수정 + CI 환경변수 추가
- 기상 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>
2026-02-28 22:46:00 +09:00
6ffd1b8330 Merge pull request 'fix(frontend): api import 수정 + reviewer 체크리스트 강화' (#37) from feature/incidents-crud into develop 2026-02-28 22:29:05 +09:00
2cd34dea91 chore(reviewer): import/export 정합성 검증 항목 추가
Vite/Rollup 빌드 시 default/named import 불일치를 사전 감지하도록 체크리스트 강화

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 22:28:29 +09:00
76f299e5de fix(frontend): api named export import 수정 (Vite 빌드 오류)
api.ts의 named export를 default import로 사용하여 Vite/Rollup 프로덕션 빌드 실패 수정

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 22:26:55 +09:00
d44a84e05b Merge pull request 'feat(incidents): 사고관리 탭 mock → DB/API 전환' (#35) from feature/incidents-crud into develop
Reviewed-on: #35
2026-02-28 22:22:24 +09:00
46c7307ab9 feat(incidents): 사고관리 탭 mock → DB/API 전환
- 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>
2026-02-28 22:20:37 +09:00
2057afebc6 Merge pull request 'feat(assets): 방제자산 탭 mock → DB/API 전환' (#33) from feature/assets-crud into develop
Reviewed-on: #33
2026-02-28 21:44:36 +09:00
793abb8fe2 feat(assets): 방제자산 탭 mock → DB/API 전환
- 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>
2026-02-28 21:36:56 +09:00
ffde4d6694 chore: 팀 워크플로우 v1.4.0 동기화 + 문서 갱신
- 에이전트 파일 YAML frontmatter 형식 갱신 (explorer, implementer, reviewer)
- subagent-policy.md 규칙 추가
- commit-msg hook 패턴 간소화
- COMMON-GUIDE.md API 연동 가이드 보강
- MOCK-TO-API-GUIDE.md mock→API 전환 가이드 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 21:36:35 +09:00
4fb06ad43e Merge pull request 'feat(reports): 보고서 탭 localStorage → DB/API 전환' (#31) from feature/reports-crud into develop
Reviewed-on: #31
2026-02-28 21:00:56 +09:00
844eebb7cc feat(reports): 보고서 탭 localStorage → DB/API 전환
- 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>
2026-02-28 20:59:11 +09:00
dcaf8da474 Merge pull request 'feat: Phase 5 View 분할 + RBAC 2차원 권한 + 게시판 CRUD API 연동' (#29) from feature/refactor-phase5-view-decomposition into develop 2026-02-28 19:38:00 +09:00
db7f435717 docs: CRUD-API-GUIDE 게시판 프론트엔드 파일 참조 갱신
- BoardListTable → BoardView/BoardWriteForm/BoardDetailView로 변경
- 권한 기반 UI 분기 코드 예시를 실제 구현과 일치하도록 수정

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 19:33:19 +09:00
6bdea97b49 fix(frontend): 게시판 CRUD mock 제거 → 실제 API 연동
- 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>
2026-02-28 19:32:12 +09:00
7102e7b595 Merge pull request 'fix(frontend): InfoLayerSection 구 경로 import 수정 (배포 실패 hotfix)' (#27) from feature/refactor-phase5-view-decomposition into develop 2026-02-28 18:48:46 +09:00
79124ad002 fix(frontend): InfoLayerSection 구 경로 import를 path alias로 수정
- ../../../data/layerData → @common/data/layerData
- ../../../data/layerDatabase → @common/services/layerService
- MR#23 파일 이동 후 서브컴포넌트에 반영 누락된 import 경로 수정

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 18:48:19 +09:00
aa2b6f0221 Merge pull request 'refactor(phase4-5): 대형 View 분할 + RBAC 권한 시스템 + DB 통합 + 게시판 CRUD' (#25) from feature/refactor-phase5-view-decomposition into develop
Reviewed-on: #25
2026-02-28 18:43:23 +09:00
6e0a412729 chore: develop 브랜치 머지 충돌 해결 (MR#23 HNS + MR#24 문서)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 18:42:42 +09:00
2b88455a30 feat(backend): DB 통합 + 게시판 CRUD API + RBAC 적용 가이드
- 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>
2026-02-28 18:37:14 +09:00
8657190578 feat(auth): RBAC 오퍼레이션 기반 2차원 권한 시스템 구현
리소스 가시성(READ/HIDE) 단일 차원에서 리소스 × 오퍼레이션(RCUD) 2차원
권한 모델로 전환하여 세밀한 CRUD 권한 제어 지원.

- DB: AUTH_PERM에 OPER_CD 컬럼 추가, 마이그레이션 004 작성
- DB: AUTH_PERM_TREE 리소스 트리 테이블 추가 (마이그레이션 003)
- Backend: permResolver 2차원 권한 해석 엔진 (상속 + 오퍼레이션)
- Backend: requirePermission 미들웨어 신규 (리소스×오퍼레이션 검증)
- Backend: authService permissions → Record<string, string[]> 반환
- Backend: roleService/roleRouter OPER_CD 지원 API
- Backend: Helmet CORP 설정 (sendBeacon cross-origin 허용)
- Frontend: authStore.hasPermission(resource, operation?) 하위 호환 확장
- Frontend: PermissionsPanel 역할탭 + RCUD 4열 매트릭스 UI 전면 재작성
- Frontend: sendBeacon API_BASE_URL 절대경로 전환
- Docs: COMMON-GUIDE 권한 체계 + CRUD API 규칙 문서화

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 17:55:06 +09:00