- harness·zio-harness·proposal-builder·zioinfo → plugins/zioinfo (git mv 히스토리 보존) - 스킬 4·커맨드 3(/zioinfo:pmo·proposal·wiki)·에이전트 15·graphify 훅·knowledge 통합 - 신규: /zioinfo:wiki (graphify LLM wiki — graphify-out/wiki/ 커뮤니티별 아티클) - 신규: ZIO WISE 테마 (themes/zioinfo.json, experimental) - manifest 최신화: $schema·displayName(ZIO INFOTECH Suite)·experimental.themes - marketplace.json 단일 엔트리, 루트 plugin.json 제거 - CLAUDE.md·PROJECT_MAP·docs/plugins.md·README 3종·CHANGELOG·설치가이드 pptx 재구성 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
4.9 KiB
4.9 KiB
Folder Map — PROJECT_MAP.md 생성 및 유지 가이드
Claude Code가 세션 간 프로젝트 구조를 기억하기 위한 PROJECT_MAP.md 시스템.
PROJECT_MAP.md 란
프로젝트 루트에 위치하는 폴더 구조 메모리 파일이다. 모든 에이전트가 작업 시작 시 이 파일을 먼저 읽어 "어떤 폴더에 무엇이 있는지" 파악한다.
왜 필요한가: Claude Code는 세션마다 새로 시작하므로, 프로젝트 구조를 매번 탐색하면 토큰 낭비가 크다. PROJECT_MAP.md 한 파일만 읽으면 전체 구조를 즉시 파악할 수 있다.
초기 생성 절차
프로젝트 루트에 PROJECT_MAP.md가 없을 때 실행한다:
- 프로젝트 루트에서 최상위 폴더 목록 스캔
- 각 폴더의 목적을 파악 (package.json, build.gradle, pubspec.yaml 등 메타파일 기준)
- 아래 템플릿으로 PROJECT_MAP.md 생성
PROJECT_MAP.md 템플릿 (React + Spring Boot + Mobile)
# 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. PROJECT_MAP.md 읽기 (없으면 생성)
2. 작업과 관련된 폴더 파악
3. 해당 폴더만 탐색 (전체 탐색 금지)
4. 작업 완료 후 새 파일/폴더가 생겼으면 PROJECT_MAP.md 갱신
이 순서를 지키면 탐색 토큰을 70% 이상 절약할 수 있다.