# Wing Fleet Dashboard (gc-wing) ## 프로젝트 개요 - **타입**: React + TypeScript + Vite (모노레포) - **Node.js**: `.node-version` 참조 (v24) - **패키지 매니저**: npm (workspaces) - **구조**: apps/web (프론트엔드) + apps/api (백엔드 API) ## 빌드 및 실행 ```bash # 의존성 설치 npm install # 전체 개발 서버 npm run dev # 개별 개발 서버 npm run dev:web # 프론트엔드 (Vite) npm run dev:api # 백엔드 (Fastify + tsx watch) # 빌드 npm run build # 전체 빌드 (web + api) npm run build:web # 프론트엔드만 npm run build:api # 백엔드만 # 린트 npm run lint # apps/web ESLint # 데이터 준비 npm run prepare:data ``` ## 프로젝트 구조 ``` gc-wing-dev/ ├── apps/ │ ├── web/ # React 19 + Vite 7 + MapLibre + Deck.gl │ │ └── src/ │ │ ├── app/ # App.tsx, styles │ │ ├── entities/ # 도메인 모델 (vessel, zone, aisTarget, legacyVessel) │ │ ├── features/ # 기능 단위 (mapToggles, typeFilter, aisPolling 등) │ │ ├── pages/ # 페이지 (DashboardPage) │ │ ├── shared/ # 공통 유틸 (lib/geo, lib/color, lib/map) │ │ └── widgets/ # UI 위젯 (map3d, vesselList, info, alarms 등) │ └── api/ # Fastify 5 + TypeScript │ └── src/ │ └── index.ts ├── data/ # 정적 데이터 ├── scripts/ # 빌드 스크립트 (prepare-zones, prepare-legacy) └── legacy/ # 레거시 데이터 ``` ## 기술 스택 | 영역 | 기술 | |------|------| | 프론트엔드 | React 19, Vite 7, TypeScript 5.9 | | 지도 | MapLibre GL JS 5, Deck.gl 9 | | 백엔드 | Fastify 5, TypeScript | | 린트 | ESLint 9, Prettier | ## 팀 규칙 - 코드 스타일: `.claude/rules/code-style.md` - 네이밍 규칙: `.claude/rules/naming.md` - 테스트 규칙: `.claude/rules/testing.md` - Git 워크플로우: `.claude/rules/git-workflow.md` - 팀 정책: `.claude/rules/team-policy.md` ## 의존성 관리 - Nexus 프록시 레포지토리를 통해 npm 패키지 관리 (`.npmrc`) - 새 의존성 추가: `npm -w @wing/web install 패키지명` - devDependency: `npm -w @wing/web install -D 패키지명`