코드리뷰보안by affaan-m
C++ 코드 리뷰
메모리 안전성, 현대 C++ 관용구, 동시성 및 보안을 위한 포괄적인 C++ 코드 리뷰입니다.
한 줄 평가 — 다음 사람 도와주세요
언제 쓰나
C++ 코드의 안전성과 효율성을 확인할 때 사용합니다.
SKILL.md
Lattice 한국어 번역 · 원본 affaan-m/everything-claude-code (841beea). 복사 → 저장하면 Claude Code가 인식합니다.
---
description: 메모리 안전성, 최신 C++ 관용구, 동시성 및 보안을 위한 포괄적인 C++ 코드 검토. cpp-reviewer 에이전트를 호출합니다.
---
# C++ 코드 검토
이 명령어는 포괄적인 C++별 코드 검토를 위해 **cpp-reviewer** 에이전트를 호출합니다.
## 이 명령어는 무엇을 하나요?
1. **C++ 변경 사항 식별**: `git diff`를 통해 수정된 `.cpp`, `.hpp`, `.cc`, `.h` 파일을 찾습니다.
2. **정적 분석 실행**: `clang-tidy` 및 `cppcheck`를 실행합니다.
3. **메모리 안전성 검사**: 원시 `new`/`delete`, 버퍼 오버플로우, 사용 후 해제(use-after-free)를 확인합니다.
4. **동시성 검토**: 스레드 안전성, 뮤텍스 사용, 데이터 경쟁(data races)을 분석합니다.
5. **최신 C++ 검사**: 코드가 C++17/20 규칙 및 모범 사례를 따르는지 확인합니다.
6. **보고서 생성**: 심각도별로 문제를 분류합니다.
## 언제 사용해야 하나요?
`/cpp-review`는 다음과 같은 경우에 사용하세요:
* C++ 코드를 작성하거나 수정한 후
* C++ 변경 사항을 커밋하기 전
* C++ 코드가 포함된 풀 리퀘스트를 검토할 때
* 새로운 C++ 코드베이스에 온보딩할 때
* 메모리 안전성 문제 확인 시
## 검토 카테고리
### CRITICAL (필수 수정)
* RAII 없이 원시 `new`/`delete` 사용
* 버퍼 오버플로우 및 사용 후 해제(use-after-free)
* 동기화 없는 데이터 경쟁(data races)
* `system()`을 통한 명령어 삽입(command injection)
* 초기화되지 않은 변수 읽기
* 널 포인터 역참조(null pointer dereferences)
### HIGH (수정 권장)
* Rule of Five 위반
* `std::lock_guard` / `std::scoped_lock` 누락
* 적절한 수명 주기 관리 없는 분리된 스레드(detached threads)
* `static_cast`/`dynamic_cast` 대신 C 스타일 캐스트 사용
* `const` 정확성(correctness) 누락
### MEDIUM (고려)
* 불필요한 복사(값으로 전달 대신 `const&` 사용)
* 알려진 크기의 컨테이너에 `reserve()` 누락
* 헤더 파일에서의 `using namespace std;`
* 중요 반환 값에 `[[nodiscard]]` 누락
* 지나치게 복잡한 템플릿 메타프로그래밍
## 실행되는 자동 검사
```bash
# 정적 분석
clang-tidy --checks='*,-llvmlibc-*' src/*.cpp -- -std=c++17
# 추가 분석
cppcheck --enable=all --suppress=missingIncludeSystem src/
# 경고 포함 빌드
cmake --build build -- -Wall -Wextra -Wpedantic
```
## 사용 예시
```text
User: /cpp-review
Agent:
# C++ 코드 검토 보고서
## 검토된 파일
- src/handler/user.cpp (수정됨)
- src/service/auth.cpp (수정됨)
## 정적 분석 결과
✓ clang-tidy: 경고 2개
✓ cppcheck: 문제 없음
## 발견된 문제
[CRITICAL] 메모리 누수
파일: src/service/auth.cpp:45
문제: 일치하는 `delete` 없이 원시 `new` 사용
```cpp
auto* session = new Session(userId); // 메모리 누수!
cache[userId] = session;
```
수정: `std::unique_ptr` 사용
```cpp
auto session = std::make_unique<Session>(userId);
cache[userId] = std::move(session);
```
[HIGH] const 참조 누락
파일: src/handler/user.cpp:28
문제: 값으로 전달되는 큰 객체
```cpp
void processUser(User user) { // 불필요한 복사
```
수정: const 참조로 전달
```cpp
void processUser(const User& user) {
```
## 요약
* CRITICAL: 1
* HIGH: 1
* MEDIUM: 0
권장 사항: FAIL: CRITICAL 문제가 수정될 때까지 병합 차단
```
## 승인 기준
| 상태 (Status) | 조건 (Condition) |
|---------------|------------------|
| PASS: 승인 | CRITICAL 또는 HIGH 문제 없음 |
| WARNING: 경고 | MEDIUM 문제만 있음 (주의하며 병합) |
| FAIL: 차단 | CRITICAL 또는 HIGH 문제 발견 |
## 다른 명령어와의 통합
* 테스트 통과를 보장하려면 먼저 `/cpp-test`를 사용하세요.
* 빌드 오류 발생 시 `/cpp-build`를 사용하세요.
* 커밋하기 전에 `/cpp-review`를 사용하세요.
* C++ 특정 문제가 아닌 경우 `/code-review`를 사용하세요.
## 관련 항목
* Agent: `agents/cpp-reviewer.md`
* Skills: `skills/cpp-coding-standards/`, `skills/cpp-testing/`필요한 도구
호버하면 설명CC
설치 + 호출 (2단계)
Claude Code CLI 기준.
- 1
SKILL.md 저장
아래 버튼으로 복사 → 다음 경로로 저장.
~/.claude/skills/everything-claude-code-c-108/SKILL.md - 2
호출
Claude Code 채팅창에서 자연어로 부르면 자동 발동:
예) C++ 코드의 안전성과 효율성을 확인할 때 사용합니다
트리거가 안 잡히면 SKILL.md의
description줄에 더 구체적인 한국어 키워드를 추가해보세요.