공개 문서

content/courses/11-gemini-code-review.mdx

아래는 content/courses/11-gemini-code-review.mdx 와 동일한 원문입니다. Markdown과 HTML 변환 결과를 각각 복사할 수 있습니다.

공개 문서 원문 (Markdown)

---
title: "Gemini CLI 코드 리뷰"
slug: "11-gemini-code-review"
description: "100만 토큰으로 전체 코드베이스를 한 번에 분석하는 방법"
order: 11
date: "2026-03-10"
level: 2
draft: false
---

# 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)

<hr>
<h2>title: &quot;Gemini CLI 코드 리뷰&quot;
slug: &quot;11-gemini-code-review&quot;
description: &quot;100만 토큰으로 전체 코드베이스를 한 번에 분석하는 방법&quot;
order: 11
date: &quot;2026-03-10&quot;
level: 2
draft: false</h2>
<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 &quot;*.ts&quot; -o -name &quot;*.tsx&quot; | \
  grep -v node_modules | \
  grep -v .next | \
  xargs cat | \
  gemini &quot;이 Next.js 프로젝트 전체를 분석해줘&quot;
</code></pre>
<h3>실용적인 파이프라인</h3>
<pre><code class="language-bash"># 분석용 스크립트 만들기
cat &gt; review.sh &lt;&lt; &#39;EOF&#39;
#!/bin/bash
echo &quot;=== 프로젝트 코드 ===&quot;
find . \( -name &quot;*.ts&quot; -o -name &quot;*.tsx&quot; \) \
  -not -path &quot;*/node_modules/*&quot; \
  -not -path &quot;*/.next/*&quot; \
  -not -path &quot;*/dist/*&quot; | \
  sort | \
  xargs cat

echo &quot;=== package.json ===&quot;
cat package.json
EOF

chmod +x review.sh
./review.sh | gemini &quot;$1&quot;
</code></pre>
<p>사용법:</p>
<pre><code class="language-bash">./review.sh &quot;보안 취약점을 찾아줘&quot;
./review.sh &quot;코드 품질 점수를 매기고 개선 사항을 알려줘&quot;
</code></pre>
<hr>
<h2>실전 리뷰 시나리오</h2>
<h3>1. 보안 리뷰</h3>
<pre><code class="language-bash">find . \( -name &quot;*.ts&quot; -o -name &quot;*.tsx&quot; \) \
  -not -path &quot;*/node_modules/*&quot; \
  | xargs cat \
  | gemini &quot;OWASP Top 10 기준으로 보안 취약점을 찾아줘.
            발견된 취약점은 파일명:줄번호 형식으로 알려줘.&quot;
</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 &quot;*.tsx&quot; | xargs cat | gemini &quot;
React 성능 관점에서 문제가 있는 패턴을 찾아줘:
- 불필요한 리렌더링
- 큰 번들 크기를 유발하는 import
- useEffect 의존성 배열 문제
- 메모이제이션이 필요한 컴포넌트
파일명과 함께 알려줘.&quot;
</code></pre>
<h3>3. 타입 안전성 리뷰</h3>
<pre><code class="language-bash">find src -name &quot;*.ts&quot; -o -name &quot;*.tsx&quot; | xargs cat | gemini &quot;
TypeScript 타입 안전성 이슈를 찾아줘:
- any 타입 사용 위치
- 타입 단언(as) 남용
- undefined 처리 누락
- 타입 일관성 문제&quot;
</code></pre>
<h3>4. 접근성 리뷰</h3>
<pre><code class="language-bash">find src -name &quot;*.tsx&quot; | xargs cat | gemini &quot;
웹 접근성(a11y) 관점에서 문제를 찾아줘:
- alt 텍스트 없는 이미지
- 키보드 접근성 문제
- ARIA 레이블 누락
- 색상 대비 이슈가 있을 수 있는 곳&quot;
</code></pre>
<hr>
<h2>README 자동 생성</h2>
<pre><code class="language-bash"># 전체 코드를 보내고 README 생성
find . \( -name &quot;*.ts&quot; -o -name &quot;*.tsx&quot; -o -name &quot;package.json&quot; \) \
  -not -path &quot;*/node_modules/*&quot; \
  | xargs cat \
  | gemini &quot;이 프로젝트의 README.md를 한국어로 작성해줘.
            설치 방법, 사용법, 폴더 구조, 기술 스택을 포함해서.
            마크다운 형식으로.&quot;
</code></pre>
<p>출력 결과를 파일로 저장:</p>
<pre><code class="language-bash">find . \( -name &quot;*.ts&quot; -o -name &quot;*.tsx&quot; \) \
  -not -path &quot;*/node_modules/*&quot; \
  | xargs cat \
  | gemini &quot;README.md를 작성해줘&quot; &gt; README.md
</code></pre>
<hr>
<h2>코드 품질 리포트</h2>
<pre><code class="language-bash">find src -name &quot;*.ts&quot; -o -name &quot;*.tsx&quot; | xargs cat | gemini &quot;
아래 항목을 1-10점으로 평가하고 개선 방안을 알려줘:

1. 코드 일관성 (네이밍, 스타일)
2. 컴포넌트 설계 (단일 책임 원칙)
3. 타입 안전성
4. 에러 처리
5. 재사용성
6. 테스트 가능성

각 항목별로 구체적인 예시와 함께 설명해줘.&quot;
</code></pre>
<hr>
<h2>git diff로 변경사항 리뷰</h2>
<pre><code class="language-bash"># 커밋 전 변경사항 리뷰
git diff | gemini &quot;이 변경사항에 문제가 있는지 리뷰해줘.
                  버그 가능성, 누락된 에러 처리, 성능 이슈를 중심으로.&quot;

# 특정 PR 리뷰
git diff main...HEAD | gemini &quot;PR 리뷰를 해줘.
                              개선사항과 잠재적 문제를 알려줘.&quot;
</code></pre>
<hr>
<h2>비용 없이 쓰는 팁</h2>
<p>무료 한도를 최대한 활용하는 방법:</p>
<pre><code class="language-bash"># 너무 큰 파일은 제외
find . -name &quot;*.ts&quot; -size -50k | xargs cat | gemini &quot;...&quot;

# 핵심 파일만 선택
cat src/lib/*.ts src/app/api/**/*.ts | gemini &quot;API 라우트 보안을 검토해줘&quot;

# 질문을 구체적으로
# ❌ 너무 광범위: &quot;전체 코드를 분석해줘&quot;
# ✅ 목적 명확: &quot;인증 관련 파일에서 JWT 처리 방식을 검토해줘&quot;
</code></pre>
<hr>
<h2>분석 결과 활용</h2>
<p>Gemini CLI가 문제를 발견했다면 Claude Code로 수정합니다.</p>
<pre><code class="language-bash"># 1. Gemini CLI로 문제 발견
find src -name &quot;*.tsx&quot; | xargs cat | gemini &quot;any 타입 사용 위치를 찾아줘&quot;

# 2. Claude Code로 수정
claude &quot;Gemini CLI가 발견한 any 타입을 적절한 타입으로 모두 교체해줘.
        components/UserCard.tsx:23 등 위치를 알고 있어.&quot;
</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>이 챕터는 &quot;많이 분석&quot;보다 <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>대응: &quot;전체 분석&quot; 대신 목적형 질문 사용</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>