커밋 그래프

51 커밋

작성자 SHA1 메시지 날짜
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
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
c727afd1ba refactor(frontend): 대형 View 서브탭 단위 분할 + FEATURE_ID 체계 도입
6개 대형 View(AerialView, AssetsView, ReportsView, PreScatView, AdminView, LeftPanel)를
서브탭 단위로 분할하여 모듈 경계를 명확히 함.

- AerialView (2,526줄 → 8파일): MediaManagement, OilAreaAnalysis, RealtimeDrone 등
- AssetsView (2,047줄 → 8파일): AssetManagement, AssetMap, ShipInsurance 등
- ReportsView (1,596줄 → 5파일): TemplateFormEditor, ReportGenerator 등
- PreScatView (1,390줄 → 7파일): ScatLeftPanel, ScatMap, ScatPopup 등
- AdminView (1,306줄 → 7파일): UsersPanel, PermissionsPanel, MenusPanel 등
- LeftPanel (1,237줄 → 5파일): PredictionInputSection, InfoLayerSection, OilBoomSection 등

FEATURE_ID 레지스트리(common/constants/featureIds.ts) 및
감사로그 서브탭 추적 훅(useFeatureTracking) 추가.

.gitignore의 scat/ → /scat/ 수정 (scat 탭 파일 추적 누락 수정)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 16:19:22 +09:00
d92fb952de Merge pull request 'docs: Phase 1~4 리팩토링 반영 문서 최신화' (#24) from feature/docs-phase1-4-update into develop
Reviewed-on: #24
2026-02-28 15:28:07 +09:00
432339b6d2 Merge pull request 'refactor(phase4): HNS 물질정보 DB 이전 + 정적 데이터 정리' (#23) from feature/refactor-phase4-static-data into develop
Reviewed-on: #23
2026-02-28 15:28:00 +09:00
54aeb2f124 docs: Phase 1~4 리팩토링 반영 문서 최신화
- CLAUDE.md: 프로젝트 구조 (common/, tabs/, path alias), DB 스택, 지도 라이브러리
- README.md: 프로젝트 구조 트리, 기술 스택 테이블 (OpenLayers·SQLite 제거)
- docs/README.md: 기술 스택, 프로젝트 구조 트리
- docs/MENU-TAB-GUIDE.md: 새 탭 추가 경로 (tabs/ + @common/ alias)
- App.tsx: audit/log sendBeacon URL 수정 (Phase 4 버그 수정 포함)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 15:24:29 +09:00
63645e9f85 refactor(phase4): HNS 물질정보 DB 이전 + 정적 데이터 정리
- 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>
2026-02-28 14:52:46 +09:00
7b6c2652f0 Merge pull request 'refactor(backend): SQLite → PostgreSQL 마이그레이션 + wing DB 연결' (#22) from feature/refactor-phase3-db-migration into develop
Reviewed-on: #22
2026-02-28 14:29:59 +09:00
199d5310db refactor(backend): SQLite → PostgreSQL 마이그레이션 + wing DB 연결
- better-sqlite3 제거, wingDb.ts (PostgreSQL wing DB Pool) 추가
- layers 라우터: 동기(better-sqlite3) → 비동기(pg) 전환
- LAYER 테이블 마이그레이션 SQL 생성 (database/migration/001_layer_table.sql)
- seed 스크립트 PostgreSQL 전환
- 문서 업데이트: CLAUDE.md, README.md, docs/README.md, COMMON-GUIDE.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 14:18:00 +09:00
d1bdff6f8f Merge pull request 'refactor(frontend): 공통 모듈 분리 + 탭 단위 패키지 구조 전환' (#21) from feature/refactor-phase1-common-module into develop 2026-02-28 14:10:48 +09:00
f099ff29b1 refactor(frontend): 탭 단위 패키지 구조 전환 (tabs/)
- 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>
2026-02-28 14:08:34 +09:00
a61864646f refactor(frontend): 공통 모듈 common/ 분리 + OpenLayers 제거 + path alias 설정
- OpenLayers(ol) 패키지 제거 (미사용, import 0건)
- common/ 디렉토리 생성: components, hooks, services, store, types, utils
- 17개 공통 파일을 common/으로 이동 (git mv, blame 이력 보존)
- MainTab 타입을 App.tsx에서 common/types/navigation.ts로 분리
- tsconfig path alias (@common/*, @tabs/*) + vite resolve.alias 설정
- 42개 import 경로를 @common/ alias 또는 상대경로로 수정

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 14:00:50 +09:00
411b32caad Merge pull request 'docs: 개발 가이드 정비 및 Docker 관련 내용 제거' (#19) from feature/auth-system into develop 2026-02-28 12:58:12 +09:00
9586cd04eb docs: 개발 가이드 정비 및 Docker 관련 내용 제거
- README.md를 프로젝트 진입점으로 전면 개편 (시작 → 워크플로우 → 탭개발 → 문서 안내 흐름)
- Docker 관련 코드/문서 전면 제거 (운영 PostgreSQL 직접 연결)
- docker-compose.yml 삭제
- CLAUDE.md, docs/README.md, docs/INSTALL_GUIDE.md Docker 참조 정리

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 12:56:59 +09:00
bfd6289f49 Merge pull request 'feat(audit): 감사 로그 시스템 구현 및 공통 개발 가이드 문서 추가' (#17) from feature/auth-system into develop
Reviewed-on: #17
2026-02-28 12:25:54 +09:00
94af25e5b4 feat(audit): 감사 로그 시스템 구현 및 공통 개발 가이드 문서 추가
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 12:24:20 +09:00
62546144fa Merge pull request 'fix(auth): 비자동승인 도메인 Google OAuth PENDING 안내 UX 개선' (#15) from feature/auth-system into develop 2026-02-28 11:10:14 +09:00
1281e5c533 fix(auth): 비자동승인 도메인 Google OAuth 등록 시 PENDING 안내 UX 개선
기존에 비자동승인 도메인(gmail.com 등) Google 로그인 시 403 에러를
던져 등록 실패처럼 보이던 문제를 수정. PENDING 사용자에 대해 에러
대신 200 응답으로 pending 상태를 반환하고, 프론트엔드에서 청록색
안내 메시지로 표시하도록 변경.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 11:09:44 +09:00
9200d7fc5a Merge pull request 'feat(admin): 메뉴 관리 드래그앤드롭 + 가이드 문서' (#13) from feature/auth-system into develop 2026-02-28 02:46:44 +09:00
660591446b feat(admin): 메뉴 관리 드래그앤드롭 순서 변경 + 메뉴 탭 추가 가이드 문서
- @dnd-kit/core, @dnd-kit/sortable로 드래그앤드롭 순서 변경 지원
- SortableMenuItem 컴포넌트 분리, 드래그 핸들(grip) + DragOverlay 프리뷰
- 기존 UP/DOWN 버튼 유지 (드래그와 병행 사용)
- docs/MENU-TAB-GUIDE.md: 새 메뉴 탭 추가 시 수정 파일 및 절차 가이드

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 02:46:16 +09:00
c78404b219 Merge pull request 'fix(ci): emoji-mart React 19 peer dependency 충돌 해결' (#11) from feature/auth-system into develop 2026-02-28 02:27:35 +09:00
61060bbb5f fix(ci): emoji-mart React 19 peer dependency 충돌 해결
frontend .npmrc에 legacy-peer-deps=true 추가하여
@emoji-mart/react의 React 18 peer dependency 요구사항 우회

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 02:27:11 +09:00
beb9f38fef Merge pull request 'feat(admin): 메뉴 관리 기능 구현 (DB 단일 소스, 이모지 피커)' (#9) from feature/auth-system into develop 2026-02-28 02:22:44 +09:00
fd48e755f2 feat(admin): 메뉴 관리 기능 구현 (DB 단일 소스, 이모지 피커)
- 메뉴 활성/비활성, 순서, 라벨, 아이콘을 DB(AUTH_SETTING)에서 관리
- GET/PUT /api/menus 엔드포인트 추가
- Zustand menuStore로 메뉴 설정 전역 상태 관리
- TopBar: DB 메뉴 설정 기반 동적 탭 렌더링 (ALL_TABS 하드코딩 제거)
- AdminView MenusPanel: API 연동, 이모지 피커(@emoji-mart) 통합
- SETTING_VAL 컬럼 VARCHAR(500) → TEXT 마이그레이션
- dotenv 추가로 .env 파일 자동 로딩
- wing_auth DB 비밀번호 기본값 수정 (JDBC 호환)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 02:21:36 +09:00
ba714372d8 Merge pull request 'feat(auth): 역할 CRUD 및 다중 역할 할당 기능 구현' (#7) from feature/auth-system into develop
Reviewed-on: #7
2026-02-28 01:08:46 +09:00
b52d8097b0 feat(auth): 역할 CRUD 및 다중 역할 할당 기능 구현
- 역할 생성/수정/삭제 API 추가 (POST/PUT/DELETE /api/roles)
- 권한 관리 패널에 역할 추가/이름수정/삭제 UI 구현
- 사용자 관리 패널에 다중 역할 뱃지 표시 및 역할 할당 드롭다운 추가
- 사용자 활성화/비활성화 상태 변경 버튼 추가
- UserListItem에 roleSns 필드 추가로 역할 SN 기반 할당 지원

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 01:03:21 +09:00
60b80784fb Merge pull request 'feat(auth): 인증 시스템 및 Google OAuth 로그인 구현' (#5) from feature/auth-system into develop
Reviewed-on: #5
2026-02-27 16:52:36 +09:00
3b00408b71 fix(ci): backend 빌드 시 devDependencies 누락 수정
npm ci --omit=dev로 TypeScript가 설치되지 않아 빌드 실패하던 문제 수정.
전체 의존성 설치 → 빌드 → devDependencies prune 순서로 변경.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 16:51:29 +09:00
3147b859d8 Merge pull request 'feat(auth): Google OAuth 로그인 연동' (#3) from feature/auth-system into develop
Reviewed-on: #3
2026-02-27 16:43:58 +09:00
7743e40767 feat(auth): Google OAuth 로그인 연동
- google-auth-library로 Google ID Token 검증 (backend)
- @react-oauth/google GoogleLogin 컴포넌트 (frontend)
- gcsc.co.kr 도메인 자동 승인(ACTIVE), 기타 도메인 PENDING
- 기존 ID/PW 사용자와 OAuth 사용자 동일 계정 체계 통합
- AdminView: 사용자 인증방식(Google/ID PW) 뱃지 표시
- AdminView: OAuth 자동 승인 도메인 설정 UI
- deploy.yml: VITE_GOOGLE_CLIENT_ID 빌드 환경변수 추가
- nginx: Cross-Origin-Opener-Policy 헤더 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 16:42:59 +09:00
597e0da2e3 chore: 팀 워크플로우 스크립트 및 프로젝트 문서 추가
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 16:42:37 +09:00
5721891186 Merge pull request 'feat(auth): JWT 기반 자체 인증 시스템 구현' (#1) from feature/auth-system into develop
Reviewed-on: #1
2026-02-27 15:55:18 +09:00
a0f64e4b11 style: 기존 코드 ESLint/TypeScript 에러 수정
- frontend: ESLint 에러 86건 수정 (unused-vars, set-state-in-effect, static-components 등)
- backend: simulation.ts req.params 타입 단언 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 15:47:29 +09:00
e3b48a13cb ci: wing-demo 자동 배포 워크플로우 추가
All checks were successful
Build and Deploy Wing-Demo / build-and-deploy (push) Successful in 1m4s
main push 시 frontend 빌드 → wing-demo.gc-si.dev 자동 배포

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 11:37:51 +09:00
d2e30be5d1 chore: 팀 워크플로우 v1.3.0 구성
- .claude/rules: 팀 정책, git 워크플로우, 코드 스타일, 네이밍, 테스트 규칙
- .claude/skills: push, mr, release, create-mr, fix-issue, init-project, sync-team-workflow
- .claude/settings.json: 프로젝트 레벨 권한 설정
- .githooks: commit-msg, pre-commit(모노레포), post-checkout
- .editorconfig, .npmrc, .prettierrc, .node-version

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 11:18:37 +09:00