# Folder Map — PROJECT_MAP.md 생성 및 유지 가이드 Claude Code가 세션 간 프로젝트 구조를 기억하기 위한 `PROJECT_MAP.md` 시스템. --- ## PROJECT_MAP.md 란 프로젝트 루트에 위치하는 **폴더 구조 메모리 파일**이다. 모든 에이전트가 작업 시작 시 이 파일을 먼저 읽어 "어떤 폴더에 무엇이 있는지" 파악한다. **왜 필요한가:** Claude Code는 세션마다 새로 시작하므로, 프로젝트 구조를 매번 탐색하면 토큰 낭비가 크다. PROJECT_MAP.md 한 파일만 읽으면 전체 구조를 즉시 파악할 수 있다. --- ## 초기 생성 절차 프로젝트 루트에 PROJECT_MAP.md가 없을 때 실행한다: 1. 프로젝트 루트에서 최상위 폴더 목록 스캔 2. 각 폴더의 목적을 파악 (package.json, build.gradle, pubspec.yaml 등 메타파일 기준) 3. 아래 템플릿으로 PROJECT_MAP.md 생성 --- ## PROJECT_MAP.md 템플릿 (React + Spring Boot + Mobile) ```markdown # PROJECT_MAP > 마지막 업데이트: {YYYY-MM-DD HH:MM} > 스택: React {version} | Spring Boot {version} | {Mobile Framework} {version} > 업데이트 방법: "PROJECT_MAP 업데이트해줘" 또는 zio-harness 실행 시 자동 갱신 ## 프로젝트 구조 ### 루트 | 파일/폴더 | 용도 | |----------|------| | `frontend/` | React 웹 프론트엔드 | | `backend/` | Spring Boot 백엔드 API | | `mobile/` | 모바일 앱 (React Native / Flutter) | | `e2e/` | Playwright E2E 테스트 | | `docs/` | 프로젝트 문서 | | `docker-compose.yml` | 로컬 개발 환경 | | `PROJECT_MAP.md` | 이 파일 — 폴더 구조 메모리 | ### frontend/ (React) | 경로 | 용도 | |------|------| | `src/pages/` | 페이지 컴포넌트 (라우트 단위) | | `src/components/` | 공유 UI 컴포넌트 | | `src/hooks/` | 커스텀 훅 | | `src/store/` | 상태 관리 (Zustand / Redux) | | `src/api/` | API 호출 함수 (Axios / fetch) | | `src/types/` | TypeScript 타입 정의 | | `src/utils/` | 유틸리티 함수 | | `public/` | 정적 에셋 | | `package.json` | 의존성 | | `.env.local` | 로컬 환경 변수 (VITE_API_URL 등) | ### backend/ (Spring Boot) | 경로 | 용도 | |------|------| | `src/main/java/{package}/controller/` | REST API 컨트롤러 | | `src/main/java/{package}/service/` | 비즈니스 로직 | | `src/main/java/{package}/repository/` | JPA 리포지토리 | | `src/main/java/{package}/domain/` | 엔티티 / 도메인 모델 | | `src/main/java/{package}/dto/` | Request / Response DTO | | `src/main/java/{package}/config/` | Spring 설정 (Security, CORS 등) | | `src/main/java/{package}/exception/` | 예외 처리 | | `src/main/resources/application.yml` | 앱 설정 | | `src/main/resources/db/migration/` | Flyway DB 마이그레이션 | | `src/test/` | 단위/통합 테스트 | | `build.gradle` | 의존성 | ### mobile/ (React Native / Flutter) | 경로 | 용도 | |------|------| | `src/screens/` | 화면 컴포넌트 | | `src/navigation/` | 네비게이션 설정 | | `src/components/` | 공유 UI 컴포넌트 | | `src/api/` | API 클라이언트 | | `src/store/` | 상태 관리 | | `src/types/` | 타입 정의 | | `android/` | Android 네이티브 코드 | | `ios/` | iOS 네이티브 코드 | ### e2e/ (Playwright) | 경로 | 용도 | |------|------| | `tests/` | 테스트 파일 | | `pages/` | 페이지 오브젝트 | | `fixtures/` | 테스트 픽스처 | | `playwright.config.ts` | Playwright 설정 | ## 핵심 컨벤션 - **API URL 패턴**: `GET /api/v1/{resource}`, `POST /api/v1/{resource}` - **컴포넌트 네이밍**: PascalCase (예: `UserProfile.tsx`) - **훅 네이밍**: `use` 접두사 (예: `useAuth.ts`) - **서비스 네이밍**: `{Resource}Service.java` - **DTO 네이밍**: `{Action}{Resource}Request.java`, `{Resource}Response.java` ## 환경 변수 | 변수 | 위치 | 설명 | |------|------|------| | `VITE_API_URL` | frontend/.env.local | 백엔드 API 주소 | | `DB_URL` | backend/application.yml | 데이터베이스 주소 | | `JWT_SECRET` | backend/application.yml | JWT 서명 키 | ## 최근 변경 이력 | 날짜 | 변경 내용 | 담당 에이전트 | |------|----------|--------------| | {YYYY-MM-DD} | 초기 맵 생성 | analyst | ``` --- ## 업데이트 규칙 다음 상황에서 PROJECT_MAP.md를 업데이트한다: 1. **새 폴더 생성** → 해당 폴더 행 추가 2. **새 컨벤션 발견** → 핵심 컨벤션 섹션에 추가 3. **새 환경 변수 추가** → 환경 변수 테이블 업데이트 4. **구조 변경** → 해당 섹션 수정 업데이트 시 `마지막 업데이트` 날짜와 최근 변경 이력을 항상 갱신한다. --- ## 빠른 파악 프로토콜 에이전트가 새 작업을 시작할 때: ``` 1. PROJECT_MAP.md 읽기 (없으면 생성) 2. 작업과 관련된 폴더 파악 3. 해당 폴더만 탐색 (전체 탐색 금지) 4. 작업 완료 후 새 파일/폴더가 생겼으면 PROJECT_MAP.md 갱신 ``` 이 순서를 지키면 탐색 토큰을 70% 이상 절약할 수 있다.