Skip to content

Commit 5965eff

Browse files
authored
Merge pull request #172 from GulSam00/develop
Hotfix : 곡 추천 관련 기능 테이블 분리, API 대응해서 수정
2 parents 35c4aba + 057b2e6 commit 5965eff

39 files changed

Lines changed: 809 additions & 340 deletions

.claude/commands/commit.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# /commit — Commit
2+
3+
Git 커밋 규칙에 따라 커밋 메시지를 생성하고 커밋한다.
4+
5+
## Steps
6+
7+
1. 현재 브랜치 이름을 확인한다.
8+
9+
```
10+
git branch --show-current
11+
```
12+
13+
2. 브랜치 이름에서 이슈 번호를 추출한다.
14+
- 규칙: `<type>/` 이후 첫 번째 숫자
15+
- 예: `feat/42-addSearchFilter``42`
16+
17+
3. `gh issue view <번호> --json title,body,labels` 로 이슈를 조회해 맥락을 파악한다.
18+
19+
4. `git diff --staged` 또는 `git diff HEAD` 로 변경 내용을 확인한다.
20+
- 변경 내용을 기반으로 커밋 메시지를 한국어로 작성한다.
21+
- 사용자에게 확인을 구하지 않는다.
22+
23+
5. 커밋 메시지 포맷:
24+
25+
```
26+
<type> : 변경 내용 요약 (한국어) (#이슈번호)
27+
```
28+
29+
예: `feat : 검색 필터 API 연동 (#42)`
30+
31+
6. 스테이징 및 커밋 실행:
32+
33+
```
34+
git add -A
35+
git commit -m "<type> : 변경 내용 요약 (#이슈번호)"
36+
```
37+
38+
7. 완료 후 출력:
39+
```
40+
✅ 커밋 완료: <type> : 변경 내용 요약 (#이슈번호)
41+
```
42+
43+
## Notes
44+
45+
- `git push` 는 명시적으로 요청받았을 때만 실행한다.
46+
- `commit all` 명령 시 이 플로우를 즉시 실행한다.
47+
- /verify 를 통과하지 않은 상태에서 커밋 요청 시
48+
"/verify 를 먼저 실행하세요." 를 출력하고 중단한다.

.claude/commands/green.md

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# /green — Green Phase
2+
3+
실패 중인 테스트를 통과시키는 최소한의 구현 코드를 작성한다.
4+
5+
## Rules
6+
7+
- **과도한 추상화 금지**: 지금 당장 필요한 것만 구현한다. 미래를 위한 설계는 /refactor 단계에서 한다.
8+
- **컴포넌트**: 함수형 컴포넌트 + hooks only. 클래스 컴포넌트 금지.
9+
- **서버 상태**: `useQuery` / `useMutation` 만 사용. 컴포넌트 내 axios 직접 호출 금지.
10+
- **타입**: `any` 사용 금지. 명시적 interface 또는 generic 사용.
11+
- **에러/로딩 처리**: skeleton 및 error boundary 상태를 항상 처리한다.
12+
13+
## Steps
14+
15+
1. 실패 중인 테스트 목록을 확인한다 (`pnpm vitest run {파일경로}`).
16+
2. 테스트를 통과시키는 구현 코드를 작성한다.
17+
3. `pnpm vitest run {파일경로}` 를 재실행해 모든 테스트가 통과하는지 확인한다.
18+
4. 통과 후 아래 형식으로 출력한다.
19+
20+
---
21+
22+
## ✅ Green Phase 완료
23+
24+
**통과한 테스트**: N개
25+
**작성/수정한 파일**:
26+
27+
- `경로/파일명` — (한 줄 설명)
28+
29+
## 🎓 **Mentor note**: (이번 구현에서 적용한 패턴 또는 주니어가 놓치기 쉬운 포인트)
30+
31+
5. 아래 다음 단계 안내를 출력한다.
32+
33+
### 👉 다음 단계
34+
35+
| 명령어 | 설명 |
36+
| ----------- | ----------------------------- |
37+
| `/refactor` | 코드 품질 개선 (동작 변경 X, 생략 가능) |
38+
| `/verify` | 품질에 문제 없으면 바로 검증 (필수) |
39+
40+
> `/refactor` 는 생략 가능. `/verify``/commit` 은 항상 실행.

.claude/commands/pr.md

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
# /pr — Pull Request
2+
3+
현재 브랜치의 PR을 생성하고 Qodo AI 코드 리뷰를 요청한다.
4+
5+
## Steps
6+
7+
1. 현재 브랜치 이름을 확인한다.
8+
9+
```
10+
git branch --show-current
11+
```
12+
13+
**브랜치가 `develop` 또는 `main` 인 경우 즉시 중단한다.**
14+
아래 메시지를 출력하고 더 이상 진행하지 않는다.
15+
16+
```
17+
⛔ `develop` / `main` 브랜치에서는 PR을 생성할 수 없습니다.
18+
`/start <작업 설명>` 으로 이슈를 생성하고 작업 브랜치를 만들어 주세요.
19+
```
20+
21+
2. 브랜치 이름에서 작업 유형과 이슈 번호를 추출한다.
22+
- 규칙: `<type>/<issue-number>-<camelCaseName>`
23+
- 예: `feat/42-addSearchFilter` → type=`feat`, issue=`42`
24+
25+
3. `gh issue view <번호> --json title,body,labels` 로 이슈 정보를 조회한다.
26+
27+
4. `git log develop..HEAD --oneline``git diff develop...HEAD` 로 변경 내용을 파악한다.
28+
29+
5. `.github/pull_request_template.md` 양식에 맞춰 PR 본문을 작성한다.
30+
31+
```markdown
32+
## 📌 PR 제목
33+
34+
### [Type] : 작업 내용 요약
35+
36+
## 📌 변경 사항
37+
38+
- 변경 1
39+
- 변경 2
40+
41+
## 💬 추가 참고 사항
42+
43+
- close #<번호>
44+
```
45+
46+
- PR 제목: `[Type] : 작업 내용 요약 (#이슈번호)` (한국어)
47+
- Type은 브랜치의 작업 유형을 대문자로 (feat → Feat, fix → Fix 등)
48+
- 변경 사항은 커밋 내역과 diff를 기반으로 bullet 정리
49+
50+
6. PR을 생성한다.
51+
52+
```
53+
gh pr create --base develop --title "<PR 제목>" --body "<PR 본문>"
54+
```
55+
56+
생성된 PR 번호를 추출한다.
57+
58+
7. Qodo AI 코드 리뷰를 위해 댓글을 순서대로 작성한다.
59+
60+
Windows Git Bash에서 `/`로 시작하는 문자열이 경로로 변환되는 것을 방지하기 위해
61+
`MSYS_NO_PATHCONV=1` 환경변수를 설정한다.
62+
63+
```
64+
MSYS_NO_PATHCONV=1 gh pr comment <PR번호> --body "/describe"
65+
MSYS_NO_PATHCONV=1 gh pr comment <PR번호> --body "/review"
66+
MSYS_NO_PATHCONV=1 gh pr comment <PR번호> --body "/improve"
67+
```
68+
69+
8. 완료 후 아래 형식으로 출력한다.
70+
71+
---
72+
73+
## 📋 PR 생성 완료
74+
75+
**PR**: #<PR번호> — <PR 제목>
76+
**Base**: `develop``<현재 브랜치>`
77+
**이슈**: #<이슈번호>
78+
79+
### 🤖 Qodo AI 리뷰 요청
80+
81+
- [x] `/describe` — PR 설명 자동 생성
82+
- [x] `/review` — 코드 리뷰
83+
- [x] `/improve` — 개선 제안
84+
85+
**PR 링크**: <PR URL>
86+
87+
---
88+
89+
## Notes
90+
91+
- PR의 base 브랜치는 `develop` 이다.
92+
- 이슈 번호를 추출할 수 없는 경우 이슈 연결 없이 PR을 생성한다.
93+
- PR 생성 실패 시 에러 메시지를 출력하고 중단한다.
94+
- Qodo AI 댓글 실패 시 경고를 출력하되 PR 생성 자체는 성공으로 처리한다.

.claude/commands/red.md

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# /red — Red Phase
2+
3+
현재 작업 범위에 대해 실패하는 테스트를 먼저 작성한다. 구현 코드는 작성하지 않는다.
4+
5+
## Rules
6+
7+
- 테스트 파일 위치: 구현 파일과 동일 경로에 `*.test.ts(x)` 생성
8+
- 테스트 러너: Vitest (`import { describe, it, expect } from 'vitest'`)
9+
- 아직 존재하지 않는 함수/컴포넌트를 import해도 된다.
10+
테스트가 컴파일 에러 또는 실패 상태여야 정상이다.
11+
- 테스트 설명은 한국어로 작성한다. (`it('빈 배열이면 빈 문자열을 반환한다')`)
12+
- `any` 타입 사용 금지. 테스트에도 명시적 타입을 사용한다.
13+
14+
## Test Coverage
15+
16+
아래 케이스를 커버하는 테스트를 작성한다.
17+
18+
1. **Happy path**: 정상 입력 → 예상 출력
19+
2. **Edge case**: 빈 값, null, undefined, 경계값
20+
3. **Error case**: 에러 발생 시 동작 (throw, error state 등)
21+
22+
## Steps
23+
24+
1. /spsc 에서 정의한 완료 기준을 기반으로 테스트 케이스 목록을 먼저 나열한다.
25+
2. 테스트 코드를 작성한다.
26+
3. `pnpm vitest run {파일경로}` 를 실행해 테스트가 실패하는지 확인한다.
27+
4. 실패 확인 후 아래를 출력한다.
28+
29+
---
30+
31+
## 🔴 Red Phase 완료
32+
33+
**작성한 테스트 케이스**:
34+
35+
- [ ] (케이스 목록)
36+
37+
### 👉 다음 단계
38+
39+
| 명령어 | 설명 |
40+
| --------- | ------------------------ |
41+
| `/green` | 테스트를 통과시키는 구현 |

.claude/commands/refactor.md

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
# /refactor — Refactor Phase
2+
3+
테스트를 통과한 코드의 품질을 개선한다. 동작은 변경하지 않는다.
4+
5+
## Checklist
6+
7+
아래 기준으로 코드를 검토하고, 문제가 있으면 수정한다.
8+
9+
### 구조
10+
11+
- [ ] SRP: 하나의 함수/컴포넌트가 너무 많은 일을 하지 않는가?
12+
→ 로직이 많으면 custom hook으로 분리
13+
- [ ] DRY: 중복 코드가 있는가?
14+
→ 공통 유틸 또는 shared 컴포넌트로 추출
15+
- [ ] 컴포넌트가 100줄을 넘는가?
16+
→ 하위 컴포넌트로 분리 검토
17+
18+
### 타입
19+
20+
- [ ] `any` 타입이 있는가? → 제거
21+
- [ ] 리터럴 유니온 타입으로 좁힐 수 있는 `string`/`number`가 있는가?
22+
- [ ] Props interface가 명시적으로 정의되어 있는가?
23+
24+
### 성능
25+
26+
- [ ] `useMemo`/`useCallback`이 증명 없이 남용되고 있지 않은가?
27+
- [ ] 불필요한 리렌더링을 유발하는 구조가 있는가?
28+
29+
### 네이밍
30+
31+
- [ ] 함수/변수명이 역할을 명확히 설명하는가?
32+
- [ ] 이벤트 핸들러는 `handle` 접두어를 사용하는가? (`handleSubmit`, `handleChange`)
33+
- [ ] boolean은 `is`/`has`/`can` 접두어를 사용하는가?
34+
35+
## Steps
36+
37+
1. 위 체크리스트를 순서대로 검토한다.
38+
2. 문제가 있는 항목만 수정한다 (diff 중심으로 출력).
39+
3. 수정 후 `pnpm vitest run {파일경로}` 를 실행해 테스트가 여전히 통과하는지 확인한다.
40+
4. 아래 형식으로 출력한다.
41+
42+
---
43+
44+
## 🔧 Refactor 완료
45+
46+
**개선한 항목**:
47+
48+
- (체크리스트 항목 + 간단한 이유)
49+
50+
**변경 없는 항목**: (개선이 필요 없었던 항목)
51+
52+
## 🎓 **Mentor note**: (이번 리팩토링의 핵심 포인트)
53+
54+
### 👉 다음 단계
55+
56+
| 명령어 | 설명 |
57+
| --------- | ------------------ |
58+
| `/verify` | 머지 전 전체 검증 |

.claude/commands/spsc.md

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# /spsc — Spec & Scope
2+
3+
주어진 GitHub Issue 번호를 기반으로 작업 범위를 정의한다.
4+
5+
## Steps
6+
7+
1. `gh issue view <번호> --json title,body,labels,assignees,milestone` 로 이슈 상세를 조회한다.
8+
- 체크리스트(task list)가 있으면 하위 작업 목록도 함께 확인한다.
9+
10+
2. 아래 형식으로 작업 범위를 출력한다.
11+
12+
---
13+
14+
## 📋 Spec & Scope — #{ISSUE-NUMBER}
15+
16+
**이슈 제목**: (원문)
17+
**작업 유형**: Feature | Bugfix | Refactor | Chore
18+
19+
### 구현 범위
20+
21+
- (구체적인 작업 항목 bullet)
22+
23+
### 변경 예상 파일
24+
25+
- `src/features/.../` — (이유)
26+
- `src/shared/.../` — (이유)
27+
28+
### 범위 외 (이번 작업에서 하지 않는 것)
29+
30+
- (명시적으로 제외할 항목)
31+
32+
### 완료 기준
33+
34+
- [ ] (체크리스트 형태)
35+
36+
---
37+
38+
3. 출력 후 "이 범위로 진행할까요?" 라고 확인을 구한다.
39+
- 승인 시 작업 브랜치를 생성한다.
40+
- 브랜치 형식: `<type>/<issue-number>-<camelCaseName>`
41+
- type 매핑: Feature → `feat`, Bugfix → `fix`, Refactor → `refactor`, Chore → `chore`
42+
- 예: `feat/42-addSearchFilter`
43+
- develop 브랜치에서 분기한다.
44+
- 이후 아래 다음 단계 안내를 출력한다.
45+
46+
### 👉 다음 단계
47+
48+
| 명령어 | 설명 |
49+
| --------- | ---------------------------- |
50+
| `/red` | 실패 테스트 먼저 작성 (TDD) |
51+
| `/green` | 바로 구현 시작 |
52+
53+
> `/red` ~ `/refactor` 사이클은 생략 가능. `/verify``/commit` 은 필수.

0 commit comments

Comments
 (0)