챕터 11 · L2
Gemini CLI 코드 리뷰
100만 토큰으로 전체 코드베이스를 한 번에 분석하는 방법
Gemini CLI로 프로젝트 전체를 한 번에 분석·리뷰하는 요청을 할 수 있어요.
참고 문서
공개 문서
11. Gemini CLI 코드 리뷰
아래는 content/courses/11-gemini-code-review.mdx 와 동일한 원문입니다. Markdown과 HTML 변환 결과를 각각 복사할 수 있습니다.
공개 문서 원문 (Markdown)
# Gemini CLI 코드 리뷰
> **이 챕터를 마치면** Gemini CLI로 프로젝트 전체를 한 번에 분석·리뷰하는 요청을 할 수 있어요.
Gemini CLI의 핵심은 **전체 코드베이스를 한 번에 분석**하는 능력이에요.
Claude Code가 파일별로 작업한다면, Gemini CLI는 프로젝트 전체를 한눈에 봐요.
---
## 전체 프로젝트 분석 패턴
### 기본 패턴
```bash
# TypeScript 전체 파일 수집 → Gemini에 전달
find . -name "*.ts" -o -name "*.tsx" | \
grep -v node_modules | \
grep -v .next | \
xargs cat | \
gemini "이 Next.js 프로젝트 전체를 분석해줘"
```
### 실용적인 파이프라인
```bash
# 분석용 스크립트 만들기
cat > review.sh << 'EOF'
#!/bin/bash
echo "=== 프로젝트 코드 ==="
find . \( -name "*.ts" -o -name "*.tsx" \) \
-not -path "*/node_modules/*" \
-not -path "*/.next/*" \
-not -path "*/dist/*" | \
sort | \
xargs cat
echo "=== package.json ==="
cat package.json
EOF
chmod +x review.sh
./review.sh | gemini "$1"
```
사용법:
```bash
./review.sh "보안 취약점을 찾아줘"
./review.sh "코드 품질 점수를 매기고 개선 사항을 알려줘"
```
---
## 실전 리뷰 시나리오
### 1. 보안 리뷰
```bash
find . \( -name "*.ts" -o -name "*.tsx" \) \
-not -path "*/node_modules/*" \
| xargs cat \
| gemini "OWASP Top 10 기준으로 보안 취약점을 찾아줘.
발견된 취약점은 파일명:줄번호 형식으로 알려줘."
```
**확인할 주요 항목:**
- SQL Injection / NoSQL Injection
- XSS (Cross-Site Scripting)
- 하드코딩된 시크릿 (API 키, 비밀번호)
- 인증·인가 누락
- 안전하지 않은 직접 객체 참조
### 2. 성능 리뷰
```bash
find src -name "*.tsx" | xargs cat | gemini "
React 성능 관점에서 문제가 있는 패턴을 찾아줘:
- 불필요한 리렌더링
- 큰 번들 크기를 유발하는 import
- useEffect 의존성 배열 문제
- 메모이제이션이 필요한 컴포넌트
파일명과 함께 알려줘."
```
### 3. 타입 안전성 리뷰
```bash
find src -name "*.ts" -o -name "*.tsx" | xargs cat | gemini "
TypeScript 타입 안전성 이슈를 찾아줘:
- any 타입 사용 위치
- 타입 단언(as) 남용
- undefined 처리 누락
- 타입 일관성 문제"
```
### 4. 접근성 리뷰
```bash
find src -name "*.tsx" | xargs cat | gemini "
웹 접근성(a11y) 관점에서 문제를 찾아줘:
- alt 텍스트 없는 이미지
- 키보드 접근성 문제
- ARIA 레이블 누락
- 색상 대비 이슈가 있을 수 있는 곳"
```
---
## README 자동 생성
```bash
# 전체 코드를 보내고 README 생성
find . \( -name "*.ts" -o -name "*.tsx" -o -name "package.json" \) \
-not -path "*/node_modules/*" \
| xargs cat \
| gemini "이 프로젝트의 README.md를 한국어로 작성해줘.
설치 방법, 사용법, 폴더 구조, 기술 스택을 포함해서.
마크다운 형식으로."
```
출력 결과를 파일로 저장:
```bash
find . \( -name "*.ts" -o -name "*.tsx" \) \
-not -path "*/node_modules/*" \
| xargs cat \
| gemini "README.md를 작성해줘" > README.md
```
---
## 코드 품질 리포트
```bash
find src -name "*.ts" -o -name "*.tsx" | xargs cat | gemini "
아래 항목을 1-10점으로 평가하고 개선 방안을 알려줘:
1. 코드 일관성 (네이밍, 스타일)
2. 컴포넌트 설계 (단일 책임 원칙)
3. 타입 안전성
4. 에러 처리
5. 재사용성
6. 테스트 가능성
각 항목별로 구체적인 예시와 함께 설명해줘."
```
---
## git diff로 변경사항 리뷰
```bash
# 커밋 전 변경사항 리뷰
git diff | gemini "이 변경사항에 문제가 있는지 리뷰해줘.
버그 가능성, 누락된 에러 처리, 성능 이슈를 중심으로."
# 특정 PR 리뷰
git diff main...HEAD | gemini "PR 리뷰를 해줘.
개선사항과 잠재적 문제를 알려줘."
```
---
## 비용 없이 쓰는 팁
무료 한도를 최대한 활용하는 방법:
```bash
# 너무 큰 파일은 제외
find . -name "*.ts" -size -50k | xargs cat | gemini "..."
# 핵심 파일만 선택
cat src/lib/*.ts src/app/api/**/*.ts | gemini "API 라우트 보안을 검토해줘"
# 질문을 구체적으로
# ❌ 너무 광범위: "전체 코드를 분석해줘"
# ✅ 목적 명확: "인증 관련 파일에서 JWT 처리 방식을 검토해줘"
```
---
## 분석 결과 활용
Gemini CLI가 문제를 발견했다면 Claude Code로 수정합니다.
```bash
# 1. Gemini CLI로 문제 발견
find src -name "*.tsx" | xargs cat | gemini "any 타입 사용 위치를 찾아줘"
# 2. Claude Code로 수정
claude "Gemini CLI가 발견한 any 타입을 적절한 타입으로 모두 교체해줘.
components/UserCard.tsx:23 등 위치를 알고 있어."
```
**역할 분담:**
- Gemini CLI → 전체 조망, 문제 발견, 리포트 작성
- Claude Code → 실제 코드 수정, 파일 생성
- Cursor → UI 세부 조정, 시각적 확인
---
## 9장 보강 프로세스 적용: 코드 리뷰 운영 체크포인트
이 챕터는 "많이 분석"보다 **재현 가능한 리뷰 루틴**을 만드는 것이 핵심입니다.
### 표준 리뷰 루프
1. **범위 정의**
- 어떤 파일군을 왜 리뷰하는지 1문장으로 고정
2. **질문 고정**
- 보안/성능/타입/접근성 중 1~2개 축만 선택
3. **결과 분류**
- 즉시 수정 / 보류 / 무시(근거 포함)로 분류
4. **수정 연계**
- Claude Code 작업 요청으로 변환 후 반영
### 11챕터 실패 패턴 TOP 5
1. **질문이 너무 광범위**
- 대응: "전체 분석" 대신 목적형 질문 사용
2. **리뷰 결과 우선순위 없음**
- 대응: 심각도(High/Med/Low) 태그화
3. **거짓 양성(False Positive) 검증 누락**
- 대응: 관련 파일을 직접 재확인 후 반영
4. **리뷰와 구현의 분리**
- 대응: 발견 즉시 수정 티켓/작업문으로 연결
5. **반복 가능성 부족**
- 대응: 동일 명령 템플릿을 스크립트로 저장
### 11챕터 체크리스트 (DoD)
- [ ] 리뷰 범위·목적 정의 완료
- [ ] 리뷰 질문 템플릿으로 실행 완료
- [ ] 결과를 심각도 기준으로 분류 완료
- [ ] 최소 1개 이슈를 수정 단계로 연계 완료
- [ ] 리뷰 명령 템플릿 재사용 가능 상태로 정리 완료
> **다음 챕터 입력값:** 통합 워크플로우의 역할 분담표, 핸드오프 문장 템플릿공개 문서 변환 코드 (HTML)
<h1>Gemini CLI 코드 리뷰</h1>
<blockquote>
<p><strong>이 챕터를 마치면</strong> Gemini CLI로 프로젝트 전체를 한 번에 분석·리뷰하는 요청을 할 수 있어요.</p>
</blockquote>
<p>Gemini CLI의 핵심은 <strong>전체 코드베이스를 한 번에 분석</strong>하는 능력이에요.
Claude Code가 파일별로 작업한다면, Gemini CLI는 프로젝트 전체를 한눈에 봐요.</p>
<hr>
<h2>전체 프로젝트 분석 패턴</h2>
<h3>기본 패턴</h3>
<pre><code class="language-bash"># TypeScript 전체 파일 수집 → Gemini에 전달
find . -name "*.ts" -o -name "*.tsx" | \
grep -v node_modules | \
grep -v .next | \
xargs cat | \
gemini "이 Next.js 프로젝트 전체를 분석해줘"
</code></pre>
<h3>실용적인 파이프라인</h3>
<pre><code class="language-bash"># 분석용 스크립트 만들기
cat > review.sh << 'EOF'
#!/bin/bash
echo "=== 프로젝트 코드 ==="
find . \( -name "*.ts" -o -name "*.tsx" \) \
-not -path "*/node_modules/*" \
-not -path "*/.next/*" \
-not -path "*/dist/*" | \
sort | \
xargs cat
echo "=== package.json ==="
cat package.json
EOF
chmod +x review.sh
./review.sh | gemini "$1"
</code></pre>
<p>사용법:</p>
<pre><code class="language-bash">./review.sh "보안 취약점을 찾아줘"
./review.sh "코드 품질 점수를 매기고 개선 사항을 알려줘"
</code></pre>
<hr>
<h2>실전 리뷰 시나리오</h2>
<h3>1. 보안 리뷰</h3>
<pre><code class="language-bash">find . \( -name "*.ts" -o -name "*.tsx" \) \
-not -path "*/node_modules/*" \
| xargs cat \
| gemini "OWASP Top 10 기준으로 보안 취약점을 찾아줘.
발견된 취약점은 파일명:줄번호 형식으로 알려줘."
</code></pre>
<p><strong>확인할 주요 항목:</strong></p>
<ul>
<li>SQL Injection / NoSQL Injection</li>
<li>XSS (Cross-Site Scripting)</li>
<li>하드코딩된 시크릿 (API 키, 비밀번호)</li>
<li>인증·인가 누락</li>
<li>안전하지 않은 직접 객체 참조</li>
</ul>
<h3>2. 성능 리뷰</h3>
<pre><code class="language-bash">find src -name "*.tsx" | xargs cat | gemini "
React 성능 관점에서 문제가 있는 패턴을 찾아줘:
- 불필요한 리렌더링
- 큰 번들 크기를 유발하는 import
- useEffect 의존성 배열 문제
- 메모이제이션이 필요한 컴포넌트
파일명과 함께 알려줘."
</code></pre>
<h3>3. 타입 안전성 리뷰</h3>
<pre><code class="language-bash">find src -name "*.ts" -o -name "*.tsx" | xargs cat | gemini "
TypeScript 타입 안전성 이슈를 찾아줘:
- any 타입 사용 위치
- 타입 단언(as) 남용
- undefined 처리 누락
- 타입 일관성 문제"
</code></pre>
<h3>4. 접근성 리뷰</h3>
<pre><code class="language-bash">find src -name "*.tsx" | xargs cat | gemini "
웹 접근성(a11y) 관점에서 문제를 찾아줘:
- alt 텍스트 없는 이미지
- 키보드 접근성 문제
- ARIA 레이블 누락
- 색상 대비 이슈가 있을 수 있는 곳"
</code></pre>
<hr>
<h2>README 자동 생성</h2>
<pre><code class="language-bash"># 전체 코드를 보내고 README 생성
find . \( -name "*.ts" -o -name "*.tsx" -o -name "package.json" \) \
-not -path "*/node_modules/*" \
| xargs cat \
| gemini "이 프로젝트의 README.md를 한국어로 작성해줘.
설치 방법, 사용법, 폴더 구조, 기술 스택을 포함해서.
마크다운 형식으로."
</code></pre>
<p>출력 결과를 파일로 저장:</p>
<pre><code class="language-bash">find . \( -name "*.ts" -o -name "*.tsx" \) \
-not -path "*/node_modules/*" \
| xargs cat \
| gemini "README.md를 작성해줘" > README.md
</code></pre>
<hr>
<h2>코드 품질 리포트</h2>
<pre><code class="language-bash">find src -name "*.ts" -o -name "*.tsx" | xargs cat | gemini "
아래 항목을 1-10점으로 평가하고 개선 방안을 알려줘:
1. 코드 일관성 (네이밍, 스타일)
2. 컴포넌트 설계 (단일 책임 원칙)
3. 타입 안전성
4. 에러 처리
5. 재사용성
6. 테스트 가능성
각 항목별로 구체적인 예시와 함께 설명해줘."
</code></pre>
<hr>
<h2>git diff로 변경사항 리뷰</h2>
<pre><code class="language-bash"># 커밋 전 변경사항 리뷰
git diff | gemini "이 변경사항에 문제가 있는지 리뷰해줘.
버그 가능성, 누락된 에러 처리, 성능 이슈를 중심으로."
# 특정 PR 리뷰
git diff main...HEAD | gemini "PR 리뷰를 해줘.
개선사항과 잠재적 문제를 알려줘."
</code></pre>
<hr>
<h2>비용 없이 쓰는 팁</h2>
<p>무료 한도를 최대한 활용하는 방법:</p>
<pre><code class="language-bash"># 너무 큰 파일은 제외
find . -name "*.ts" -size -50k | xargs cat | gemini "..."
# 핵심 파일만 선택
cat src/lib/*.ts src/app/api/**/*.ts | gemini "API 라우트 보안을 검토해줘"
# 질문을 구체적으로
# ❌ 너무 광범위: "전체 코드를 분석해줘"
# ✅ 목적 명확: "인증 관련 파일에서 JWT 처리 방식을 검토해줘"
</code></pre>
<hr>
<h2>분석 결과 활용</h2>
<p>Gemini CLI가 문제를 발견했다면 Claude Code로 수정합니다.</p>
<pre><code class="language-bash"># 1. Gemini CLI로 문제 발견
find src -name "*.tsx" | xargs cat | gemini "any 타입 사용 위치를 찾아줘"
# 2. Claude Code로 수정
claude "Gemini CLI가 발견한 any 타입을 적절한 타입으로 모두 교체해줘.
components/UserCard.tsx:23 등 위치를 알고 있어."
</code></pre>
<p><strong>역할 분담:</strong></p>
<ul>
<li>Gemini CLI → 전체 조망, 문제 발견, 리포트 작성</li>
<li>Claude Code → 실제 코드 수정, 파일 생성</li>
<li>Cursor → UI 세부 조정, 시각적 확인</li>
</ul>
<hr>
<h2>9장 보강 프로세스 적용: 코드 리뷰 운영 체크포인트</h2>
<p>이 챕터는 "많이 분석"보다 <strong>재현 가능한 리뷰 루틴</strong>을 만드는 것이 핵심입니다.</p>
<h3>표준 리뷰 루프</h3>
<ol>
<li><p><strong>범위 정의</strong></p>
<ul>
<li>어떤 파일군을 왜 리뷰하는지 1문장으로 고정</li>
</ul>
</li>
<li><p><strong>질문 고정</strong></p>
<ul>
<li>보안/성능/타입/접근성 중 1~2개 축만 선택</li>
</ul>
</li>
<li><p><strong>결과 분류</strong></p>
<ul>
<li>즉시 수정 / 보류 / 무시(근거 포함)로 분류</li>
</ul>
</li>
<li><p><strong>수정 연계</strong></p>
<ul>
<li>Claude Code 작업 요청으로 변환 후 반영</li>
</ul>
</li>
</ol>
<h3>11챕터 실패 패턴 TOP 5</h3>
<ol>
<li><p><strong>질문이 너무 광범위</strong></p>
<ul>
<li>대응: "전체 분석" 대신 목적형 질문 사용</li>
</ul>
</li>
<li><p><strong>리뷰 결과 우선순위 없음</strong></p>
<ul>
<li>대응: 심각도(High/Med/Low) 태그화</li>
</ul>
</li>
<li><p><strong>거짓 양성(False Positive) 검증 누락</strong></p>
<ul>
<li>대응: 관련 파일을 직접 재확인 후 반영</li>
</ul>
</li>
<li><p><strong>리뷰와 구현의 분리</strong></p>
<ul>
<li>대응: 발견 즉시 수정 티켓/작업문으로 연결</li>
</ul>
</li>
<li><p><strong>반복 가능성 부족</strong></p>
<ul>
<li>대응: 동일 명령 템플릿을 스크립트로 저장</li>
</ul>
</li>
</ol>
<h3>11챕터 체크리스트 (DoD)</h3>
<ul>
<li><input disabled="" type="checkbox"> 리뷰 범위·목적 정의 완료</li>
<li><input disabled="" type="checkbox"> 리뷰 질문 템플릿으로 실행 완료</li>
<li><input disabled="" type="checkbox"> 결과를 심각도 기준으로 분류 완료</li>
<li><input disabled="" type="checkbox"> 최소 1개 이슈를 수정 단계로 연계 완료</li>
<li><input disabled="" type="checkbox"> 리뷰 명령 템플릿 재사용 가능 상태로 정리 완료</li>
</ul>
<blockquote>
<p><strong>다음 챕터 입력값:</strong> 통합 워크플로우의 역할 분담표, 핸드오프 문장 템플릿</p>
</blockquote>