코드리뷰보안by affaan-m
플러터 코드 리뷰
플러터/다트 코드의 관용적인 패턴, 위젯 모범 사례, 상태 관리, 성능, 접근성 및 보안을 검토합니다.
한 줄 평가 — 다음 사람 도와주세요
언제 쓰나
플러터/다트 코드의 품질을 개선하고 싶을 때
SKILL.md
Lattice 한국어 번역 · 원본 affaan-m/everything-claude-code (841beea). 복사 → 저장하면 Claude Code가 인식합니다.
---
description: "idiomatic 패턴, 위젯 모범 사례, 상태 관리, 성능, 접근성 및 보안을 위해 Flutter/Dart 코드를 검토합니다. flutter-reviewer 에이전트를 호출합니다."
---
# Flutter 코드 검토
이 명령어는 Flutter/Dart 코드 변경 사항을 검토하기 위해 **flutter-reviewer** 에이전트를 호출합니다.
## 이 명령어는 무엇을 하나요?
1. **컨텍스트 수집**: `git diff --staged` 및 `git diff` 검토
2. **프로젝트 검사**: `pubspec.yaml`, `analysis_options.yaml`, 상태 관리 솔루션 확인
3. **보안 사전 스캔**: 하드코딩된 비밀 정보 및 치명적인 보안 문제 확인
4. **전체 검토**: 전체 검토 체크리스트 적용
5. **결과 보고**: 수정 가이드와 함께 심각도별로 그룹화된 이슈 출력
## 사전 요구 사항
`/flutter-review`를 실행하기 전에 다음 사항을 확인하세요:
1. **빌드 통과** — 먼저 `/flutter-build`를 실행하세요. 깨진 코드에 대한 검토는 불완전합니다.
2. **테스트 통과** — `/flutter-test`를 실행하여 회귀가 없는지 확인하세요.
3. **병합 충돌 없음** — 의도된 변경 사항만 반영되도록 모든 충돌을 해결하세요.
4. **`flutter analyze` 깨끗함** — 검토 전에 분석기 경고를 수정하세요.
## 언제 사용해야 하나요?
`/flutter-review`는 다음의 경우에 사용하세요:
- Flutter/Dart 변경 사항이 포함된 PR을 제출하기 전 (빌드 및 테스트 통과 후)
- 새 기능을 구현한 후 초기 문제를 발견하기 위해
- 다른 사람의 Flutter 코드를 검토할 때
- 위젯, 상태 관리 구성 요소 또는 서비스 클래스를 감사할 때
- 프로덕션 릴리스 전
## 검토 영역
| 영역 | 심각도 |
|------|----------|
| 하드코딩된 비밀 정보, 평문 HTTP | CRITICAL |
| 아키텍처 위반, 상태 관리 안티 패턴 | CRITICAL |
| 위젯 재빌드 문제, 리소스 누수 | HIGH |
| `dispose()` 누락, await 후 `BuildContext` 사용 | HIGH |
| Dart null safety, 누락된 오류/로딩 상태 | HIGH |
| Const 전파, 위젯 구성 | HIGH |
| 성능: `build()` 내의 비용이 많이 드는 작업 | HIGH |
| 접근성, 의미론적 레이블 | MEDIUM |
| 상태 전환에 대한 테스트 누락 | HIGH |
| 하드코딩된 문자열 (l10n) | MEDIUM |
| Pub 종속성 위생 | LOW |
## 예시 세션
````text
User: /flutter-review
Agent:
# Flutter Code Review
## Context
Changed files:
- lib/features/auth/presentation/login_page.dart
- lib/features/auth/data/auth_repository_impl.dart
State management: Riverpod (pubspec.yaml에서 감지됨)
Architecture: feature-first
## Security Pre-scan
✓ 하드코딩된 비밀 정보 없음
✓ 평문 HTTP 호출 없음
## Review Findings
[HIGH] 비동기 간격 후 `BuildContext` 사용 시 `mounted` 확인 누락
File: lib/features/auth/presentation/login_page.dart:67
Issue: `await auth.login(...)` 후 `mounted` 확인 없이 `context.go('/home')` 호출됨.
Fix: await 후 네비게이션 시 `if (!context.mounted) return;` 추가 (Flutter 3.7+).
[HIGH] AsyncValue 오류 상태 처리 누락
File: lib/features/auth/presentation/login_page.dart:42
Issue: `ref.watch(authProvider)`는 로딩/데이터에 따라 전환되지만 오류 분기가 없습니다.
Fix: 오류 사례를 switch 표현식이나 `when()` 호출에 추가하여 사용자에게 표시되는 오류 메시지를 표시하세요.
[MEDIUM] 지역화되지 않은 하드코딩된 문자열
File: lib/features/auth/presentation/login_page.dart:89
Issue: `Text('Login')` — 사용자에게 보이는 문자열이 지역화 시스템을 사용하지 않습니다.
Fix: 프로젝트의 l10n 접근자 사용: `Text(context.l10n.loginButton)`.
## Review Summary
| Severity | Count | Status |
|----------|-------|--------|
| CRITICAL | 0 | pass |
| HIGH | 2 | block |
| MEDIUM | 1 | info |
| LOW | 0 | note |
Verdict: BLOCK — 병합 전에 HIGH 이슈를 수정해야 합니다.
````
## 승인 기준
- **승인**: CRITICAL 또는 HIGH 이슈 없음
- **차단**: CRITICAL 또는 HIGH 이슈가 있으면 병합 전에 수정해야 함
## 관련 명령어
- `/flutter-build` — 먼저 빌드 오류를 수정하세요
- `/flutter-test` — 검토 전에 테스트를 실행하세요
- `/code-review` — 일반 코드 검토 (언어 무관)
## 관련 자료
- Agent: `agents/flutter-reviewer.md`
- Skill: `skills/flutter-dart-code-review/`
- Rules: `rules/dart/`필요한 도구
호버하면 설명CC
설치 + 호출 (2단계)
Claude Code CLI 기준.
- 1
SKILL.md 저장
아래 버튼으로 복사 → 다음 경로로 저장.
~/.claude/skills/everything-claude-code-113/SKILL.md - 2
호출
Claude Code 채팅창에서 자연어로 부르면 자동 발동:
예) 플러터/다트 코드의 품질을 개선하고 싶을 때
트리거가 안 잡히면 SKILL.md의
description줄에 더 구체적인 한국어 키워드를 추가해보세요.