# /review - 코드 리뷰 (Shovel 방식)

> **원칙**
> 1. **Gate PASS 후** 실행 권장
> 2. **5가지 관점** 리뷰
> 3. 학습 내용 **ERROR_LOG에 기록**
> 4. **커밋 전** 최종 점검

---

## 사용법

```bash
# 전체 변경사항 리뷰
/review

# 특정 파일/폴더 리뷰
/review src/modules/auth

# 특정 관점만
/review --security
/review --performance

# 커밋 메시지 제안
/review --commit
```

---

## 리뷰 프로세스

```
/review
    │
    ├── Phase 1: 변경사항 수집
    │   └── git diff, 수정된 파일
    │
    ├── Phase 2: 5가지 관점 리뷰
    │   ├── 구조 (Structure)
    │   ├── 에러 핸들링 (Error)
    │   ├── 가독성 (Readability)
    │   ├── 성능 (Performance)
    │   └── 보안 (Security)
    │
    ├── Phase 3: 개선점 정리
    │
    └── Phase 4: ERROR_LOG 업데이트
```

---

## Phase 1: 변경사항 수집

### 1.1 변경 파일 확인

```bash
# Staged 파일
git diff --staged --name-only

# 전체 변경사항
git diff --stat
```

### 1.2 변경 요약

```markdown
## 📋 변경사항 요약

### 변경된 파일 ({N}개)
| 파일 | 상태 | 변경 |
|------|------|------|
| `src/auth/login.ts` | modified | +45, -12 |
| `src/auth/types.ts` | new | +30 |
| `src/auth/login.test.ts` | new | +80 |

### 총 변경량
- 추가: +155 lines
- 삭제: -12 lines
```

---

## Phase 2: 5가지 관점 리뷰

### 2.1 구조 (Structure)

```markdown
### 🏗️ 구조 리뷰

**체크리스트**:
- [ ] 코어/모듈 분리 준수?
- [ ] 단일 책임 원칙 (SRP)?
- [ ] 적절한 추상화 수준?
- [ ] 의존성 방향 올바름?
- [ ] SSOT 준수?

**결과**:
| 항목 | 상태 | 비고 |
|------|------|------|
| 모듈 분리 | ✅ | |
| SRP | ⚠️ | login.ts가 너무 큼 |
| 추상화 | ✅ | |
| 의존성 | ✅ | core만 의존 |
| SSOT | ✅ | 타입 중복 없음 |

**개선 제안**:
- `login.ts`에서 검증 로직 분리 권장
```

### 2.2 에러 핸들링 (Error)

```markdown
### 🚨 에러 핸들링 리뷰

**체크리스트**:
- [ ] 모든 에러가 코어 ErrorManager 통해 처리?
- [ ] 사용자 친화적 에러 메시지?
- [ ] 에러 복구 로직?
- [ ] 예외 케이스 처리?

**결과**:
| 항목 | 상태 | 비고 |
|------|------|------|
| ErrorManager 사용 | ✅ | |
| 에러 메시지 | ⚠️ | 일부 기술적 용어 |
| 복구 로직 | ❌ | 재시도 없음 |
| 예외 케이스 | ✅ | null 체크 있음 |

**개선 제안**:
- 네트워크 에러 시 재시도 로직 추가 권장
- 에러 메시지 사용자 친화적으로 변경
```

### 2.3 가독성 (Readability)

```markdown
### 📖 가독성 리뷰

**체크리스트**:
- [ ] 명확한 변수/함수 네이밍?
- [ ] 적절한 주석 (왜?)?
- [ ] 복잡한 로직 분리?
- [ ] 매직 넘버 없음?

**결과**:
| 항목 | 상태 | 비고 |
|------|------|------|
| 네이밍 | ✅ | |
| 주석 | ⚠️ | 복잡한 로직에 주석 필요 |
| 로직 분리 | ✅ | |
| 매직 넘버 | ❌ | 3600 하드코딩 |

**개선 제안**:
- `3600` → `TOKEN_EXPIRY_SECONDS` 상수로
- 토큰 생성 로직에 주석 추가
```

### 2.4 성능 (Performance)

```markdown
### ⚡ 성능 리뷰

**체크리스트**:
- [ ] 불필요한 연산?
- [ ] 메모리 누수 가능성?
- [ ] N+1 쿼리 문제?
- [ ] 비동기 처리 적절?

**결과**:
| 항목 | 상태 | 비고 |
|------|------|------|
| 불필요한 연산 | ✅ | |
| 메모리 누수 | ✅ | |
| N+1 쿼리 | N/A | |
| 비동기 | ✅ | async/await 사용 |

**결과**: 성능 이슈 없음
```

### 2.5 보안 (Security)

```markdown
### 🔐 보안 리뷰

**체크리스트**:
- [ ] 입력 검증?
- [ ] 민감 정보 노출?
- [ ] SQL/XSS 인젝션?
- [ ] 적절한 권한 체크?
- [ ] 시크릿 하드코딩?

**결과**:
| 항목 | 상태 | 비고 |
|------|------|------|
| 입력 검증 | ✅ | Zod 스키마 사용 |
| 민감 정보 | ✅ | 로그에 비밀번호 없음 |
| 인젝션 | ✅ | 파라미터화된 쿼리 |
| 권한 체크 | ✅ | |
| 시크릿 | ✅ | .env 사용 |

**결과**: 보안 이슈 없음
```

---

## Phase 3: 개선점 정리

```markdown
## 📊 리뷰 결과 요약

### 점수
| 관점 | 점수 | 상태 |
|------|------|------|
| 구조 | 8/10 | ⚠️ |
| 에러 | 7/10 | ⚠️ |
| 가독성 | 7/10 | ⚠️ |
| 성능 | 10/10 | ✅ |
| 보안 | 10/10 | ✅ |
| **총점** | **42/50** | **양호** |

### 필수 수정 (Blocker)
없음

### 권장 수정 (Optional)
1. 매직 넘버 상수화 (`3600` → `TOKEN_EXPIRY_SECONDS`)
2. 복잡한 로직에 주석 추가
3. 네트워크 에러 재시도 로직

### 커밋 가능 여부
✅ **커밋 가능** (권장 수정은 선택)
```

---

## Phase 4: ERROR_LOG 업데이트

### 4.1 학습 내용 추출

```markdown
### 이번 리뷰에서 배운 것

1. **매직 넘버**: 시간 관련 값은 상수로
2. **에러 복구**: 네트워크 요청에 재시도 패턴 필요
```

### 4.2 CLAUDE.md 업데이트

```markdown
CLAUDE.md ERROR_LOG에 추가할까요?

> **(y)** 추가
> **(n)** 스킵

선택: ___
```

### 4.3 추가 내용

```markdown
### [2026-01-09] 코드 리뷰 학습

#### 매직 넘버 상수화
- **상황**: 토큰 만료 시간 3600 하드코딩
- **교훈**: 시간 관련 값은 반드시 상수로
- **예방**: NEVER 매직 넘버 하드코딩

#### 에러 재시도 패턴
- **상황**: 네트워크 에러 시 즉시 실패
- **교훈**: 네트워크 요청은 재시도 패턴 필요
- **예방**: ALWAYS 네트워크 요청에 재시도 로직
```

---

## 커밋 메시지 제안

```markdown
## 📝 커밋 메시지 제안

```
feat(auth): add user authentication

- Implement login/logout functionality
- Add JWT token handling
- Add input validation with Zod

Closes #123
```

이 메시지로 커밋하시겠습니까?

> **(y)** 커밋
> **(e)** 수정
> **(n)** 취소

선택: ___
```

---

## 완료

```markdown
## ✅ 리뷰 완료

### 요약
- 점수: 42/50 (양호)
- Blocker: 없음
- 학습: 2개 → ERROR_LOG 추가됨

### 다음 단계
```bash
git add .
git commit -m "feat(auth): add user authentication"
```

### Shovel 워크플로우 완료
```
/plan ✅ → /implement ✅ → /gate ✅ → /review ✅ → 커밋
```

수고하셨습니다! 🎉
```
