# CLAUDE.md - GIS 함정용 프로젝트 가이드 ## 프로젝트 개요 | 항목 | 내용 | |------|------| | 프로젝트명 | dark (GIS 함정용) | | 참조 프로젝트 | mda-react-front (메인 프로젝트) | | 목적 | 선박위치정보 전시 및 조회 기능 프론트엔드 | | 현재 단계 | 퍼블리싱 → 구현 전환 | --- ## 메인 프로젝트(mda-react-front) 기술 스택 | 항목 | 기술 | |------|------| | 지도 엔진 | OpenLayers 9.2.4 | | 실시간 렌더링 | Deck.gl 9.0.38 (GPU) | | UI 프레임워크 | React 18.2.0 | | 상태 관리 | Zustand 4.5.2 | | 라우팅 | React Router 6.15.0 | | 데이터 페칭 | React Query 4.32.6 | | 실시간 통신 | STOMP WebSocket | | 번들러 | Vite 5.2.10 | | 타입 | TypeScript 5.0.2 | --- ## 현재 프로젝트(dark) 기술 스택 | 항목 | 기술 | 변경 계획 | |------|------|----------| | 번들러 | CRA (react-scripts) | Vite 마이그레이션 검토 | | 언어 | JavaScript | TypeScript 도입 검토 | | 라우팅 | React Router 6.30.3 | 유지 | | 상태관리 | React useState | Zustand 도입 | | 스타일 | SCSS | 유지 | | 지도 | 미연동 | OpenLayers + Deck.gl | --- ## 프로젝트 구조 설계 ``` src/ ├── index.js # 앱 엔트리 포인트 ├── App.jsx # 라우트 정의 │ ├── publish/ # [퍼블리싱 영역] - 기존 퍼블리시 파일 │ ├── layouts/ # 퍼블리시 레이아웃 │ ├── pages/ # 퍼블리시 페이지 (Panel1~8 등) │ └── components/ # 퍼블리시 컴포넌트 │ ├── pages/ # [구현 영역] - 실제 페이지 │ ├── Home.jsx # 메인 페이지 │ ├── ship/ # 선박 관련 페이지 │ ├── satellite/ # 위성 관련 페이지 │ ├── weather/ # 기상 관련 페이지 │ └── analysis/ # 분석 관련 페이지 │ ├── components/ # [공통 컴포넌트] │ ├── common/ # 기본 UI 컴포넌트 │ │ ├── Button/ │ │ ├── Input/ │ │ ├── Modal/ │ │ └── ... │ ├── domain/ # 도메인별 컴포넌트 │ │ ├── ship/ # 선박 관련 │ │ ├── map/ # 지도 관련 │ │ └── ... │ └── layout/ # 레이아웃 컴포넌트 │ ├── Header/ │ ├── Sidebar/ │ └── ... │ ├── map/ # [지도 모듈] │ ├── MapContext.jsx # OpenLayers 맵 Context │ ├── MapProvider.jsx # 맵 Provider │ ├── layers/ # 레이어 정의 │ │ ├── baseLayer.js # 베이스맵 │ │ ├── shipLayer.js # 선박 레이어 │ │ └── ... │ ├── controls/ # 지도 컨트롤 │ └── utils/ # 지도 유틸리티 │ ├── stores/ # [Zustand 스토어] │ ├── mapStore.js # 지도 상태 │ ├── shipStore.js # 선박 상태 │ ├── filterStore.js # 필터 상태 │ └── uiStore.js # UI 상태 │ ├── api/ # [API 레이어] │ ├── client.js # API 클라이언트 │ ├── ship.js # 선박 API │ └── ... │ ├── hooks/ # [커스텀 훅] │ ├── useMap.js │ ├── useShip.js │ └── ... │ ├── utils/ # [유틸리티] │ ├── format.js │ ├── coordinate.js │ └── ... │ ├── types/ # [타입 정의] (TS 도입 시) │ └── ... │ ├── assets/ # [정적 자원] │ ├── images/ │ └── ... │ └── scss/ # [스타일] ├── base/ ├── components/ └── pages/ ``` --- ## 라우팅 구조 ``` / → 메인 (지도) ├── /ship → 선박 조회 ├── /satellite → 위성 ├── /weather → 기상 ├── /analysis → 분석 ├── /settings → 설정 └── /mypage → 마이페이지 /publish → 퍼블리싱 미리보기 ├── /publish/panel1 → 선박 패널 ├── /publish/panel2 → 위성 패널 ├── /publish/panel3 → 기상 패널 ├── /publish/panel4 → 분석 패널 ├── /publish/panel5 → 타임라인 ├── /publish/panel6 → AI모드 ├── /publish/panel7 → 리플레이 ├── /publish/panel8 → 항적조회 └── /publish/... → 기타 퍼블리시 페이지 ``` --- ## 기능 구현 로드맵 ### Phase 1: 기반 구축 - [ ] 프로젝트 구조 재편 (퍼블리시/구현 분리) - [ ] OpenLayers 연동 (베이스맵) - [ ] Zustand 스토어 설정 - [ ] 기본 레이아웃 구현 ### Phase 2: 지도 핵심 기능 - [ ] 지도 컨트롤 (줌, 패닝) - [ ] 레이어 관리 (토글, 순서) - [ ] 좌표 표시 - [ ] 축척 표시 ### Phase 3: 선박 표시 - [ ] Deck.gl 연동 - [ ] 선박 아이콘 렌더링 - [ ] 선박 클릭/호버 이벤트 - [ ] 선박 정보 팝업 ### Phase 4: 데이터 연동 - [ ] API 클라이언트 설정 - [ ] 선박 데이터 조회 - [ ] 필터링 기능 ### Phase 5: 추가 기능 - [ ] 항적 조회 - [ ] 기상 레이어 - [ ] 관심영역 설정 - [ ] 위성 영상 --- ## 메인 프로젝트 참조 파일 ### 지도 초기화 - `mda-react-front/src/map/MainMapContext.tsx` - OpenLayers 맵 초기화 ### 레이어 설정 - `mda-react-front/src/common/mapLayer.ts` - 베이스맵 타일 - `mda-react-front/src/common/targetLayer.ts` - 선박 레이어 - `mda-react-front/src/common/deck.ts` - Deck.gl 설정 ### 상태 관리 - `mda-react-front/src/shared/model/` - Zustand 스토어 ### 스타일 - `mda-react-front/src/map/control.css` - 지도 컨트롤 스타일 --- ## 개발 명령어 ```bash # 개발 서버 실행 npm start # 프로덕션 빌드 npm run build # 테스트 npm test ``` --- ## 세션 관리 - 세션 핸드오버: `.claude/SESSION_HANDOVER.md` - 자동 요약: 컨텍스트 95% 도달 시 자동 저장 --- ## 변경 이력 | 날짜 | 내용 | |------|------| | 2026-01-26 | 초기 프로젝트 분석 및 워크플로우 정의 |