# Wing - 해양 레이어 관리 시스템 ## 프로젝트 구조 ``` wing/ ├── backend/ # Express + SQLite 백엔드 │ ├── src/ │ │ ├── db/ # 데이터베이스 설정 및 시드 │ │ ├── routes/ # API 라우트 │ │ └── server.ts # 메인 서버 │ └── data/ # SQLite 데이터베이스 파일 ├── frontend/ # React + Vite 프론트엔드 │ └── src/ │ ├── components/ │ ├── data/ # 레이어 데이터 타입 │ ├── hooks/ # React Query 훅 │ └── services/ # API 클라이언트 └── LayerList.csv # 원본 레이어 데이터 ``` ## 설치 및 실행 ### 1. 백엔드 설정 ```bash cd backend # 의존성 설치 npm install # 데이터베이스 시드 (CSV를 DB로 변환) npm run db:seed # 개발 서버 실행 npm run dev ``` 백엔드 서버는 `http://localhost:3001`에서 실행됩니다. ### 2. 프론트엔드 설정 ```bash cd frontend # 의존성 설치 (아직 안 했다면) npm install # 개발 서버 실행 npm run dev ``` 프론트엔드는 `http://localhost:5173`에서 실행됩니다. ## API 엔드포인트 ### 레이어 관리 - `GET /api/layers` - 모든 레이어 조회 - `GET /api/layers/:id` - 특정 레이어 조회 - `GET /api/layers/tree/all` - 계층 구조 레이어 트리 조회 - `GET /api/layers/wms/all` - WMS 레이어만 조회 - `GET /api/layers/level/:level` - 특정 레벨의 레이어 조회 - `GET /api/layers/children/:parentId` - 특정 부모의 자식 레이어 조회 ## 데이터베이스 스키마 ```sql CREATE TABLE layers ( cmn_cd TEXT PRIMARY KEY, -- 레이어 코드 up_cmn_cd TEXT, -- 부모 레이어 코드 cmn_cd_full_nm TEXT NOT NULL, -- 전체 이름 cmn_cd_nm TEXT NOT NULL, -- 레이어 이름 cmn_cd_level INTEGER NOT NULL, -- 레벨 (1-7) clnm TEXT, -- WMS 레이어 이름 FOREIGN KEY (up_cmn_cd) REFERENCES layers(cmn_cd) ); ``` ## 프론트엔드에서 사용하기 ### React Query 훅 사용 ```typescript import { useLayers, useWMSLayers } from './hooks/useLayers' function MyComponent() { const { data: layers, isLoading, error } = useLayers() const { data: wmsLayers } = useWMSLayers() if (isLoading) return