review
FE 코드 리뷰 & 품질 게이트 검수
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
FE 코드 리뷰 & 품질 게이트 검수
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
DEV 환경 배포 (develop 브랜치 머지)
로컬 개발 서버 기동 (Next.js dev + Turbopack)
PROD 환경 배포 (main 브랜치 머지)
FE 코드 구현 실행 (FSD 아키텍처 준수)
FE 구현 계획 수립 (FSD 아키텍처, 컴포넌트, API 연동)
PR 생성 & GitHub 푸시
| name | review |
| description | FE 코드 리뷰 & 품질 게이트 검수 |
| context | fork |
| allowed-tools | Read, Grep, Glob, Bash |
구현된 코드를 리뷰하고 품질 게이트를 통과하는지 검수한다. 모든 게이트를 통과해야 PASS. 하나라도 실패하면 FAIL → PR 생성 불가.
cd /Users/sagwangjin/Desktop/growit-test/DDD-12-GROWIT-FE
# main 대비 변경 파일
git diff --name-only main...HEAD
# 변경 통계
git diff --stat main...HEAD
변경된 파일 목록을 수집하고, 각 파일을 읽어 리뷰를 수행한다. 변경 파일이 없으면 리뷰를 스킵한다.
자동 검증 필수 — 코드 검색으로 위반 탐지
feature → feature 참조 금지:
# feature 내에서 다른 feature import 탐지
grep -rn "from '@/feature/" src/feature/ | grep -v "from '@/feature/$(dirname)" || true
변경된 feature/ 파일에서 다른 feature/ 모듈을 import하는지 확인.
shared → 상위 계층 참조 금지:
# shared에서 feature, composite, app, model import 탐지
grep -rn "from '@/feature/\|from '@/composite/\|from '@/app/\|from '@/model/" src/shared/ || true
model → 상위 계층 참조 금지:
# model에서 feature, composite, app import 탐지
grep -rn "from '@/feature/\|from '@/composite/\|from '@/app/" src/model/ || true
composite → composite 참조 금지:
# composite 내에서 다른 composite import 탐지
grep -rn "from '@/composite/" src/composite/ | grep -v "$(dirname)" || true
# feature/, composite/, app/에서 apiClient 직접 import 탐지
grep -rn "from '@/shared/lib/apiClient'" src/feature/ src/composite/ src/app/ || true
# axios 직접 import 탐지 (model/api.ts 제외)
grep -rn "import axios\|from 'axios'" src/ --include="*.ts" --include="*.tsx" | grep -v "model/.*/api.ts\|shared/lib/apiClient\|shared/lib/mockApiClient" || true
판정: 위반 0건 → PASS, 1건 이상 → FAIL (위반 목록 첨부)
변경된 feature/, composite/ 파일에서 디자인 시스템 대신 HTML 기본 요소를 사용하는지 확인:
# <button> 직접 사용 탐지 (Button 컴포넌트 대신)
grep -rn "<button" src/feature/ src/composite/ --include="*.tsx" || true
# <input> 직접 사용 탐지 (InputField 컴포넌트 대신)
grep -rn "<input" src/feature/ src/composite/ --include="*.tsx" | grep -v "type=\"hidden\"" || true
# <select> 직접 사용 탐지
grep -rn "<select" src/feature/ src/composite/ --include="*.tsx" || true
# <textarea> 직접 사용 탐지
grep -rn "<textarea" src/feature/ src/composite/ --include="*.tsx" || true
# 인라인 스타일에 하드코딩된 hex 색상 탐지
grep -rn "style={{" src/feature/ src/composite/ --include="*.tsx" || true
# Tailwind 클래스 내 하드코딩된 색상 탐지 (bg-[#xxx], text-[#xxx])
grep -rn "bg-\[#\|text-\[#\|border-\[#" src/feature/ src/composite/ --include="*.tsx" || true
# Radix UI를 shared/components/ui/ 를 거치지 않고 직접 import
grep -rn "from '@radix-ui/" src/feature/ src/composite/ --include="*.tsx" --include="*.ts" || true
판정: 중대 위반 → FAIL, 경미한 위반 → WARN
# any 타입 사용 탐지 (변경된 파일만)
grep -rn ": any\|as any\|<any>" src/ --include="*.ts" --include="*.tsx" || true
# @ts-ignore 사용 탐지
grep -rn "@ts-ignore\|@ts-nocheck" src/ --include="*.ts" --include="*.tsx" || true
# useEffect 내 직접 fetch/axios 호출 탐지
grep -rn "useEffect.*fetch\|useEffect.*axios\|useEffect.*apiClient" src/ --include="*.tsx" || true
# React.FC 사용 탐지 (금지)
grep -rn "React\.FC\|React\.FunctionComponent" src/ --include="*.tsx" || true
# useState로 서버 상태 관리 패턴 탐지 (수동 확인 필요)
# console.log 잔류 탐지
grep -rn "console\.\(log\|debug\|warn\|error\)" src/ --include="*.ts" --include="*.tsx" | grep -v "node_modules\|\.test\.\|\.spec\." || true
판정: 중대 위반 → FAIL, 경미한 위반 → WARN
변경된 파일만 대상으로 확인:
| 유형 | 규칙 |
|---|---|
| 컴포넌트 파일 | PascalCase (.tsx) |
| 훅 파일 | use 접두사 + camelCase (.ts) |
| 유틸리티 파일 | camelCase (.ts) |
| 타입 파일 | PascalCase (.ts) |
| 디렉토리 | camelCase |
| Props 인터페이스 | {ComponentName}Props 또는 인라인 |
| Context 훅 | use{Name}State, use{Name}Actions |
검증 방법: 변경된 파일의 이름, 경로, export가 위 규칙과 일치하는지 확인.
판정: 위반 0건 → PASS, 1건 이상 → WARN
alt 속성이 있는가?aria-label이 있는가?label이 연결되어 있는가?next/image를 사용하는가?'use client'가 필요한 곳에만 있는가? (불필요한 클라이언트 컴포넌트 금지)판정: 중대 위반 → WARN (FAIL은 아님)
핵심: 로컬에서 빌드를 실행하여 배포 가능 상태를 확인한다.
cd /Users/sagwangjin/Desktop/growit-test/DDD-12-GROWIT-FE
yarn lint
cd /Users/sagwangjin/Desktop/growit-test/DDD-12-GROWIT-FE
npx tsc --noEmit
cd /Users/sagwangjin/Desktop/growit-test/DDD-12-GROWIT-FE
yarn build
판정: 3개 모두 PASS → PASS, 하나라도 FAIL → 전체 FAIL
## Review Result: PASS
| # | Gate | Status |
|---|------|--------|
| 1 | FSD Architecture | PASS |
| 2 | Design System | PASS |
| 3 | Code Quality | PASS |
| 4 | Naming Convention | PASS |
| 5 | A11y & Performance | PASS |
| 6 | Build Verification | PASS |
### Build Checks
- lint: PASS
- tsc: PASS
- build: PASS
→ PR 생성 가능. `/pr` 실행하세요.
## Review Result: FAIL
| # | Gate | Status | Issues |
|---|------|--------|--------|
| 1 | FSD Architecture | FAIL | feature 간 참조 위반 1건 |
| 2 | Design System | WARN | <button> 직접 사용 2건 |
| 3 | Code Quality | PASS | - |
| 4 | Naming Convention | PASS | - |
| 5 | A11y & Performance | WARN | alt 속성 누락 1건 |
| 6 | Build Verification | FAIL | tsc 에러 3건 |
### 수정 필요 사항
1. `src/feature/todo/components/TodoItem.tsx:5` — `@/feature/goal` import 제거
2. `src/feature/todo/components/TodoForm.tsx:12` — `<button>` → `<Button>` 교체
3. 타입 에러 3건 수정 필요
### Build Checks
- lint: PASS
- tsc: FAIL (3 errors)
- build: FAIL
→ 수정 후 `/review` 재실행하세요. PR 생성이 차단됩니다.
/pr 진행 가능.