- deploy.yml: mkdir -p 추가로 배포 디렉토리 미존재 시 실패 방지 - deploy.yml: lint 단계 추가로 빌드 전 코드 품질 검증 - useVesselDeckLayer: useEffect 내 직접 setState 호출 제거 - useAisPolling: 렌더 중 ref 업데이트를 useEffect 내부로 이동 - CLAUDE.md, .sdkmanrc, .node-version 등 팀 워크플로우 초기 구성 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
93 lines
3.1 KiB
Markdown
93 lines
3.1 KiB
Markdown
# WING-GIS - 해양경찰청 통합 GIS 위치정보시스템
|
|
|
|
모노레포 구조: React 19 TypeScript 프론트엔드 + Spring Boot 3.3 Java 21 백엔드 (MSA)
|
|
해양 GIS 시스템으로 선박 물표 추적(AIS/V-Pass/VTS 등 7개 소스), S-100 전자해도, 공간분석 기능 제공.
|
|
|
|
상세 아키텍처: [ARCHITECTURE.md](ARCHITECTURE.md) 참조
|
|
|
|
## 기술 스택
|
|
|
|
### Frontend
|
|
- React 19 + TypeScript 5.9 + Vite 8
|
|
- MapLibre GL JS 5.18 + deck.gl 9.2 (해양 지도 렌더링)
|
|
- Zustand 5 (상태 관리), Ant Design 6 (UI), STOMP.js (WebSocket)
|
|
- ENC: Martin 타일 서버 연동, S-52 day/dusk/night 테마
|
|
|
|
### Backend
|
|
- Spring Boot 3.3.6 + Java 21 + Gradle 9.3.1
|
|
- PostgreSQL 16/PostGIS 3.4, Hibernate Spatial
|
|
- Redis (캐시), Kafka (선박 스트리밍), Keycloak (SSO)
|
|
- MapStruct (DTO 매핑), SpringDoc OpenAPI 2.3 (API 문서)
|
|
|
|
### Infrastructure
|
|
- Docker Compose (PostgreSQL, Redis, Kafka, MinIO, pg_tileserv, Keycloak)
|
|
- npm 레지스트리: https://nexus.gc-si.dev/repository/npm-public/
|
|
|
|
## 빌드 명령어
|
|
|
|
### Frontend
|
|
```bash
|
|
cd frontend/wing-gis-web
|
|
npm install
|
|
npm run build
|
|
```
|
|
|
|
### Backend (wing-gis-map 서비스)
|
|
```bash
|
|
cd services/wing-gis-map
|
|
./gradlew build
|
|
```
|
|
|
|
## 개발 서버
|
|
```bash
|
|
cd frontend/wing-gis-web
|
|
npm run dev # http://localhost:5174
|
|
```
|
|
|
|
## 테스트
|
|
```bash
|
|
# Frontend (테스트 러너 미설정)
|
|
# Backend
|
|
cd services/wing-gis-map && ./gradlew test
|
|
```
|
|
|
|
## Lint
|
|
```bash
|
|
# Frontend (ESLint 9, flat config)
|
|
cd frontend/wing-gis-web && npm run lint
|
|
# Prettier: 미설정
|
|
# Backend: checkstyle/spotless 미설정
|
|
```
|
|
|
|
## 디렉토리 구조
|
|
```
|
|
wing-gis/
|
|
├── frontend/wing-gis-web/ # React SPA
|
|
│ └── src/
|
|
│ ├── components/ # layout, map, vessel UI
|
|
│ ├── features/ # vesselLayer, nauticalChart
|
|
│ ├── hooks/ # useStore, useMap, useDeckLayers, useVesselStream
|
|
│ ├── lib/map/ # mapCore, MaplibreDeckCustomLayer
|
|
│ ├── services/ # api.ts, vesselApi.ts
|
|
│ ├── types/ # ais.ts, vessel.ts, layer.ts
|
|
│ └── utils/ # coordinate, s52Colors, vesselIcon
|
|
├── services/ # Spring Boot MSA (10개)
|
|
│ ├── wing-gis-map/ # GIS API (구현 완료)
|
|
│ ├── wing-gis-vessel/ # 선박/신호 (stub)
|
|
│ ├── wing-gis-gateway/ # API Gateway (stub)
|
|
│ ├── wing-gis-auth/ # 인증 (stub)
|
|
│ ├── wing-gis-layer/ # 레이어 관리 (stub)
|
|
│ ├── wing-gis-analysis/ # 분석 (stub)
|
|
│ ├── wing-gis-integration/ # 연계 (stub)
|
|
│ ├── wing-gis-admin/ # 관리 (stub)
|
|
│ └── wing-gis-mcp/ # MCP Agent (stub)
|
|
├── infra/ # Docker Compose, K8s, SQL
|
|
├── docs/ # 문서
|
|
└── .claude/ # Claude Code 설정
|
|
```
|
|
|
|
## 팀 컨벤션
|
|
- `.claude/rules/` 팀 코딩 표준 참조 (`/sync-team-workflow`로 다운로드)
|
|
- 커밋 메시지: Conventional Commits (한국어), `.githooks/commit-msg`로 검증
|
|
- 커밋 전 lint 검증 필수
|