From 8876998acd3a85547b3b81897edbcf5657bbffc3 Mon Sep 17 00:00:00 2001 From: gil Date: Thu, 21 May 2026 21:56:04 +0900 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=9D=20docs:=20=EC=97=AC=EB=9F=AC=20?= =?UTF-8?q?=EB=AC=B8=EC=84=9C=20=EB=B0=8F=20=ED=8C=8C=EC=9D=BC=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .DS_Store | Bin 10244 -> 10244 bytes .claude/project/dreaming-context.md | 59 + .claude/rules/automation-guide.md | 107 + .claude/rules/claude-workflow.md | 62 + .claude/rules/coding-conventions.md | 50 + .claude/rules/commit-pr.md | 83 + .claude/rules/framework-rules.md | 47 + .claude/scripts/init-project.sh | 96 + .claude/scripts/install.sh | 209 ++ .claude/scripts/link-skills.sh | 139 ++ .claude/scripts/update.sh | 36 + .claude/skills/.DS_Store | Bin 6148 -> 6148 bytes .claude/skills/dev-api-state/SKILL.md | 150 ++ .claude/skills/dev-component/SKILL.md | 125 ++ .claude/skills/dev-docs/SKILL.md | 128 ++ .claude/skills/dev-storybook/SKILL.md | 149 ++ .claude/skills/dev-unit-test/SKILL.md | 160 ++ .claude/skills/dreaming/SKILL.md | 21 + .claude/skills/dreaming/scripts/dreaming.js | 369 +++ .claude/skills/markup-base/SKILL.md | 125 ++ .claude/skills/markup-figma/SKILL.md | 107 + .claude/skills/markup-promotion/SKILL.md | 138 ++ .claude/skills/security-review/SKILL.md | 141 ++ .claude/skills/squad-orchestration/SKILL.md | 26 + .../scripts/squad-orchestrator.js | 275 +++ .claude/skills/verify-a11y/SKILL.md | 130 ++ .claude/skills/verify-perf/SKILL.md | 141 ++ .claude/skills/verify-requirement/SKILL.md | 90 + .claude/skills/verify-seo-geo/SKILL.md | 143 ++ .claude/skills/work-code-reviewer/SKILL.md | 109 + .claude/skills/work-mr-reviewer/SKILL.md | 111 + .omc/project-memory.json | 116 + .../082bc0a1-f53c-41d5-8f6c-90b000014186.json | 8 + .../2f3f79c0-ebbd-4d15-a4d8-d9b3a59f53e5.json | 8 + .../7943f1a4-77eb-4ed3-8390-0307b53dde90.json | 8 + .../hud-state.json | 6 + .../hud-state.json | 6 + .../hud-state.json | 6 + CLAUDE.md | 41 + ...7.01 AI 활용 - CBO-플랫폼서비스개발담당.md | 85 - docs/fe-ai-reference-flow 2.html | 794 ------- docs/fe-ai-reference-flow.html | 794 ------- docs/fe-ai-rules.html | 612 ----- docs/fe-ai-workflow.html | 800 ------- session-report-20260516-1041.html | 575 +++++ session-report-20260516-1137.html | 1978 +++++++++++++++++ skills/dreaming/SKILL.md | 21 + skills/dreaming/scripts/dreaming.js | 369 +++ skills/squad-orchestration/SKILL.md | 26 + .../docs/automation-guide.md | 107 + .../scripts/squad-orchestrator.js | 275 +++ 51 files changed, 7076 insertions(+), 3085 deletions(-) create mode 100644 .claude/project/dreaming-context.md create mode 100644 .claude/rules/automation-guide.md create mode 100644 .claude/rules/claude-workflow.md create mode 100644 .claude/rules/coding-conventions.md create mode 100644 .claude/rules/commit-pr.md create mode 100644 .claude/rules/framework-rules.md create mode 100755 .claude/scripts/init-project.sh create mode 100755 .claude/scripts/install.sh create mode 100755 .claude/scripts/link-skills.sh create mode 100755 .claude/scripts/update.sh create mode 100644 .claude/skills/dev-api-state/SKILL.md create mode 100644 .claude/skills/dev-component/SKILL.md create mode 100644 .claude/skills/dev-docs/SKILL.md create mode 100644 .claude/skills/dev-storybook/SKILL.md create mode 100644 .claude/skills/dev-unit-test/SKILL.md create mode 100644 .claude/skills/dreaming/SKILL.md create mode 100755 .claude/skills/dreaming/scripts/dreaming.js create mode 100644 .claude/skills/markup-base/SKILL.md create mode 100644 .claude/skills/markup-figma/SKILL.md create mode 100644 .claude/skills/markup-promotion/SKILL.md create mode 100644 .claude/skills/security-review/SKILL.md create mode 100644 .claude/skills/squad-orchestration/SKILL.md create mode 100755 .claude/skills/squad-orchestration/scripts/squad-orchestrator.js create mode 100644 .claude/skills/verify-a11y/SKILL.md create mode 100644 .claude/skills/verify-perf/SKILL.md create mode 100644 .claude/skills/verify-requirement/SKILL.md create mode 100644 .claude/skills/verify-seo-geo/SKILL.md create mode 100644 .claude/skills/work-code-reviewer/SKILL.md create mode 100644 .claude/skills/work-mr-reviewer/SKILL.md create mode 100644 .omc/project-memory.json create mode 100644 .omc/sessions/082bc0a1-f53c-41d5-8f6c-90b000014186.json create mode 100644 .omc/sessions/2f3f79c0-ebbd-4d15-a4d8-d9b3a59f53e5.json create mode 100644 .omc/sessions/7943f1a4-77eb-4ed3-8390-0307b53dde90.json create mode 100644 .omc/state/sessions/2f3f79c0-ebbd-4d15-a4d8-d9b3a59f53e5/hud-state.json create mode 100644 .omc/state/sessions/7943f1a4-77eb-4ed3-8390-0307b53dde90/hud-state.json create mode 100644 .omc/state/sessions/8c56053b-8d23-4314-926d-5895c6c27fd9/hud-state.json delete mode 100644 docs/WDG00.04.02.06.07.01 AI 활용 - CBO-플랫폼서비스개발담당.md delete mode 100644 docs/fe-ai-reference-flow 2.html delete mode 100644 docs/fe-ai-reference-flow.html delete mode 100644 docs/fe-ai-rules.html delete mode 100644 docs/fe-ai-workflow.html create mode 100644 session-report-20260516-1041.html create mode 100644 session-report-20260516-1137.html create mode 100644 skills/dreaming/SKILL.md create mode 100755 skills/dreaming/scripts/dreaming.js create mode 100644 skills/squad-orchestration/SKILL.md create mode 100644 skills/squad-orchestration/docs/automation-guide.md create mode 100755 skills/squad-orchestration/scripts/squad-orchestrator.js diff --git a/.DS_Store b/.DS_Store index b607d781ce9134bc52557a782d3c45e6c454e9d9..fde32056833236947b5b3737336dbd5c64bcc384 100644 GIT binary patch literal 10244 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 Uoyaf$(_xKz-OpS5|Frhu6H(tT`v3p{ diff --git a/.claude/project/dreaming-context.md b/.claude/project/dreaming-context.md new file mode 100644 index 0000000..20708a0 --- /dev/null +++ b/.claude/project/dreaming-context.md @@ -0,0 +1,59 @@ +# 🧠 프로젝트 자율 인지 메모리 (Dreaming Context) + +이 파일은 `dreaming.js` 스크립트에 의해 프로젝트 코드베이스를 분석하여 자동 생성되었습니다. +Claude Code가 프로젝트의 실시간 코드 구조, 사용 중인 스토어, 컴포넌트 레이아웃, 그리고 최신 개발 흐름을 완벽히 인지하도록 돕습니다. + +* **최종 동기화 시간:** 2026. 5. 21. 오후 9:20:21 (Asia/Seoul) + +--- + +## 🏗 프로젝트 정보 +* **프로젝트명:** `Unknown Project` (v1.0.0) +* **핵심 프레임워크:** `Unknown` +* **기술 스택 라이브러리:** + - (감지된 주요 라이브러리 없음) + +--- + +## 📁 디렉토리 구조 및 컴포넌트 현황 +현재 활성화되어 있는 프로젝트 레이아웃 정보입니다. + +| 디렉토리 | 활성 여부 | 파일 개수 | 주요 샘플 파일 (최대 5개) | +|---|---|---|---| +| `components/` | ❌ | 0개 | - | +| `composables/` | ❌ | 0개 | - | +| `stores/` | ❌ | 0개 | - | +| `pages/` | ❌ | 0개 | - | +| `server/` | ❌ | 0개 | - | +| `layouts/` | ❌ | 0개 | - | +| `middleware/` | ❌ | 0개 | - | +| `plugins/` | ❌ | 0개 | - | +| `types/` | ❌ | 0개 | - | +| `assets/` | ❌ | 0개 | - | + +--- + +## 🍍 액티브 Pinia 스토어 목록 +현재 코드베이스에 존재하는 글로벌 상태 저장소들의 템플릿 정보입니다. 새 기능을 개발할 때 아래 스토어를 재사용하거나 참고하세요. + +*감지된 Pinia 스토어가 없습니다. (stores/ 디렉토리 없음 혹은 비어있음)* + +--- + +## 🎣 커스텀 Composable (useXxx) 목록 +다양한 비즈니스 로직과 부수효과를 격리해 둔 커스텀 훅 목록입니다. 컴포넌트 내부에서 비즈니스 로직을 직접 짜기 전, 아래 훅들의 재사용 가능성을 먼저 타진하세요. + +*감지된 커스텀 Composable이 없습니다. (composables/ 디렉토리 없음 혹은 비어있음)* + +--- + +## 🧪 유닛 테스트 통계 +현재까지 구축된 테스트 커버리지 현황입니다. +* **감지된 테스트 파일 수:** `0개` + *(새 기능을 추가할 때 반드시 Vitest 규격의 유닛 테스트를 함께 작성해야 함)* + +--- + +## 🛠 실행 가능한 스크립트 (package.json) +프로젝트 구동 및 테스트 검증을 위해 사용 가능한 명령어 리스트입니다. +- 스크립트 없음 diff --git a/.claude/rules/automation-guide.md b/.claude/rules/automation-guide.md new file mode 100644 index 0000000..1c35041 --- /dev/null +++ b/.claude/rules/automation-guide.md @@ -0,0 +1,107 @@ +# 🤖 프론트엔드 에이전트 자동화 시스템 가이드 + +이 문서는 `gameservice-fe-agent` 패키지에 탑재된 두 가지 핵심 자동화 프로세스—**프로젝트 자율 인지(Dreaming) 시스템** 및 **AI 개발 스쿼드(Squad) 오케스트레이션**의 개념과 실행 방법을 상세히 가이드합니다. + +이 도구들은 일회성(Stateless) AI 코드 작성의 한계를 넘어, **지속성 있는 컨벤션 수호자(Convention Guardian)**로 동작하고 복잡한 컴포넌트를 **병렬 전문 역할 분담 스쿼드**를 통해 해결하는 것을 목적으로 합니다. + +--- + +## 🧠 1. "AI 코더"에서 "상태 저장형 컨벤션 가디언"으로 (Dreaming) + +### 💡 도입 배경 및 개념 +일반적인 LLM 코딩 에이전트는 프롬프트를 보낼 때마다 컨텍스트가 초기화되는 **단발성(Stateless)** 모델로 동작합니다. 이 때문에 기존 프로젝트의 폴더 구조, 이미 만들어진 커스텀 Composable(useXxx), 활성화된 Pinia 스토어 목록, 패키지 버전 등을 매번 인지하지 못해 불필요한 코드를 중복 구현하거나 기존 컨벤션을 깨는 실수를 저지릅니다. + +**Dreaming 자동화 시스템**은 에이전트가 "코드베이스 전체를 정기적으로 자율 성찰(Self-reflection)"하도록 만드는 로컬 구현체입니다. `dreaming.js`를 구동하면 프로젝트의 상태를 휴리스틱하게 분석하여 `.claude/project/dreaming-context.md` 파일에 기록하고, `CLAUDE.md` 수입 선언을 통해 에이전트가 시작부터 이 최신 상태를 인지하게 만듭니다. + +### 🛠 실행 및 연동 방법 + +#### ① 실행 명령어 +프로젝트 루트 경로에서 아래 스크립트를 구동합니다: +```bash +node .claude/skills/dreaming/scripts/dreaming.js +``` + +#### ② 자동 수행되는 태스크 +1. `package.json` 파싱: 프레임워크 버전, 핵심 기술 스택(Nuxt, Pinia, Tailwind, Vitest 등), 실행 가능한 스크립트 명령어 수집. +2. 디렉토리 구조 스캔: 활성화된 디렉토리와 소속 파일 개수, 구조적 예시 목록 도출. +3. **Pinia 스토어 자율 추출:** `stores/` 내부의 파일들을 분석하여 각 스토어의 ID, 반응형 상태(state/computed), 비즈니스 함수(actions) 목록을 정밀 인지. +4. **커스텀 Composable 자율 추출:** `composables/` 내부의 `useXxx` 스타일 컴포저블을 검출해 노출 함수 리스트 확보. +5. **유닛 테스트 통계 파싱:** 구축된 테스트 파일 목록 및 통계 추출. +6. **마크다운 출력 및 자동 임포트:** 수집된 정보를 마크다운 리포트로 자동 빌드해 `.claude/project/dreaming-context.md` 파일에 덮어쓰고, 루트의 `CLAUDE.md`에 `@.claude/project/dreaming-context.md` 임포트 구문이 없으면 이를 자동으로 연결합니다. + +### 📌 시니어 FE 관점의 기대 효과 +* **중복 코드 생성 전면 억제:** 에이전트가 이미 존재하는 Pinia 스토어나 커스텀 훅을 즉시 찾아내기 때문에, 동일한 API 바인딩이나 헬퍼 함수를 이중으로 작성하지 않습니다. +* **프로젝트 맞춤형 가상 주니어화:** 며칠 쉬고 오거나 세션이 만료되더라도, 에이전트가 단 1초 만에 프로젝트의 최신 스냅샷을 뇌리에 새긴 상태(Stateful)로 지능적인 보조를 시작합니다. + +--- + +## 👥 2. "AI 한 명과 대화"가 아닌 "AI 개발 스쿼드(Squad) 오케스트레이션" + +### 💡 도입 배경 및 개념 +아무리 성능이 뛰어난 모델이라도 템플릿 마크업 작성, 복잡한 Tailwind 스타일링, WCAG 2.1 AA 접근성 마크업, 그리고 Vitest 단위 테스트 작성을 한 번에 지시하면 문맥 누락이나 결함(Bug)이 발생하기 마련입니다. + +**스쿼드 오케스트레이션**은 하나의 피처 요청을 **3인의 가상 전문 개발 에이전트**로 쪼개어 단계별/병렬 협업 파이프라인으로 수행하는 시스템입니다. 시니어 프론트엔드 엔지니어(Gil)는 코드 작성에 시간을 소모하는 대신, 이 전문 에이전트들을 조율하고 합산 결과물의 비즈니스 사양과 렌더링을 최종 승인하는 **오케스트레이터(Orchestrator)**의 최고 존엄 지위를 갖게 됩니다. + +``` + ┌──────────────────────┐ + │ Gil (Orchestrator) │ + └──────────┬───────────┘ + │ (스쿼드 생성 지시) + ▼ +┌────────────────────────────────────────────────────────┐ +│ squad-orchestrator.js │ +└────────────┬───────────────┬───────────────┬───────────┘ + │ │ │ + ▼ ▼ ▼ + ┌──────────────┐┌──────────────┐┌──────────────┐ + │ Role 1 ││ Role 2 ││ Role 3 │ + │ UI/마크업 ││ 웹 접근성 ││ QA/단위테스트│ + │ 스페셜리스트 ││ 스페셜리스트 ││ 스페셜리스트 │ + └───────┬──────┘└───────┬──────┘└───────┬──────┘ + │ │ │ + ▼ ▼ ▼ + [구조 & 뼈대 빌드] [ARIA & 키보드 주입] [Vitest 케이스 PASS] +``` + +### 🛠 실행 및 연동 방법 + +#### ① 스쿼드 조직하기 (인터랙션/CLI 겸용) +새로운 피처나 컴포넌트를 설계할 때 아래 스크립트를 구동합니다: + +* **대화형 모드로 조직하기:** + ```bash + node .claude/skills/squad-orchestration/scripts/squad-orchestrator.js + ``` + 명령어 실행 후 터미널의 질문에 따라 컴포넌트 이름과 요구 스펙을 입력하면 스쿼드가 즉시 조직됩니다. + +* **CLI 인자로 한 번에 조직하기:** + ```bash + node .claude/skills/squad-orchestration/scripts/squad-orchestrator.js --name "UserScoreCard" --spec "유저 프로필과 전적, 랭킹을 보여주고 점수에 따라 테두리 색상이 바뀌는 컴포넌트 구현" + ``` + +#### ② 스쿼드 파일 구성 및 역할 +명령이 끝나면 루트에 `squad//` 폴더가 자동 생성됩니다. +* **`tasks/01_markup_agent.md` (Role 1):** Vue 3 템플릿, 데이터 상태 설계, Tailwind 반응형 레이아웃 구성 집중 지시서. +* **`tasks/02_a11y_agent.md` (Role 2):** WCAG 2.1 AA 기준 준수, ARIA 역할(role), 스크린 리더용 라벨링, 키보드 인터랙션 집중 보완 및 Surgical 정밀 수정 지시서. +* **`tasks/03_test_agent.md` (Role 3):** 생성된 컴포넌트 사양 검증을 위한 `*.spec.ts` 단위 테스트 코드 및 Mock 데이터 구축 지시서. +* **`run-squad.js`:** Claude Code CLI를 연속 구동하여 세 단계의 코딩 에이전트를 차례로 자동 실행하고, 마지막에 Vitest 테스트 엔진을 가동하여 검증을 완수해 내는 마스터 러너 스크립트. + +#### ③ 스쿼드 자동 파이프라인 가동 +스쿼드가 세팅되면, 해당 컴포넌트 폴더 내의 마스터 스크립트를 즉시 가동하여 오토파일럿 개발을 시작할 수 있습니다: +```bash +node squad//run-squad.js +``` + +### 📌 시니어 FE 관점의 기대 효과 +* **결점 제로(Defect-Free) 컴포넌트 완성:** 각 역할군이 하나의 관점(UI 구조 -> 접근성 -> 테스트 품질)에 완벽히 몰입하여 단계별로 코드를 가꾸고 다듬기 때문에, 품질적으로 완벽무결한 컴포넌트가 조립됩니다. +* **테스트 주도 개발(TDD)의 정수 체득:** 최종 테스트가 완료될 때까지 에이전트 루프가 가동되므로, 코드를 올리기도 전에 모든 단위 동작과 가시적인 비즈니스 엣지 케이스들의 통과를 보장받은 채 개발이 마무리됩니다. + +--- + +## 🚀 실무 도입 시 베스트 프랙티스 + +1. **지속성 확보를 위한 git ignore 추가 권장:** + `squad/` 폴더 내의 작업 지시서나 가이드 파일들은 개발 도중의 중간 생성물(Task sheets)에 해당하므로, 프로젝트의 메인 git 히스토리를 깔끔하게 유지하기 위해 `.gitignore`에 `squad/` 경로를 추가하는 것을 추천합니다. + +2. **개발 전 dreaming 구동 루틴화:** + 새로운 브랜치를 따거나 대규모 PR을 머지받았을 때는 에이전트에게 일을 시키기 전 `node .claude/skills/dreaming/scripts/dreaming.js`를 한 번 실행해 주는 것이 좋습니다. 에이전트의 뇌 스냅샷을 1초 만에 최신화해 줍니다. diff --git a/.claude/rules/claude-workflow.md b/.claude/rules/claude-workflow.md new file mode 100644 index 0000000..680a759 --- /dev/null +++ b/.claude/rules/claude-workflow.md @@ -0,0 +1,62 @@ +# Claude 작업 방식 지침 + +이 문서는 Claude가 팀 프로젝트에서 작업할 때 따라야 할 일반적인 원칙을 정의합니다. + +## 기본 원칙 + +1. **기존 코드 존중**: 수정 전에 관련 파일과 주변 컨벤션을 먼저 파악합니다. +2. **최소 변경**: 요구사항을 충족하는 최소한의 변경만 수행합니다. 관련 없는 리팩토링은 별도 작업으로 분리합니다. +3. **가정 대신 질문**: 요구사항이 모호하면 추측하지 말고 사용자에게 확인합니다. +4. **근거 있는 수정**: 코드 변경의 이유를 설명할 수 있어야 합니다. + +## 작업 순서 + +1. **탐색 (Explore)** + - 관련 파일을 먼저 읽고 프로젝트 구조를 파악합니다. + - 유사한 패턴이 이미 존재하는지 확인합니다. + +2. **계획 (Plan)** + - 여러 파일을 수정하거나 복잡한 작업이면 할 일 목록을 만들어 공유합니다. + - 아키텍처에 영향을 주는 변경은 착수 전에 사용자 승인을 받습니다. + +3. **구현 (Implement)** + - 한 번에 하나의 논리적 변경에 집중합니다. + - 공통 지침과 프로젝트 지침을 모두 준수합니다. + +4. **검증 (Verify)** + - 린트 / 타입체크 / 빌드가 깨지지 않는지 확인합니다. + - 테스트가 있는 프로젝트라면 관련 테스트를 실행합니다. + - 수동 검증이 필요한 경우 확인 방법을 사용자에게 안내합니다. + +## 해서는 안 되는 것 + +- **임의 기능 추가 금지**: 사용자가 요청하지 않은 기능을 추가하지 않습니다. +- **기존 코드 대량 리팩토링 금지**: 요청 범위를 벗어나는 변경은 하지 않습니다. +- **주석 / 문서 임의 삭제 금지**: 불필요해 보여도 삭제 전 사용자에게 확인합니다. +- **비밀정보 출력 금지**: 환경변수, 키, 토큰 등은 코드에 하드코딩하지 않습니다. +- **의존성 버전 임의 변경 금지**: 요청이 없다면 `package.json`의 버전을 변경하지 않습니다. +- **강제 푸시 / 히스토리 재작성 금지**: `push --force`, `reset --hard` 등은 사용자의 명시적 요청 없이 실행하지 않습니다. + +## 커뮤니케이션 + +- 답변은 간결하게, 결론을 먼저 말합니다. +- 코드를 수정했다면 **어떤 파일을 어떻게 바꿨는지** 요약합니다. +- 불확실한 부분은 솔직하게 밝히고 대안을 제시합니다. +- 긴 설명보다 실제 결과물(코드/파일)을 우선합니다. + +## 파일 작업 원칙 + +- 새 파일 생성보다 **기존 파일 수정**을 우선합니다. +- README, 문서는 사용자가 명시적으로 요청했을 때만 생성합니다. +- 파일을 읽지 않고 수정하지 않습니다. +- 대량 변경 시에는 diff를 확인할 수 있도록 단계별로 진행합니다. + +## 질문이 필요한 상황 + +다음의 경우 반드시 사용자에게 확인을 요청합니다. + +- 요구사항의 일부가 불명확할 때 +- 여러 구현 방식이 있고 각각 장단점이 뚜렷할 때 +- 공통 지침과 프로젝트 지침이 충돌할 때 +- 파괴적 작업(파일 삭제, 데이터 마이그레이션, 스키마 변경 등)이 필요할 때 +- 외부 서비스 호출이나 결제 관련 작업일 때 diff --git a/.claude/rules/coding-conventions.md b/.claude/rules/coding-conventions.md new file mode 100644 index 0000000..1ecc347 --- /dev/null +++ b/.claude/rules/coding-conventions.md @@ -0,0 +1,50 @@ +# 코딩 컨벤션 + +## 기본 원칙 + +- **가독성 우선**: 영리한 코드보다 읽기 쉬운 코드를 선호합니다. +- **일관성 유지**: 기존 코드의 스타일을 먼저 관찰하고 그에 맞춥니다. +- **작은 단위**: 함수와 파일은 한 가지 책임만 지도록 작게 유지합니다. + +## 포맷팅 + +- 들여쓰기: 스페이스 2칸 (탭 사용 금지) +- 문자열: 싱글 쿼터(`'`) 사용, JSX/템플릿 속성값은 더블 쿼터(`"`) +- 세미콜론: 생략하지 않고 항상 작성 +- 줄 끝 공백 제거, 파일 끝 개행 1줄 유지 +- 한 줄 최대 100자 (초과 시 줄바꿈) +- Prettier 설정 파일(`.prettierrc`)이 있는 경우 해당 설정을 우선합니다. + +## 네이밍 + +- **변수/함수**: `camelCase` (예: `userProfile`, `fetchUserData`) +- **상수**: `UPPER_SNAKE_CASE` (예: `MAX_RETRY_COUNT`) +- **컴포넌트/클래스/타입**: `PascalCase` (예: `UserCard`, `OrderStatus`) +- **파일명** + - Vue 컴포넌트: `PascalCase.vue` (예: `UserCard.vue`) + - Composable: `use` 접두사 + `camelCase` (예: `useAuth.ts`) + - 일반 TS 모듈: `kebab-case.ts` (예: `format-date.ts`) +- **이벤트 핸들러**: `handle` 또는 `on` 접두사 (예: `handleClick`, `onSubmit`) +- **불리언**: `is`, `has`, `can`, `should` 접두사 (예: `isLoading`, `hasError`) + +## 타입 + +- `any` 사용 금지. 불가피할 경우 주석으로 이유를 남기고 `unknown`을 먼저 고려합니다. +- 함수 시그니처에는 매개변수와 반환 타입을 명시합니다. +- 공개 API(타 모듈에서 import 되는 것)는 반드시 타입을 export 합니다. +- 유니온 타입은 `as const` 또는 별도 타입 alias로 관리합니다. + +## 주석 + +- "무엇을" 보다 "왜"를 설명합니다. +- TODO/FIXME 주석에는 작성자와 날짜 또는 이슈 번호를 포함합니다. +- 공개 함수/컴포넌트에는 JSDoc 한 줄 설명을 권장합니다. + +## import 순서 + +1. 외부 라이브러리 (예: `vue`, `nuxt`) +2. 내부 절대 경로 (예: `~/components/...`) +3. 상대 경로 (예: `./utils`) +4. 타입 only import는 각 그룹 내에서 별도 블록으로 분리 + +그룹 사이에는 빈 줄을 한 줄 둡니다. diff --git a/.claude/rules/commit-pr.md b/.claude/rules/commit-pr.md new file mode 100644 index 0000000..d3a65f5 --- /dev/null +++ b/.claude/rules/commit-pr.md @@ -0,0 +1,83 @@ +# 커밋 / PR 규칙 + +## 커밋 메시지 + +[Conventional Commits](https://www.conventionalcommits.org/)를 따릅니다. + +``` +(): + + + +