create-claude-pipeline 0.1.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/bin/cli.js +359 -0
- package/package.json +32 -0
- package/template/.claude/agents/be-developer.md +218 -0
- package/template/.claude/agents/designer.md +192 -0
- package/template/.claude/agents/fe-developer.md +175 -0
- package/template/.claude/agents/infra-developer.md +270 -0
- package/template/.claude/agents/planner.md +126 -0
- package/template/.claude/agents/pm.md +130 -0
- package/template/.claude/agents/qa-engineer.md +270 -0
- package/template/.claude/agents/security-reviewer.md +281 -0
- package/template/.claude/settings.json +5 -0
- package/template/.claude/skills/analyze-requirements/SKILL.md +166 -0
- package/template/.claude/skills/api-integration/SKILL.md +354 -0
- package/template/.claude/skills/assemble-context/SKILL.md +192 -0
- package/template/.claude/skills/db-migration/SKILL.md +228 -0
- package/template/.claude/skills/explore-be-codebase/SKILL.md +260 -0
- package/template/.claude/skills/explore-codebase/SKILL.md +190 -0
- package/template/.claude/skills/explore-design-system/SKILL.md +150 -0
- package/template/.claude/skills/explore-fe-codebase/SKILL.md +209 -0
- package/template/.claude/skills/explore-implementation/SKILL.md +147 -0
- package/template/.claude/skills/explore-infra/SKILL.md +242 -0
- package/template/.claude/skills/implement-api/SKILL.md +477 -0
- package/template/.claude/skills/implement-components/SKILL.md +217 -0
- package/template/.claude/skills/review-auth/SKILL.md +175 -0
- package/template/.claude/skills/scan-vulnerabilities/SKILL.md +200 -0
- package/template/.claude/skills/write-cicd/SKILL.md +293 -0
- package/template/.claude/skills/write-design-spec/SKILL.md +363 -0
- package/template/.claude/skills/write-dockerfile/SKILL.md +269 -0
- package/template/.claude/skills/write-plan-doc/SKILL.md +164 -0
- package/template/.claude/skills/write-plan-doc/assets/plan_template.html +251 -0
- package/template/.claude/skills/write-qa-report/SKILL.md +151 -0
- package/template/.claude/skills/write-security-report/SKILL.md +185 -0
- package/template/.claude/skills/write-test-cases/SKILL.md +234 -0
- package/template/.claude-pipeline/dashboard/.env.example +1 -0
- package/template/.claude-pipeline/dashboard/.eslintrc.json +3 -0
- package/template/.claude-pipeline/dashboard/README.md +36 -0
- package/template/.claude-pipeline/dashboard/next.config.mjs +6 -0
- package/template/.claude-pipeline/dashboard/package-lock.json +8148 -0
- package/template/.claude-pipeline/dashboard/package.json +36 -0
- package/template/.claude-pipeline/dashboard/postcss.config.mjs +8 -0
- package/template/.claude-pipeline/dashboard/server.ts +24 -0
- package/template/.claude-pipeline/dashboard/src/app/api/pipelines/[id]/checkpoint/route.ts +23 -0
- package/template/.claude-pipeline/dashboard/src/app/api/pipelines/[id]/outputs/[...filepath]/route.ts +18 -0
- package/template/.claude-pipeline/dashboard/src/app/api/pipelines/[id]/route.ts +10 -0
- package/template/.claude-pipeline/dashboard/src/app/api/pipelines/route.ts +64 -0
- package/template/.claude-pipeline/dashboard/src/app/favicon.ico +0 -0
- package/template/.claude-pipeline/dashboard/src/app/fonts/GeistMonoVF.woff +0 -0
- package/template/.claude-pipeline/dashboard/src/app/fonts/GeistVF.woff +0 -0
- package/template/.claude-pipeline/dashboard/src/app/globals.css +52 -0
- package/template/.claude-pipeline/dashboard/src/app/layout.tsx +33 -0
- package/template/.claude-pipeline/dashboard/src/app/page.tsx +49 -0
- package/template/.claude-pipeline/dashboard/src/app/pipeline/[id]/page.tsx +84 -0
- package/template/.claude-pipeline/dashboard/src/components/agent-card.tsx +40 -0
- package/template/.claude-pipeline/dashboard/src/components/agent-logs.tsx +65 -0
- package/template/.claude-pipeline/dashboard/src/components/artifact-viewer.tsx +130 -0
- package/template/.claude-pipeline/dashboard/src/components/checkpoint-banner.tsx +59 -0
- package/template/.claude-pipeline/dashboard/src/components/new-pipeline-modal.tsx +63 -0
- package/template/.claude-pipeline/dashboard/src/components/output-list.tsx +57 -0
- package/template/.claude-pipeline/dashboard/src/components/phase-dots.tsx +37 -0
- package/template/.claude-pipeline/dashboard/src/components/pipeline-card.tsx +53 -0
- package/template/.claude-pipeline/dashboard/src/components/resizable-panels.tsx +91 -0
- package/template/.claude-pipeline/dashboard/src/hooks/use-pipeline-detail.ts +65 -0
- package/template/.claude-pipeline/dashboard/src/hooks/use-pipelines.ts +60 -0
- package/template/.claude-pipeline/dashboard/src/hooks/use-websocket.ts +58 -0
- package/template/.claude-pipeline/dashboard/src/lib/agents.ts +30 -0
- package/template/.claude-pipeline/dashboard/src/lib/checkpoint.ts +37 -0
- package/template/.claude-pipeline/dashboard/src/lib/pipelines.ts +91 -0
- package/template/.claude-pipeline/dashboard/src/lib/watcher.ts +90 -0
- package/template/.claude-pipeline/dashboard/src/lib/ws-server.ts +123 -0
- package/template/.claude-pipeline/dashboard/src/types/pipeline.ts +61 -0
- package/template/.claude-pipeline/dashboard/tailwind.config.ts +31 -0
- package/template/.claude-pipeline/dashboard/tsconfig.json +26 -0
- package/template/CLAUDE.md +301 -0
- package/template/references/context-structure.md +34 -0
- package/template/references/pm-context-assembly.md +34 -0
- package/template/references/task-context-template.md +65 -0
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: explore-design-system
|
|
3
|
+
description: "디자이너 Agent가 디자인 명세(02_design_spec.md) 작성 전에 기존 프로젝트의 디자인 시스템을 파악할 때 사용하는 skill. 기존 색상 체계, 폰트, 컴포넌트, UI 라이브러리, CSS 변수, 테마 설정을 탐색해서 새 디자인이 기존 서비스와 일관성을 유지하도록 한다. 디자이너가 STEP 2(기존 디자인 시스템 파악)를 수행할 때, 코드베이스의 시각적 체계를 처음 접하는 상황에서, 또는 기존 디자인 시스템을 확장하는 작업을 할 때 반드시 사용한다."
|
|
4
|
+
context: fork
|
|
5
|
+
agent: Explore
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Explore Design System
|
|
9
|
+
|
|
10
|
+
디자이너 Agent가 디자인 명세를 작성하기 전에 기존 프로젝트의 디자인 시스템 현황을 파악하는 skill이다.
|
|
11
|
+
|
|
12
|
+
기존 프로젝트가 이미 색상, 폰트, 컴포넌트 등을 정의하고 있다면, 새 디자인 명세는 이를 따라야 한다. 이 skill은 코드베이스를 탐색해서 기존 체계를 발견하고, 디자이너가 일관된 명세를 작성할 수 있도록 현황을 정리한다.
|
|
13
|
+
|
|
14
|
+
기존 프로젝트가 없는 경우(신규 프로젝트)에도 이 skill을 실행하되, "기존 디자인 시스템 없음 — 처음부터 정의 필요"라고 보고한다.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 탐색 절차
|
|
19
|
+
|
|
20
|
+
Explore agent를 사용하여 아래 항목들을 병렬로 탐색한다.
|
|
21
|
+
|
|
22
|
+
### 1. UI 라이브러리 확인
|
|
23
|
+
|
|
24
|
+
`package.json` (또는 프로젝트 의존성 파일)에서 UI 관련 라이브러리를 확인한다.
|
|
25
|
+
|
|
26
|
+
찾을 키워드:
|
|
27
|
+
- `tailwindcss`, `@tailwindcss/...`
|
|
28
|
+
- `@shadcn/ui`, `shadcn`
|
|
29
|
+
- `@mui/material`, `@mui/icons-material`
|
|
30
|
+
- `antd`, `ant-design`
|
|
31
|
+
- `@chakra-ui/react`
|
|
32
|
+
- `@radix-ui/...`
|
|
33
|
+
- `styled-components`, `@emotion/...`
|
|
34
|
+
- `sass`, `less`
|
|
35
|
+
- `bootstrap`, `react-bootstrap`
|
|
36
|
+
|
|
37
|
+
라이브러리가 있으면 버전도 함께 기록한다. 어떤 라이브러리를 쓰는지에 따라 디자인 토큰 정의 방식이 달라진다.
|
|
38
|
+
|
|
39
|
+
### 2. 테마 / 디자인 토큰 탐색
|
|
40
|
+
|
|
41
|
+
아래 파일들을 찾는다:
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
Glob: **/tailwind.config.{js,ts,mjs,cjs}
|
|
45
|
+
Glob: **/theme.{js,ts,tsx}
|
|
46
|
+
Glob: **/tokens.{css,scss,js,ts,json}
|
|
47
|
+
Glob: **/variables.{css,scss,less}
|
|
48
|
+
Glob: **/globals.css, **/global.css, **/app.css
|
|
49
|
+
Glob: **/_variables.scss, **/_tokens.scss
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
찾은 파일에서 추출할 정보:
|
|
53
|
+
- **색상**: primary, secondary, accent, background, text 등
|
|
54
|
+
- **폰트**: font-family, font-size 스케일
|
|
55
|
+
- **간격**: spacing 스케일 (4px? 8px?)
|
|
56
|
+
- **반경**: border-radius 값들
|
|
57
|
+
- **그림자**: box-shadow 정의
|
|
58
|
+
- **브레이크포인트**: 반응형 기준점
|
|
59
|
+
|
|
60
|
+
### 3. 기존 컴포넌트 탐색
|
|
61
|
+
|
|
62
|
+
공통/재사용 컴포넌트 폴더를 찾는다:
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
Glob: **/components/ui/**/*.{tsx,jsx,vue}
|
|
66
|
+
Glob: **/components/common/**/*.{tsx,jsx,vue}
|
|
67
|
+
Glob: **/components/shared/**/*.{tsx,jsx,vue}
|
|
68
|
+
Glob: **/components/base/**/*.{tsx,jsx,vue}
|
|
69
|
+
Glob: **/ui/**/*.{tsx,jsx,vue}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
찾은 컴포넌트 각각에 대해:
|
|
73
|
+
- 컴포넌트명
|
|
74
|
+
- Props 인터페이스 (있으면)
|
|
75
|
+
- 크기 변형 (sm/md/lg)이 있는지
|
|
76
|
+
- 상태 변형 (variant, color 등)이 있는지
|
|
77
|
+
|
|
78
|
+
### 4. 아이콘 / 에셋 확인
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
Glob: **/icons/**/*.{svg,tsx}
|
|
82
|
+
Glob: **/assets/**/*.{svg,png}
|
|
83
|
+
Glob: **/public/images/**/*
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
아이콘 라이브러리 사용 여부도 확인한다 (`lucide-react`, `react-icons`, `heroicons` 등).
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## 출력 형식
|
|
91
|
+
|
|
92
|
+
탐색 결과를 아래 형식으로 정리하여 반환한다:
|
|
93
|
+
|
|
94
|
+
```markdown
|
|
95
|
+
# 기존 디자인 시스템 현황
|
|
96
|
+
|
|
97
|
+
## UI 라이브러리
|
|
98
|
+
- (없음 / shadcn@버전 / MUI@버전 / Tailwind@버전 등)
|
|
99
|
+
- CSS 방법론: (CSS Modules / Tailwind utility / styled-components / etc.)
|
|
100
|
+
|
|
101
|
+
## 기존 색상 체계
|
|
102
|
+
- Primary: #...
|
|
103
|
+
- Secondary: #...
|
|
104
|
+
- (없으면 "정의되지 않음 — 새로 정의 필요")
|
|
105
|
+
|
|
106
|
+
## 기존 타이포그래피
|
|
107
|
+
- Font Family: ...
|
|
108
|
+
- Size 스케일: ...
|
|
109
|
+
- (없으면 "정의되지 않음")
|
|
110
|
+
|
|
111
|
+
## 기존 간격 / 반경 / 그림자
|
|
112
|
+
- Spacing 단위: ...
|
|
113
|
+
- Border Radius: ...
|
|
114
|
+
- (없으면 "정의되지 않음")
|
|
115
|
+
|
|
116
|
+
## 기존 컴포넌트 목록
|
|
117
|
+
| 컴포넌트명 | 경로 | Props/변형 | 비고 |
|
|
118
|
+
|-----------|------|-----------|------|
|
|
119
|
+
| Button | components/ui/Button.tsx | size, variant | 재사용 가능 |
|
|
120
|
+
|
|
121
|
+
## 재사용 가능한 것
|
|
122
|
+
- (기존 것을 그대로 쓸 수 있는 컴포넌트/토큰 목록)
|
|
123
|
+
|
|
124
|
+
## 새로 만들어야 할 것
|
|
125
|
+
- (기획안 기준으로 기존에 없는 컴포넌트/토큰 목록)
|
|
126
|
+
|
|
127
|
+
## 디자이너 참고사항
|
|
128
|
+
- (기존 체계와 충돌할 수 있는 부분, 주의할 점)
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## 신규 프로젝트인 경우
|
|
134
|
+
|
|
135
|
+
탐색 결과 디자인 시스템 관련 파일이 전혀 없으면:
|
|
136
|
+
|
|
137
|
+
```markdown
|
|
138
|
+
# 기존 디자인 시스템 현황
|
|
139
|
+
|
|
140
|
+
기존 디자인 시스템 없음 — 처음부터 정의 필요.
|
|
141
|
+
|
|
142
|
+
## 감지된 기술 스택
|
|
143
|
+
- (package.json 기반 프레임워크: React/Vue/Next.js 등)
|
|
144
|
+
|
|
145
|
+
## 권장사항
|
|
146
|
+
- CSS 방법론: (프레임워크에 따라 Tailwind / CSS Modules 등 제안)
|
|
147
|
+
- 컴포넌트 라이브러리: (필요 시 shadcn / Radix 등 제안)
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
이 경우 디자이너는 디자인 토큰과 컴포넌트를 모두 새로 정의한다.
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: explore-fe-codebase
|
|
3
|
+
description: "FE Agent가 구현 시작 전에 기존 프론트엔드 코드 구조를 파악할 때 사용하는 skill. 프레임워크, 폴더 구조, 라우터, 상태 관리, API 클라이언트, 스타일링, 기존 컴포넌트를 탐색해서 기존 패턴과 일관된 구현이 가능하게 한다. FE Agent가 04_task_FE.md를 받고 구현에 착수하기 전, 코드베이스를 처음 접하는 상황, 또는 기존 FE 코드에 새 기능을 추가할 때 반드시 사용한다."
|
|
4
|
+
context: fork
|
|
5
|
+
agent: Explore
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Explore FE Codebase
|
|
9
|
+
|
|
10
|
+
FE Agent가 구현을 시작하기 전에 기존 프론트엔드 코드의 구조와 패턴을 파악하는 skill이다.
|
|
11
|
+
|
|
12
|
+
기존 프로젝트에 코드를 추가할 때, 기존 패턴과 다른 방식으로 구현하면 코드베이스가 일관성을 잃는다. 이 skill은 기존 코드를 탐색해서 "이 프로젝트에서는 이렇게 한다"를 파악하고, FE Agent가 동일한 패턴으로 구현할 수 있도록 현황을 정리한다.
|
|
13
|
+
|
|
14
|
+
신규 프로젝트(기존 코드 없음)의 경우에도 실행하되, "기존 FE 코드 없음 — 처음부터 구현"으로 보고한다.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 탐색 절차
|
|
19
|
+
|
|
20
|
+
Explore agent를 사용하여 아래 항목들을 순서대로 탐색한다.
|
|
21
|
+
|
|
22
|
+
### 1. 의존성 파악
|
|
23
|
+
|
|
24
|
+
`package.json`을 읽어서 프레임워크와 주요 라이브러리를 파악한다.
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
Glob: **/package.json
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
확인할 항목:
|
|
31
|
+
|
|
32
|
+
| 카테고리 | 찾을 패키지 |
|
|
33
|
+
|---------|-----------|
|
|
34
|
+
| 프레임워크 | `next`, `react`, `vue`, `nuxt`, `svelte`, `angular` |
|
|
35
|
+
| 상태 관리 | `zustand`, `@reduxjs/toolkit`, `redux`, `recoil`, `jotai`, `valtio`, `pinia` |
|
|
36
|
+
| API/데이터 | `@tanstack/react-query`, `swr`, `axios`, `ky`, `@trpc/client`, `@apollo/client` |
|
|
37
|
+
| 스타일링 | `tailwindcss`, `styled-components`, `@emotion/react`, `sass`, `@vanilla-extract/css` |
|
|
38
|
+
| UI 라이브러리 | `@shadcn/ui`, `@mui/material`, `antd`, `@chakra-ui/react`, `@radix-ui/*` |
|
|
39
|
+
| 폼 | `react-hook-form`, `formik`, `zod`, `yup` |
|
|
40
|
+
| 인증 | `next-auth`, `@auth/core`, `firebase` |
|
|
41
|
+
| 테스트 | `vitest`, `jest`, `@testing-library/react`, `cypress`, `playwright` |
|
|
42
|
+
|
|
43
|
+
버전도 함께 기록한다 — 메이저 버전에 따라 API가 다를 수 있다.
|
|
44
|
+
|
|
45
|
+
### 2. 폴더 구조 파악
|
|
46
|
+
|
|
47
|
+
프로젝트의 디렉토리 레이아웃을 파악한다.
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
Glob: src/**/*
|
|
51
|
+
Glob: app/**/*
|
|
52
|
+
Glob: pages/**/*
|
|
53
|
+
Glob: components/**/*
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
확인할 패턴:
|
|
57
|
+
|
|
58
|
+
| 패턴 | 의미 |
|
|
59
|
+
|------|------|
|
|
60
|
+
| `app/` 폴더 존재 | Next.js App Router |
|
|
61
|
+
| `pages/` 폴더 존재 | Next.js Pages Router / Nuxt |
|
|
62
|
+
| `src/components/` | 컴포넌트 디렉토리 |
|
|
63
|
+
| `src/hooks/` | 커스텀 훅 |
|
|
64
|
+
| `src/lib/` 또는 `src/utils/` | 유틸리티/헬퍼 |
|
|
65
|
+
| `src/types/` | 타입 정의 |
|
|
66
|
+
| `src/store/` 또는 `src/stores/` | 상태 관리 |
|
|
67
|
+
| `src/services/` 또는 `src/api/` | API 레이어 |
|
|
68
|
+
|
|
69
|
+
### 3. 라우터 설정
|
|
70
|
+
|
|
71
|
+
라우팅 구조를 파악한다.
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
Glob: app/**/page.{tsx,jsx,vue}
|
|
75
|
+
Glob: app/**/layout.{tsx,jsx,vue}
|
|
76
|
+
Glob: pages/**/*.{tsx,jsx,vue}
|
|
77
|
+
Glob: src/router/**/*
|
|
78
|
+
Grep: createBrowserRouter|createRouter|useRouter
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
기존 경로 목록과 레이아웃 계층 구조를 파악한다.
|
|
82
|
+
|
|
83
|
+
### 4. 상태 관리 설정
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
Glob: src/store/**/*
|
|
87
|
+
Glob: src/stores/**/*
|
|
88
|
+
Glob: src/context/**/*
|
|
89
|
+
Glob: src/providers/**/*
|
|
90
|
+
Grep: create(Store|Slice|Context)|defineStore|atom\(
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
확인할 것:
|
|
94
|
+
- 전역 상태 관리 방식 (Zustand store / Redux slice / Context 등)
|
|
95
|
+
- 기존 store 목록과 각각의 역할
|
|
96
|
+
- 서버 상태 vs 클라이언트 상태 분리 패턴
|
|
97
|
+
|
|
98
|
+
### 5. API 클라이언트 설정
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
Glob: src/lib/api*
|
|
102
|
+
Glob: src/utils/axios*
|
|
103
|
+
Glob: src/utils/fetch*
|
|
104
|
+
Glob: src/services/**/*
|
|
105
|
+
Grep: axios\.create|createClient|baseURL|fetcher
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
확인할 것:
|
|
109
|
+
- HTTP 클라이언트 (axios / fetch / ky 등)
|
|
110
|
+
- base URL 설정 방식
|
|
111
|
+
- 인증 토큰 주입 방식 (interceptor / header)
|
|
112
|
+
- 에러 핸들링 패턴
|
|
113
|
+
- React Query / SWR 사용 시 query key 컨벤션
|
|
114
|
+
|
|
115
|
+
### 6. 기존 컴포넌트 목록
|
|
116
|
+
|
|
117
|
+
```
|
|
118
|
+
Glob: src/components/**/*.{tsx,jsx,vue}
|
|
119
|
+
Glob: components/**/*.{tsx,jsx,vue}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
각 컴포넌트에 대해:
|
|
123
|
+
- 컴포넌트명
|
|
124
|
+
- Props 인터페이스 (있으면)
|
|
125
|
+
- 어디서 사용되는지 (import 추적)
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## 출력 형식
|
|
130
|
+
|
|
131
|
+
탐색 결과를 아래 형식으로 정리하여 반환한다:
|
|
132
|
+
|
|
133
|
+
```markdown
|
|
134
|
+
# 기존 FE 코드 현황
|
|
135
|
+
|
|
136
|
+
## 기술 스택
|
|
137
|
+
|
|
138
|
+
| 카테고리 | 사용 기술 | 버전 |
|
|
139
|
+
|---------|---------|------|
|
|
140
|
+
| 프레임워크 | Next.js (App Router) | 14.x |
|
|
141
|
+
| 상태 관리 | Zustand | 4.x |
|
|
142
|
+
| API 클라이언트 | React Query + axios | 5.x / 1.x |
|
|
143
|
+
| 스타일링 | Tailwind CSS | 3.x |
|
|
144
|
+
| UI 라이브러리 | shadcn/ui | - |
|
|
145
|
+
| 폼 | react-hook-form + zod | 7.x / 3.x |
|
|
146
|
+
| 테스트 | Vitest + Testing Library | 1.x |
|
|
147
|
+
|
|
148
|
+
## 폴더 구조
|
|
149
|
+
|
|
150
|
+
(실제 디렉토리 트리)
|
|
151
|
+
|
|
152
|
+
## 라우팅 구조
|
|
153
|
+
|
|
154
|
+
| 경로 | 페이지 | 레이아웃 |
|
|
155
|
+
|------|--------|---------|
|
|
156
|
+
| / | app/page.tsx | app/layout.tsx |
|
|
157
|
+
| /login | app/login/page.tsx | (root) |
|
|
158
|
+
|
|
159
|
+
## 상태 관리
|
|
160
|
+
|
|
161
|
+
| Store/Context | 역할 | 파일 |
|
|
162
|
+
|---------------|------|------|
|
|
163
|
+
| useAuthStore | 인증 상태 | src/store/auth.ts |
|
|
164
|
+
|
|
165
|
+
## API 패턴
|
|
166
|
+
|
|
167
|
+
- 클라이언트: axios (baseURL: /api)
|
|
168
|
+
- 인증: Authorization header (Bearer token)
|
|
169
|
+
- 서버 상태: React Query (queryKey: ['resource', id])
|
|
170
|
+
- 에러: interceptor에서 401 → 로그인 리다이렉트
|
|
171
|
+
|
|
172
|
+
## 기존 컴포넌트 — 재사용 가능
|
|
173
|
+
|
|
174
|
+
| 컴포넌트 | 경로 | 용도 |
|
|
175
|
+
|---------|------|------|
|
|
176
|
+
| Button | components/ui/Button.tsx | 범용 버튼 |
|
|
177
|
+
| Input | components/ui/Input.tsx | 폼 입력 |
|
|
178
|
+
|
|
179
|
+
## 새로 만들어야 할 것
|
|
180
|
+
|
|
181
|
+
(기획안/디자인 명세 기준으로 기존에 없는 컴포넌트/페이지)
|
|
182
|
+
|
|
183
|
+
## 주의사항
|
|
184
|
+
|
|
185
|
+
- (기존 패턴과 충돌 가능성, 따라야 할 컨벤션, 주의할 점)
|
|
186
|
+
- 예: "기존 코드는 모두 default export 사용 — named export로 바꾸지 말 것"
|
|
187
|
+
- 예: "API 호출은 반드시 services/ 폴더의 함수를 통해 — 컴포넌트에서 직접 axios 호출하지 말 것"
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## 신규 프로젝트인 경우
|
|
193
|
+
|
|
194
|
+
FE 관련 파일이 전혀 없으면:
|
|
195
|
+
|
|
196
|
+
```markdown
|
|
197
|
+
# 기존 FE 코드 현황
|
|
198
|
+
|
|
199
|
+
기존 FE 코드 없음 — 처음부터 구현.
|
|
200
|
+
|
|
201
|
+
## 프로젝트 설정 감지
|
|
202
|
+
|
|
203
|
+
- package.json: (있음/없음)
|
|
204
|
+
- 감지된 기술: (있으면 나열)
|
|
205
|
+
|
|
206
|
+
## 권장사항
|
|
207
|
+
|
|
208
|
+
(04_task_FE.md의 기술 스택 지시에 따름)
|
|
209
|
+
```
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: explore-implementation
|
|
3
|
+
description: "QA 엔지니어가 테스트 케이스 작성 전에 FE/BE 구현 현황을 파악할 때 사용하는 skill. 구현된 페이지, API 엔드포인트, 라우터 경로를 탐색하고 기획안(01_plan.md)과 대비하여 미구현 항목을 찾는다. QA Agent가 04_task_QA.md를 받고 검증에 착수하기 전, 구현물을 처음 접하는 상황, 또는 테스트 범위를 결정해야 할 때 반드시 사용한다. '구현 현황 파악', '테스트 대상 파악', '뭐가 구현됐는지 확인', 'QA 시작 전 탐색' 등의 상황에서 트리거된다."
|
|
4
|
+
context: fork
|
|
5
|
+
agent: Explore
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Explore Implementation
|
|
9
|
+
|
|
10
|
+
QA 엔지니어가 테스트를 시작하기 전에 실제 구현된 코드를 파악하는 skill이다.
|
|
11
|
+
|
|
12
|
+
QA는 기획안에 적힌 것이 아니라 실제로 구현된 것을 테스트해야 한다. 기획안에는 있지만 아직 구현되지 않은 기능을 테스트하려고 하면 시간이 낭비되고, 구현됐는데 기획안에 없는 기능은 검증에서 빠질 수 있다. 이 skill은 코드를 직접 탐색해서 "지금 테스트할 수 있는 것"의 정확한 목록을 만든다.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## 탐색 절차
|
|
17
|
+
|
|
18
|
+
Explore agent를 사용하여 아래 항목들을 탐색한다.
|
|
19
|
+
|
|
20
|
+
### 1. FE 구현 현황
|
|
21
|
+
|
|
22
|
+
#### 1-1. 구현된 페이지 목록
|
|
23
|
+
|
|
24
|
+
라우터 설정 파일에서 실제 등록된 경로를 확인한다.
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
Glob: **/app/**/page.tsx, **/app/**/page.jsx
|
|
28
|
+
Glob: **/pages/**/*.tsx, **/pages/**/*.jsx
|
|
29
|
+
Grep: "path:" 또는 "Route" — 라우터 설정 파일에서
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
각 페이지에 대해 기록한다:
|
|
33
|
+
- URL 경로 (예: `/orders`, `/orders/:id`)
|
|
34
|
+
- 페이지 역할 (파일명과 컴포넌트 내용으로 추론)
|
|
35
|
+
- 동적 라우트 여부 (`[id]`, `:id` 등)
|
|
36
|
+
|
|
37
|
+
#### 1-2. 구현된 컴포넌트 목록
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
Glob: **/components/**/*.tsx, **/components/**/*.jsx
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
기능별로 그룹핑한다:
|
|
44
|
+
- 공통 UI 컴포넌트 (`components/ui/`)
|
|
45
|
+
- 기능별 컴포넌트 (`components/[feature]/`)
|
|
46
|
+
|
|
47
|
+
#### 1-3. FE 상태 처리 확인
|
|
48
|
+
|
|
49
|
+
각 데이터 의존 컴포넌트가 4상태(Loading, Error, Empty, Success)를 처리하는지 간략히 확인한다.
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
Grep: "isLoading|isError|error|Skeleton|EmptyState|ErrorMessage"
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
처리가 누락된 컴포넌트가 있으면 "테스트 시 주의사항"에 기록한다.
|
|
56
|
+
|
|
57
|
+
### 2. BE 구현 현황
|
|
58
|
+
|
|
59
|
+
#### 2-1. 구현된 API 엔드포인트 목록
|
|
60
|
+
|
|
61
|
+
라우터 파일에서 등록된 엔드포인트를 확인한다.
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
Glob: **/routes/**/*.ts, **/routes/**/*.js
|
|
65
|
+
Grep: "router\.(get|post|put|patch|delete)" — 라우터 파일에서
|
|
66
|
+
Grep: "app\.(get|post|put|patch|delete)" — app 설정 파일에서
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
각 엔드포인트에 대해 기록한다:
|
|
70
|
+
- HTTP 메서드 + 경로 (예: `GET /api/orders`)
|
|
71
|
+
- 미들웨어 (인증 필요 여부)
|
|
72
|
+
- 입력 검증 존재 여부 (Zod 스키마 등)
|
|
73
|
+
|
|
74
|
+
#### 2-2. 에러 처리 패턴
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
Grep: "AppError|NotFoundError|BusinessError" — errors/ 디렉토리에서
|
|
78
|
+
Glob: **/middleware/errorHandler*
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
어떤 에러 코드가 정의되어 있는지 확인한다. QA가 에러 시나리오를 테스트할 때 기대할 수 있는 응답을 파악하기 위함이다.
|
|
82
|
+
|
|
83
|
+
#### 2-3. DB 모델/스키마
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
Glob: **/prisma/schema.prisma
|
|
87
|
+
Glob: **/models/**/*.ts
|
|
88
|
+
Glob: **/entities/**/*.ts
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
어떤 데이터 모델이 존재하는지, 필수 필드는 무엇인지 파악한다. 입력값 경계 테스트에 필요하다.
|
|
92
|
+
|
|
93
|
+
### 3. 환경 설정
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
Glob: **/.env.example, **/.env.local.example
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
설정해야 하는 환경변수 목록을 확인한다. API URL, DB 연결 등 테스트 환경 구성에 필요하다.
|
|
100
|
+
|
|
101
|
+
### 4. 기획안 대비 검증
|
|
102
|
+
|
|
103
|
+
`context/01_plan.md`가 존재하면 읽어서, 기획안에 명시된 기능/화면/API와 실제 구현을 대조한다.
|
|
104
|
+
|
|
105
|
+
비교 관점:
|
|
106
|
+
- 기획안에 있지만 구현에서 찾을 수 없는 항목 → **미구현 의심**
|
|
107
|
+
- 구현에 있지만 기획안에 없는 항목 → **기획 외 추가 구현** (확인 필요)
|
|
108
|
+
- 기획안에 명시된 엣지케이스 중 코드에서 처리가 보이지 않는 것 → **테스트 시 주의**
|
|
109
|
+
|
|
110
|
+
`context/01_plan.md`가 없으면 이 단계를 건너뛰고, "기획안 없음 — 코드 기반으로만 분석"으로 보고한다.
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## 출력 형식
|
|
115
|
+
|
|
116
|
+
탐색 결과를 아래 형식으로 정리하여 반환한다.
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
## 구현 현황
|
|
120
|
+
|
|
121
|
+
### FE 화면 (N개)
|
|
122
|
+
| # | URL 경로 | 페이지 역할 | 동적 라우트 |
|
|
123
|
+
|---|---------|-----------|-----------|
|
|
124
|
+
| 1 | /orders | 주문 목록 | X |
|
|
125
|
+
| 2 | /orders/[id] | 주문 상세 | O |
|
|
126
|
+
| ... | | | |
|
|
127
|
+
|
|
128
|
+
### BE API (N개)
|
|
129
|
+
| # | 메서드 | 경로 | 인증 | 검증 |
|
|
130
|
+
|---|-------|------|------|------|
|
|
131
|
+
| 1 | GET | /api/orders | O | X |
|
|
132
|
+
| 2 | POST | /api/orders | O | Zod |
|
|
133
|
+
| ... | | | | |
|
|
134
|
+
|
|
135
|
+
### 기획안 대비
|
|
136
|
+
- 미구현 의심 항목: (있으면 나열, 없으면 "없음")
|
|
137
|
+
- 기획 외 추가 구현: (있으면 나열, 없으면 "없음")
|
|
138
|
+
|
|
139
|
+
### 테스트 시 주의사항
|
|
140
|
+
- (4상태 처리 누락 컴포넌트, 검증 없는 API, 에러 처리 누락 등)
|
|
141
|
+
- (환경변수 설정 필요 사항)
|
|
142
|
+
|
|
143
|
+
### 환경 설정
|
|
144
|
+
- 필요한 환경변수: (목록)
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
테이블이 길어지면 기능 단위로 그룹핑한다 (예: 주문 관련, 유저 관련).
|