코드리뷰문서화데이터·SQL보안by affaan-m
러스트 코드 리뷰
소유권, 라이프타임, 에러 처리, unsafe 사용, 관용구 패턴에 대한 포괄적인 러스트 코드 리뷰를 제공합니다. rust-reviewer 에이전트를 호출합니다.
한 줄 평가 — 다음 사람 도와주세요
언제 쓰나
러스트 코드를 작성하고 소유권, 라이프타임, 에러 처리, unsafe 사용, 관용구 패턴을 검토받고 싶을 때
SKILL.md
Lattice 한국어 번역 · 원본 affaan-m/everything-claude-code (841beea). 복사 → 저장하면 Claude Code가 인식합니다.
---
description: 소유권, 생명 주기, 오류 처리, unsafe 사용 및 관용적 패턴을 위한 포괄적인 Rust 코드 검토. rust_reviewer 에이전트를 호출합니다.
---
# Rust 코드 검토
이 명령어는 Rust별 포괄적인 코드 검토를 위해 **rust-reviewer** 에이전트를 호출합니다.
## 이 명령어는 무엇을 하나요?
1. **자동 검사 확인**: `cargo check`, `cargo clippy -- -D warnings`, `cargo fmt --check`, `cargo test`를 실행하고, 실패 시 중지합니다.
2. **Rust 변경 사항 식별**: `git diff HEAD~1`(또는 PR의 경우 `git diff main...HEAD`)을 통해 수정된 `.rs` 파일을 찾습니다.
3. **보안 감사 실행**: 가능한 경우 `cargo audit`를 실행합니다.
4. **보안 검사**: unsafe 사용, 명령 주입, 하드코딩된 비밀 정보 등을 확인합니다.
5. **소유권 검토**: 불필요한 복제, 생명 주기 문제, 빌림 패턴을 분석합니다.
6. **보고서 생성**: 심각도별로 이슈를 분류합니다.
## 언제 사용하나요?
`/rust-review`는 다음과 같은 경우에 사용하세요:
- Rust 코드를 작성하거나 수정한 후
- Rust 변경 사항을 커밋하기 전
- Rust 코드가 포함된 풀 리퀘스트를 검토할 때
- 새로운 Rust 코드베이스에 온보딩할 때
- 관용적인 Rust 패턴을 학습할 때
## 검토 카테고리
### CRITICAL (필수 수정)
- 프로덕션 코드 경로에서 확인되지 않은 `unwrap()`/`expect()`
- `// SAFETY:` 주석으로 불변성을 문서화하지 않은 `unsafe` 블록
- 쿼리에서 문자열 보간을 통한 SQL 주입
- `std::process::Command`에서 검증되지 않은 입력을 통한 명령 주입
- 하드코딩된 자격 증명
- 원시 포인터를 통한 사용 후 해제(Use-after-free)
### HIGH (수정 권장)
- 빌림 검사기(borrow checker)를 만족시키기 위한 불필요한 `.clone()`
- `&str` 또는 `impl AsRef<str>`로 충분한 경우 `String` 매개변수 사용
- 비동기 컨텍스트에서의 차단(`std::thread::sleep`, `std::fs`)
- 공유 타입에 누락된 `Send`/`Sync` 바운드
- 비즈니스에 중요한 열거형(enum)에 대한 와일드카드 `_ =>` 매치
- 큰 함수(50줄 이상)
### MEDIUM (고려)
- 핫 패스(hot paths)에서의 불필요한 할당
- 크기를 알고 있을 때 `with_capacity` 누락
- 정당화 없이 억제된 clippy 경고
- `///` 문서화가 없는 공개 API
- 무시될 가능성이 버그를 유발할 수 있는 반환 타입에 `#[must_use]` 고려
## 실행되는 자동 검사
```bash
# 빌드 게이트 (검토 전에 통과해야 함)
cargo check
# 린트 및 제안
cargo clippy -- -D warnings
# 포맷팅
cargo fmt --check
# 테스트
cargo test
# 보안 감사 (가능한 경우)
if command -v cargo-audit >/dev/null; then cargo audit; else echo "cargo-audit not installed"; fi
```
## 사용 예시
````text
User: /rust-review
Agent:
# Rust 코드 검토 보고서
## 검토된 파일
- src/service/user.rs (수정됨)
- src/handler/api.rs (수정됨)
## 정적 분석 결과
- 빌드: 성공
- Clippy: 경고 없음
- 포맷팅: 통과
- 테스트: 모두 통과
## 발견된 이슈
[CRITICAL] 프로덕션 경로에서 확인되지 않은 unwrap
파일: src/service/user.rs:28
이슈: `.unwrap()`을 사용하여 데이터베이스 쿼리 결과 처리
```rust
let user = db.find_by_id(id).unwrap(); // 사용자를 찾지 못하면 패닉 발생
```
수정: 컨텍스트와 함께 오류 전파
```rust
let user = db.find_by_id(id)
.context("failed to fetch user")?;
```
[HIGH] 불필요한 Clone
파일: src/handler/api.rs:45
이슈: 빌림 검사기를 만족시키기 위해 String 복제
```rust
let name = user.name.clone();
process(&user, &name);
```
수정: 복제를 피하도록 구조 재구성
```rust
let result = process_name(&user.name);
use_user(&user, result);
```
## 요약
- CRITICAL: 1
- HIGH: 1
- MEDIUM: 0
권장 사항: CRITICAL 이슈가 수정될 때까지 병합 차단
````
## 승인 기준
| 상태 | 조건 |
|---------|-----------------------------------|
| Approve | CRITICAL 또는 HIGH 이슈 없음 |
| Warning | MEDIUM 이슈만 있음 (주의하며 병합) |
| Block | CRITICAL 또는 HIGH 이슈 발견 |
## 다른 명령어와의 통합
- 먼저 `/rust-test`를 사용하여 테스트 통과를 확인하세요.
- 빌드 오류가 발생하면 `/rust-build`를 사용하세요.
- 커밋하기 전에 `/rust-review`를 사용하세요.
- Rust가 아닌 문제에 대해서는 `/code-review`를 사용하세요.
## 관련
- 에이전트: `agents/rust-reviewer.md`
- 스킬: `skills/rust-patterns/`, `skills/rust-testing/`필요한 도구
호버하면 설명CC
설치 + 호출 (2단계)
Claude Code CLI 기준.
- 1
SKILL.md 저장
아래 버튼으로 복사 → 다음 경로로 저장.
~/.claude/skills/everything-claude-code-159/SKILL.md - 2
호출
Claude Code 채팅창에서 자연어로 부르면 자동 발동:
예) 러스트 코드를 작성하고 소유권
트리거가 안 잡히면 SKILL.md의
description줄에 더 구체적인 한국어 키워드를 추가해보세요.