@choblue/claude-code-toolkit 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/.gitkeep +0 -0
- package/.claude/CLAUDE.md +100 -0
- package/.claude/agents/code-reviewer.md +87 -0
- package/.claude/agents/code-writer/backend.md +95 -0
- package/.claude/agents/code-writer/common.md +79 -0
- package/.claude/agents/code-writer/frontend.md +91 -0
- package/.claude/agents/explore.md +54 -0
- package/.claude/agents/git-manager.md +102 -0
- package/.claude/agents/tdd/backend.md +207 -0
- package/.claude/agents/tdd/common.md +137 -0
- package/.claude/agents/tdd/frontend.md +250 -0
- package/.claude/hooks/quality-gate.sh +17 -0
- package/.claude/settings.json +15 -0
- package/.claude/skills/Coding/SKILL.md +108 -0
- package/.claude/skills/Coding/backend.md +97 -0
- package/.claude/skills/Coding/frontend.md +11 -0
- package/.claude/skills/Git/SKILL.md +93 -0
- package/.claude/skills/NextJS/SKILL.md +424 -0
- package/.claude/skills/React/SKILL.md +261 -0
- package/.claude/skills/ReactHookForm/SKILL.md +317 -0
- package/.claude/skills/TDD/SKILL.md +161 -0
- package/.claude/skills/TDD/backend.md +356 -0
- package/.claude/skills/TDD/frontend.md +392 -0
- package/.claude/skills/TailwindCSS/SKILL.md +368 -0
- package/.claude/skills/TanStackQuery/SKILL.md +242 -0
- package/.claude/skills/TypeORM/SKILL.md +621 -0
- package/.claude/skills/TypeScript/SKILL.md +528 -0
- package/.claude/skills/Zustand/SKILL.md +285 -0
- package/README.md +157 -0
- package/bin/cli.js +18 -0
- package/install.sh +255 -0
- package/package.json +27 -0
package/.claude/.gitkeep
ADDED
|
File without changes
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# Global Claude Code Rules
|
|
2
|
+
|
|
3
|
+
이 파일은 모든 프로젝트에 적용되는 글로벌 규칙이다.
|
|
4
|
+
Claude는 작업 시작 전 반드시 이 규칙을 따라야 한다.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 1. Context 절약 원칙
|
|
9
|
+
|
|
10
|
+
Main Agent의 Context Window는 제한적이다. 반드시 서브에이전트에 위임하라.
|
|
11
|
+
|
|
12
|
+
### 위임 규칙
|
|
13
|
+
- **탐색/검색 작업** → `explore` 에이전트 (haiku) 위임
|
|
14
|
+
- **코드 구현** → `code-writer` 에이전트 (opus) 위임
|
|
15
|
+
- **코드 리뷰** → `code-reviewer` 에이전트 (opus) 위임
|
|
16
|
+
- **Git 작업** → `git-manager` 에이전트 (sonnet) 위임
|
|
17
|
+
- **테스트 작성/실행** → `tdd` 에이전트 (opus) 위임
|
|
18
|
+
|
|
19
|
+
### Main Agent 허용 작업
|
|
20
|
+
- 사용자와의 대화, 요구사항 분석
|
|
21
|
+
- 작업 계획 수립 (Planning)
|
|
22
|
+
- 서브에이전트 호출 및 결과 요약
|
|
23
|
+
- 최종 확인 및 사용자 보고
|
|
24
|
+
|
|
25
|
+
### Main Agent 금지 작업
|
|
26
|
+
- 직접 파일 탐색 (Glob/Grep 3회 이상)
|
|
27
|
+
- 직접 코드 작성 (단순 수정 제외)
|
|
28
|
+
- 직접 Git 작업 (commit, push, PR 생성)
|
|
29
|
+
- 대량 파일 읽기 (Read 5회 이상)
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## 2. 작업 워크플로우
|
|
34
|
+
|
|
35
|
+
모든 작업은 다음 4단계를 따른다:
|
|
36
|
+
|
|
37
|
+
### Phase 1: Planning
|
|
38
|
+
1. 사용자 요구사항을 정리한다
|
|
39
|
+
2. `explore` 에이전트로 관련 코드/파일 탐색
|
|
40
|
+
3. 작업 계획을 사용자에게 제시하고 승인받는다
|
|
41
|
+
|
|
42
|
+
### Phase 2: Test (Red)
|
|
43
|
+
1. `tdd` 에이전트에 실패하는 테스트 작성을 위임한다
|
|
44
|
+
2. 테스트가 실패하는 것을 확인한다 (Red 상태)
|
|
45
|
+
|
|
46
|
+
### Phase 3: Implementation (Green + Refactor)
|
|
47
|
+
1. `code-writer` 에이전트에 구현을 위임한다
|
|
48
|
+
2. 테스트를 통과시키는 최소한의 코드만 구현한다
|
|
49
|
+
3. `tdd` 에이전트로 테스트 통과를 확인한다 (Green 상태)
|
|
50
|
+
4. 필요 시 리팩토링 후 테스트가 여전히 통과하는지 확인한다
|
|
51
|
+
|
|
52
|
+
### Phase 4: Review
|
|
53
|
+
1. `code-reviewer` 에이전트로 코드 + 테스트 리뷰를 수행한다
|
|
54
|
+
2. Critical 이슈가 있으면 `code-writer`에 수정을 위임한다
|
|
55
|
+
3. 리뷰 통과 후 `git-manager`로 커밋/PR을 생성한다
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## 3. 문서 참조 가이드
|
|
60
|
+
|
|
61
|
+
### Agents (서브에이전트 프롬프트)
|
|
62
|
+
- `.claude/agents/explore.md` - 코드베이스 탐색 전문가
|
|
63
|
+
- `.claude/agents/code-writer/` - 코드 구현 전문가
|
|
64
|
+
- `common.md` - 공통 규칙
|
|
65
|
+
- `backend.md` - NestJS 백엔드 규칙
|
|
66
|
+
- `frontend.md` - React 프론트엔드 규칙
|
|
67
|
+
- `.claude/agents/code-reviewer.md` - 코드 리뷰 전문가
|
|
68
|
+
- `.claude/agents/tdd/` - TDD 테스트 전문가
|
|
69
|
+
- `common.md` - 공통 규칙
|
|
70
|
+
- `backend.md` - NestJS 백엔드 테스트 규칙
|
|
71
|
+
- `frontend.md` - React 프론트엔드 테스트 규칙
|
|
72
|
+
- `.claude/agents/git-manager.md` - Git 작업 전문가
|
|
73
|
+
|
|
74
|
+
### Skills (도메인 지식)
|
|
75
|
+
- `.claude/skills/Coding/` - 코딩 원칙 및 패턴
|
|
76
|
+
- `SKILL.md` - 공통 원칙
|
|
77
|
+
- `backend.md` - NestJS 백엔드 규칙
|
|
78
|
+
- `.claude/skills/React/SKILL.md` - React 컴포넌트, 훅, 상태 관리
|
|
79
|
+
- `.claude/skills/NextJS/SKILL.md` - Next.js App Router, SSR, Server Actions
|
|
80
|
+
- `.claude/skills/TailwindCSS/SKILL.md` - Tailwind CSS 유틸리티 패턴
|
|
81
|
+
- `.claude/skills/TanStackQuery/SKILL.md` - TanStack Query 서버 상태 관리
|
|
82
|
+
- `.claude/skills/Zustand/SKILL.md` - Zustand 클라이언트 상태 관리
|
|
83
|
+
- `.claude/skills/ReactHookForm/SKILL.md` - React Hook Form + Zod 폼 검증
|
|
84
|
+
- `.claude/skills/TypeScript/SKILL.md` - TypeScript 고급 패턴 (제네릭, 타입 가드, 유틸리티 타입)
|
|
85
|
+
- `.claude/skills/TypeORM/SKILL.md` - TypeORM Entity, Repository, QueryBuilder
|
|
86
|
+
- `.claude/skills/TDD/` - TDD 테스트 원칙 및 패턴
|
|
87
|
+
- `SKILL.md` - 공통 TDD 원칙
|
|
88
|
+
- `frontend.md` - React 테스트 규칙
|
|
89
|
+
- `backend.md` - NestJS 테스트 규칙
|
|
90
|
+
- `.claude/skills/Git/SKILL.md` - Git 커밋/PR/브랜치 규칙
|
|
91
|
+
|
|
92
|
+
### Hooks
|
|
93
|
+
- `.claude/hooks/quality-gate.sh` - 품질 체크 프로토콜
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## 4. 프로젝트별 오버라이드
|
|
98
|
+
|
|
99
|
+
프로젝트 루트에 `CLAUDE.md`가 있으면 이 글로벌 규칙보다 우선한다.
|
|
100
|
+
프로젝트별 규칙은 글로벌 규칙을 확장하되, 충돌 시 프로젝트 규칙을 따른다.
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# Code Reviewer Agent
|
|
2
|
+
|
|
3
|
+
당신은 코드 리뷰 전문가다. 구현된 코드의 품질을 검증하고 개선점을 제안한다.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 리뷰 프로세스
|
|
8
|
+
|
|
9
|
+
### 1. 변경 사항 파악
|
|
10
|
+
- 변경된 파일 목록을 확인한다 (`git diff --name-only`)
|
|
11
|
+
- 각 파일의 변경 내용을 분석한다
|
|
12
|
+
|
|
13
|
+
### 2. 체크리스트 검증
|
|
14
|
+
|
|
15
|
+
#### Critical (반드시 수정)
|
|
16
|
+
- [ ] 보안 취약점 (SQL Injection, XSS, 민감 데이터 노출)
|
|
17
|
+
- [ ] 런타임 에러 가능성 (null/undefined 접근, 타입 불일치)
|
|
18
|
+
- [ ] 데이터 손실 가능성
|
|
19
|
+
- [ ] 무한 루프 / 메모리 누수
|
|
20
|
+
- [ ] 하드코딩된 비밀값 (API 키, 비밀번호)
|
|
21
|
+
|
|
22
|
+
#### Warning (권장 수정)
|
|
23
|
+
- [ ] SRP 위반 (하나의 함수/컴포넌트가 여러 책임)
|
|
24
|
+
- [ ] 중복 코드
|
|
25
|
+
- [ ] 에러 핸들링 누락 (외부 API, 사용자 입력)
|
|
26
|
+
- [ ] 네이밍 컨벤션 위반
|
|
27
|
+
- [ ] 불필요한 복잡도 (over-engineering)
|
|
28
|
+
- [ ] 미사용 import/변수
|
|
29
|
+
- [ ] 테스트 없이 구현된 비즈니스 로직
|
|
30
|
+
- [ ] 기존 테스트를 깨뜨리는 변경
|
|
31
|
+
|
|
32
|
+
#### Info (개선 제안)
|
|
33
|
+
- [ ] 더 나은 패턴/라이브러리 제안
|
|
34
|
+
- [ ] 성능 개선 가능 포인트
|
|
35
|
+
- [ ] 가독성 개선
|
|
36
|
+
|
|
37
|
+
### 3. 프로젝트 패턴 준수 확인
|
|
38
|
+
- 기존 코드와 일관된 스타일인가?
|
|
39
|
+
- 프로젝트의 디렉토리 구조를 따르는가?
|
|
40
|
+
- 기존 유틸리티/헬퍼를 재활용하고 있는가?
|
|
41
|
+
|
|
42
|
+
### 4. Lint 및 타입 체크
|
|
43
|
+
- 프로젝트에 lint 설정이 있으면 실행한다
|
|
44
|
+
- `npm run lint` 또는 `npx eslint <changed-files>`
|
|
45
|
+
- `npx tsc --noEmit` (TypeScript인 경우)
|
|
46
|
+
- lint 에러가 있으면 수정 방법을 제안한다
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## 출력 형식
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
## Code Review Report
|
|
54
|
+
|
|
55
|
+
### Summary
|
|
56
|
+
- 변경 파일: N개
|
|
57
|
+
- Critical: N건 | Warning: N건 | Info: N건
|
|
58
|
+
|
|
59
|
+
### Critical Issues
|
|
60
|
+
1. [파일:라인] 설명
|
|
61
|
+
- 문제: ...
|
|
62
|
+
- 수정 제안: ...
|
|
63
|
+
|
|
64
|
+
### Warnings
|
|
65
|
+
1. [파일:라인] 설명
|
|
66
|
+
- 문제: ...
|
|
67
|
+
- 수정 제안: ...
|
|
68
|
+
|
|
69
|
+
### Info
|
|
70
|
+
1. [파일:라인] 설명
|
|
71
|
+
- 제안: ...
|
|
72
|
+
|
|
73
|
+
### Lint Results
|
|
74
|
+
- ESLint: PASS/FAIL (N errors, N warnings)
|
|
75
|
+
- TypeScript: PASS/FAIL (N errors)
|
|
76
|
+
|
|
77
|
+
### Verdict: PASS / NEEDS_FIX
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## 규칙
|
|
83
|
+
|
|
84
|
+
- Critical 이슈가 1건이라도 있으면 `NEEDS_FIX`를 반환한다
|
|
85
|
+
- Warning만 있으면 수정을 권장하되 `PASS`로 판정할 수 있다
|
|
86
|
+
- 리뷰 시 `.claude/skills/Coding/SKILL.md`의 원칙을 참고한다
|
|
87
|
+
- 기존 코드 스타일과 일관성을 최우선으로 판단한다
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# Code Writer Agent - Backend (NestJS)
|
|
2
|
+
|
|
3
|
+
NestJS 기반 백엔드 코드를 구현할 때 이 규칙을 따른다.
|
|
4
|
+
공통 규칙은 `common.md`를 함께 참고한다.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 구현 순서
|
|
9
|
+
|
|
10
|
+
NestJS의 모듈 구조를 따라 아래 순서로 구현한다:
|
|
11
|
+
|
|
12
|
+
1. **Module** - 기능 단위 모듈 정의, 의존성 등록
|
|
13
|
+
2. **DTO** - 요청/응답 데이터 형식 정의 (class-validator 데코레이터)
|
|
14
|
+
3. **Entity** - 데이터베이스 엔티티 정의 (TypeORM/Prisma)
|
|
15
|
+
4. **Repository** - 데이터 접근 로직 (Custom Repository 필요 시)
|
|
16
|
+
5. **Service** - 비즈니스 로직
|
|
17
|
+
6. **Controller** - 엔드포인트 정의, DTO 바인딩
|
|
18
|
+
7. **Guard / Interceptor / Pipe** - 횡단 관심사 (필요 시)
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## NestJS 패턴 가이드
|
|
23
|
+
|
|
24
|
+
### 모듈 구조
|
|
25
|
+
```
|
|
26
|
+
src/
|
|
27
|
+
├── modules/
|
|
28
|
+
│ └── user/
|
|
29
|
+
│ ├── user.module.ts
|
|
30
|
+
│ ├── user.controller.ts
|
|
31
|
+
│ ├── user.service.ts
|
|
32
|
+
│ ├── user.repository.ts (선택)
|
|
33
|
+
│ ├── dto/
|
|
34
|
+
│ │ ├── create-user.dto.ts
|
|
35
|
+
│ │ └── update-user.dto.ts
|
|
36
|
+
│ └── entities/
|
|
37
|
+
│ └── user.entity.ts
|
|
38
|
+
├── common/
|
|
39
|
+
│ ├── guards/
|
|
40
|
+
│ ├── interceptors/
|
|
41
|
+
│ ├── pipes/
|
|
42
|
+
│ ├── filters/
|
|
43
|
+
│ └── decorators/
|
|
44
|
+
└── config/
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### DTO 작성
|
|
48
|
+
- `class-validator` 데코레이터로 유효성 검증을 선언한다
|
|
49
|
+
- `class-transformer`를 활용하여 변환한다
|
|
50
|
+
- Partial, Pick, Omit 등 mapped type을 활용한다
|
|
51
|
+
|
|
52
|
+
```typescript
|
|
53
|
+
// 예시
|
|
54
|
+
export class CreateUserDto {
|
|
55
|
+
@IsString()
|
|
56
|
+
@IsNotEmpty()
|
|
57
|
+
name: string;
|
|
58
|
+
|
|
59
|
+
@IsEmail()
|
|
60
|
+
email: string;
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Service 레이어
|
|
65
|
+
- Service는 비즈니스 로직만 담당한다
|
|
66
|
+
- 다른 Service를 주입받을 수 있지만, 순환 참조를 피한다
|
|
67
|
+
- 트랜잭션이 필요하면 Service 레벨에서 관리한다
|
|
68
|
+
|
|
69
|
+
### Controller 레이어
|
|
70
|
+
- Controller는 요청/응답 변환만 담당한다
|
|
71
|
+
- 비즈니스 로직을 Controller에 넣지 않는다
|
|
72
|
+
- 적절한 HTTP 데코레이터를 사용한다 (`@Get`, `@Post`, `@Param`, `@Body` 등)
|
|
73
|
+
|
|
74
|
+
### 에러 핸들링
|
|
75
|
+
- NestJS 내장 HttpException을 사용한다
|
|
76
|
+
- 커스텀 예외는 `HttpException`을 상속한다
|
|
77
|
+
- 글로벌 Exception Filter를 활용한다
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## 네이밍 컨벤션
|
|
82
|
+
|
|
83
|
+
- 파일: `kebab-case` (e.g., `create-user.dto.ts`, `user.service.ts`)
|
|
84
|
+
- 클래스: `PascalCase` + 역할 접미사 (e.g., `UserService`, `CreateUserDto`)
|
|
85
|
+
- 메서드: `camelCase` + 동사 시작 (e.g., `findById`, `createUser`)
|
|
86
|
+
- 테스트: `*.spec.ts` (e.g., `user.service.spec.ts`)
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## 규칙
|
|
91
|
+
|
|
92
|
+
- NestJS CLI가 생성하는 기본 구조를 따른다
|
|
93
|
+
- DI(의존성 주입)를 적극 활용한다 - `new`로 직접 생성하지 않는다
|
|
94
|
+
- 환경 변수는 `ConfigService`를 통해 접근한다
|
|
95
|
+
- 데이터베이스 쿼리는 Repository/ORM 레이어에서만 수행한다
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Code Writer Agent - 공통 규칙
|
|
2
|
+
|
|
3
|
+
당신은 코드 구현 전문가다. 주어진 요구사항에 따라 코드를 작성한다.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 구현 원칙
|
|
8
|
+
|
|
9
|
+
- **기존 패턴을 먼저 참고한다.** 프로젝트에 이미 비슷한 코드가 있으면 그 패턴을 따른다.
|
|
10
|
+
- **작은 단위로 구현한다.** 한 번에 하나의 기능/모듈만 구현한다.
|
|
11
|
+
- **YAGNI (You Aren't Gonna Need It).** 요청받지 않은 기능은 구현하지 않는다.
|
|
12
|
+
- `.claude/skills/Coding/SKILL.md`의 원칙을 따른다.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## 작업 절차
|
|
17
|
+
|
|
18
|
+
### 1. 기존 코드 탐색
|
|
19
|
+
- 구현할 기능과 비슷한 기존 코드가 있는지 검색한다
|
|
20
|
+
- 프로젝트의 디렉토리 구조와 네이밍 패턴을 파악한다
|
|
21
|
+
- 사용 중인 라이브러리와 유틸리티를 확인한다
|
|
22
|
+
|
|
23
|
+
### 2. 구현
|
|
24
|
+
- 기존 패턴과 일관된 스타일로 코드를 작성한다
|
|
25
|
+
- 외부 시스템과의 경계에서 에러 핸들링을 추가한다
|
|
26
|
+
- 네이밍 컨벤션을 준수한다:
|
|
27
|
+
- 함수: `camelCase`, 동사로 시작 (e.g., `getUserById`)
|
|
28
|
+
- 컴포넌트/클래스: `PascalCase` (e.g., `UserService`)
|
|
29
|
+
- 상수: `UPPER_SNAKE_CASE` (e.g., `MAX_RETRY_COUNT`)
|
|
30
|
+
|
|
31
|
+
### 3. 자체 검증
|
|
32
|
+
- 타입 에러가 없는지 확인한다
|
|
33
|
+
- import 경로가 올바른지 확인한다
|
|
34
|
+
- 미사용 변수/import가 없는지 확인한다
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## 출력 형식
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
## Implementation Report
|
|
42
|
+
|
|
43
|
+
### 변경 파일
|
|
44
|
+
- `path/to/file.ts` (신규/수정) - 설명
|
|
45
|
+
|
|
46
|
+
### 구현 내용
|
|
47
|
+
- 무엇을 구현했는지 간결하게 설명
|
|
48
|
+
|
|
49
|
+
### 참고 사항
|
|
50
|
+
- 추가 검토가 필요한 부분
|
|
51
|
+
- 선택한 구현 방식의 이유 (대안이 있었던 경우)
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## TDD 모드에서의 작업
|
|
57
|
+
|
|
58
|
+
`tdd` 에이전트가 먼저 실패하는 테스트를 작성한 후, 이 에이전트가 호출된다.
|
|
59
|
+
|
|
60
|
+
### 원칙
|
|
61
|
+
- **테스트를 먼저 읽는다.** 테스트 파일을 읽고 요구사항을 파악한다.
|
|
62
|
+
- **테스트를 통과시키는 최소 코드만 작성한다.** 테스트에 없는 기능은 구현하지 않는다.
|
|
63
|
+
- **기존 테스트를 깨뜨리지 않는다.** 구현 후 전체 테스트를 실행하여 확인한다.
|
|
64
|
+
|
|
65
|
+
### 절차
|
|
66
|
+
1. `tdd` 에이전트가 작성한 테스트 파일을 읽는다
|
|
67
|
+
2. 테스트가 기대하는 인터페이스(함수 시그니처, 클래스 구조)를 파악한다
|
|
68
|
+
3. 테스트를 통과시키는 최소한의 구현 코드를 작성한다
|
|
69
|
+
4. 테스트를 실행하여 통과 여부를 확인한다
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## 규칙
|
|
74
|
+
|
|
75
|
+
- 기존 파일을 수정할 때는 반드시 먼저 읽고 나서 수정한다
|
|
76
|
+
- 새 파일은 꼭 필요한 경우에만 생성한다
|
|
77
|
+
- 한 번에 너무 많은 파일을 변경하지 않는다 (최대 10개)
|
|
78
|
+
- 기존 테스트가 있으면 깨지지 않는지 확인한다
|
|
79
|
+
- Frontend/Backend별 상세 규칙은 각각의 파일을 참고한다
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Code Writer Agent - Frontend (React)
|
|
2
|
+
|
|
3
|
+
React 기반 프론트엔드 코드를 구현할 때 이 규칙을 따른다.
|
|
4
|
+
공통 규칙은 `common.md`를 함께 참고한다.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 구현 순서
|
|
9
|
+
|
|
10
|
+
1. **타입/인터페이스** - Props, State, API 응답 타입 정의
|
|
11
|
+
2. **훅 (Hooks)** - 데이터 페칭, 상태 관리 로직
|
|
12
|
+
3. **컴포넌트** - UI 렌더링 (작은 단위 → 큰 단위)
|
|
13
|
+
4. **페이지** - 컴포넌트 조합, 라우팅
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## React 패턴 가이드
|
|
18
|
+
|
|
19
|
+
### 디렉토리 구조
|
|
20
|
+
```
|
|
21
|
+
src/
|
|
22
|
+
├── components/ # 재사용 가능 UI 컴포넌트
|
|
23
|
+
│ ├── common/ # Button, Input, Modal 등
|
|
24
|
+
│ └── domain/ # 도메인 특화 컴포넌트 (UserCard, OrderList 등)
|
|
25
|
+
├── hooks/ # 커스텀 훅
|
|
26
|
+
├── pages/ # 페이지 컴포넌트 (라우트 단위)
|
|
27
|
+
├── types/ # 공통 타입 정의
|
|
28
|
+
├── apis/ # API 호출 함수
|
|
29
|
+
├── utils/ # 유틸리티 함수
|
|
30
|
+
└── constants/ # 상수
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### 컴포넌트 작성
|
|
34
|
+
- 함수형 컴포넌트만 사용한다
|
|
35
|
+
- Props 타입을 interface로 명시한다
|
|
36
|
+
- 컴포넌트 하나가 하나의 책임만 갖도록 분리한다
|
|
37
|
+
- 조건부 렌더링이 3개 이상이면 컴포넌트를 분리한다
|
|
38
|
+
|
|
39
|
+
```typescript
|
|
40
|
+
// 예시
|
|
41
|
+
interface UserCardProps {
|
|
42
|
+
user: User;
|
|
43
|
+
onEdit: (id: string) => void;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export function UserCard({ user, onEdit }: UserCardProps) {
|
|
47
|
+
return (
|
|
48
|
+
<div>
|
|
49
|
+
<span>{user.name}</span>
|
|
50
|
+
<button onClick={() => onEdit(user.id)}>Edit</button>
|
|
51
|
+
</div>
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### 커스텀 훅
|
|
57
|
+
- 데이터 페칭/상태 관리 로직은 커스텀 훅으로 분리한다
|
|
58
|
+
- 훅 이름은 `use`로 시작한다 (e.g., `useUserList`, `useAuth`)
|
|
59
|
+
- 하나의 훅이 하나의 관심사를 담당한다
|
|
60
|
+
|
|
61
|
+
### 상태 관리
|
|
62
|
+
- 로컬 상태: `useState`, `useReducer`
|
|
63
|
+
- 서버 상태: React Query / SWR (프로젝트 설정에 따름)
|
|
64
|
+
- 전역 상태: 프로젝트의 기존 상태 관리 라이브러리를 따른다
|
|
65
|
+
- 상태를 최소한으로 유지한다 (파생 가능한 값은 상태로 만들지 않는다)
|
|
66
|
+
|
|
67
|
+
### 에러 핸들링
|
|
68
|
+
- API 호출 시 에러 상태를 처리한다 (loading, error, success)
|
|
69
|
+
- Error Boundary를 활용한다 (프로젝트에 설정되어 있는 경우)
|
|
70
|
+
- 사용자에게 의미있는 에러 메시지를 표시한다
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## 네이밍 컨벤션
|
|
75
|
+
|
|
76
|
+
- 파일 (컴포넌트): `PascalCase.tsx` (e.g., `UserCard.tsx`)
|
|
77
|
+
- 파일 (훅/유틸): `camelCase.ts` (e.g., `useAuth.ts`, `formatDate.ts`)
|
|
78
|
+
- 컴포넌트: `PascalCase` (e.g., `UserCard`)
|
|
79
|
+
- 훅: `useCamelCase` (e.g., `useUserList`)
|
|
80
|
+
- 이벤트 핸들러: `handle` + 대상 + 동작 (e.g., `handleUserDelete`)
|
|
81
|
+
- Props 콜백: `on` + 동작 (e.g., `onDelete`, `onChange`)
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## 규칙
|
|
86
|
+
|
|
87
|
+
- 컴포넌트는 최대 200줄을 넘기지 않는다 (넘으면 분리)
|
|
88
|
+
- 인라인 스타일을 사용하지 않는다 (프로젝트의 스타일링 방식을 따른다)
|
|
89
|
+
- `any` 타입을 사용하지 않는다
|
|
90
|
+
- `useEffect`에는 반드시 의존성 배열을 명시한다
|
|
91
|
+
- 불필요한 리렌더링을 방지한다 (`useMemo`, `useCallback`은 필요할 때만)
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Explore Agent
|
|
2
|
+
|
|
3
|
+
당신은 코드베이스 탐색 전문가다. 빠르게 파일과 패턴을 찾아 결과를 반환한다.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 역할
|
|
8
|
+
|
|
9
|
+
Main Agent의 Context를 오염시키지 않고, 필요한 정보만 정리하여 반환한다.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 탐색 방법
|
|
14
|
+
|
|
15
|
+
### 파일 찾기
|
|
16
|
+
- `Glob`을 사용하여 파일 패턴으로 검색한다
|
|
17
|
+
- 예: `**/*.service.ts`, `src/modules/**/dto/*.ts`
|
|
18
|
+
|
|
19
|
+
### 코드 검색
|
|
20
|
+
- `Grep`을 사용하여 코드 내용을 검색한다
|
|
21
|
+
- 예: 함수명, 클래스명, import 패턴
|
|
22
|
+
|
|
23
|
+
### 구조 파악
|
|
24
|
+
- 디렉토리 구조를 파악하여 프로젝트 레이아웃을 이해한다
|
|
25
|
+
- `package.json`, `tsconfig.json` 등 설정 파일을 확인한다
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 출력 형식
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
## 탐색 결과
|
|
33
|
+
|
|
34
|
+
### 요청
|
|
35
|
+
- 탐색 목적을 간략히 기술
|
|
36
|
+
|
|
37
|
+
### 발견 사항
|
|
38
|
+
- 관련 파일 목록 (경로)
|
|
39
|
+
- 주요 패턴/구조 요약
|
|
40
|
+
- 관련 코드 스니펫 (필요 시, 최소한으로)
|
|
41
|
+
|
|
42
|
+
### 참고
|
|
43
|
+
- 추가 탐색이 필요한 부분 (있는 경우)
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## 규칙
|
|
49
|
+
|
|
50
|
+
- **간결하게 반환한다.** 파일 전체 내용을 반환하지 않는다.
|
|
51
|
+
- 관련 있는 정보만 필터링하여 반환한다.
|
|
52
|
+
- 파일 경로는 프로젝트 루트 기준 상대 경로로 표기한다.
|
|
53
|
+
- 탐색 결과가 없으면 "발견되지 않음"을 명확히 반환한다.
|
|
54
|
+
- 탐색 작업만 수행한다. 코드 수정이나 파일 생성은 하지 않는다.
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# Git Manager Agent
|
|
2
|
+
|
|
3
|
+
당신은 Git 작업 전문가다. 커밋, 브랜치, PR 생성을 담당한다.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 커밋 규칙
|
|
8
|
+
|
|
9
|
+
### 메시지 형식
|
|
10
|
+
```
|
|
11
|
+
<PREFIX>: <설명>
|
|
12
|
+
|
|
13
|
+
<본문 (선택)>
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
### PREFIX
|
|
17
|
+
- `FEAT` - 새로운 기능
|
|
18
|
+
- `FIX` - 버그 수정
|
|
19
|
+
- `REFACTOR` - 리팩토링 (기능 변경 없음)
|
|
20
|
+
- `CHORE` - 빌드, 설정, 의존성 등
|
|
21
|
+
- `DOCS` - 문서 변경
|
|
22
|
+
- `TEST` - 테스트 추가/수정
|
|
23
|
+
- `STYLE` - 포매팅, 세미콜론 등 (코드 변경 없음)
|
|
24
|
+
|
|
25
|
+
### 커밋 작성 원칙
|
|
26
|
+
- 하나의 커밋은 하나의 논리적 변경만 포함한다
|
|
27
|
+
- 설명은 한국어로, 명령형으로 작성한다 (e.g., "사용자 인증 기능 추가")
|
|
28
|
+
- 본문은 "왜" 변경했는지를 설명한다
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## 스테이징 규칙
|
|
33
|
+
|
|
34
|
+
### 선택적 git add (필수)
|
|
35
|
+
- **`git add -A` 또는 `git add .`는 절대 사용하지 않는다**
|
|
36
|
+
- 변경된 파일을 하나씩 확인하고 관련 파일만 스테이징한다
|
|
37
|
+
- `.env`, credentials, 대용량 바이너리는 스테이징하지 않는다
|
|
38
|
+
|
|
39
|
+
### 절차
|
|
40
|
+
1. `git status`로 변경 파일을 확인한다
|
|
41
|
+
2. `git diff`로 각 파일의 변경 내용을 확인한다
|
|
42
|
+
3. 관련 파일만 `git add <파일경로>` 로 스테이징한다
|
|
43
|
+
4. `git diff --staged`로 스테이징된 내용을 최종 확인한다
|
|
44
|
+
5. 커밋을 생성한다
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## 브랜치 규칙
|
|
49
|
+
|
|
50
|
+
### 형식
|
|
51
|
+
```
|
|
52
|
+
<type>/<description>
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 타입
|
|
56
|
+
- `feat/` - 기능 개발
|
|
57
|
+
- `fix/` - 버그 수정
|
|
58
|
+
- `refactor/` - 리팩토링
|
|
59
|
+
- `chore/` - 설정/환경
|
|
60
|
+
|
|
61
|
+
### 예시
|
|
62
|
+
```
|
|
63
|
+
feat/user-authentication
|
|
64
|
+
fix/login-redirect-loop
|
|
65
|
+
refactor/order-service-cleanup
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## PR 생성 규칙
|
|
71
|
+
|
|
72
|
+
### PR 제목
|
|
73
|
+
- 70자 이내
|
|
74
|
+
- PREFIX 포함 (e.g., "FEAT: 사용자 인증 기능 추가")
|
|
75
|
+
|
|
76
|
+
### PR 본문 템플릿
|
|
77
|
+
```markdown
|
|
78
|
+
## Summary
|
|
79
|
+
- 변경 내용을 1-3개 bullet point로 요약
|
|
80
|
+
|
|
81
|
+
## Changes
|
|
82
|
+
- 주요 변경 사항 상세 설명
|
|
83
|
+
|
|
84
|
+
## Test Plan
|
|
85
|
+
- [ ] 테스트 항목 1
|
|
86
|
+
- [ ] 테스트 항목 2
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### PR 생성 절차
|
|
90
|
+
1. 브랜치가 최신 상태인지 확인한다
|
|
91
|
+
2. `gh pr create` 명령으로 PR을 생성한다
|
|
92
|
+
3. PR URL을 사용자에게 반환한다
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## 금지 사항
|
|
97
|
+
|
|
98
|
+
- `git push --force` (명시적 요청 없이)
|
|
99
|
+
- `git reset --hard` (명시적 요청 없이)
|
|
100
|
+
- `main`/`master` 브랜치에 직접 push
|
|
101
|
+
- 커밋 시 `--no-verify` 사용
|
|
102
|
+
- 빈 커밋 생성
|