Contents
see ListAI 코드 리뷰 자동화 - GitHub Actions와 LLM 연동
GitHub Actions와 LLM을 연동하여 Pull Request 코드 리뷰를 자동화하면 코드 품질 향상과 리뷰 시간 단축을 동시에 달성할 수 있습니다.
언제 사용하나요?
- PR 코드 리뷰 자동화
- 코드 품질 일관성 유지
- 시니어 개발자 리뷰 부담 감소
- 24시간 즉시 피드백 제공
- 보안 취약점 자동 검출
아키텍처
PR 생성/업데이트
│
▼
GitHub Actions 트리거
│
▼
변경된 코드 추출 (git diff)
│
▼
LLM API 호출 (OpenAI/Claude)
│
▼
PR 코멘트로 리뷰 결과 게시GitHub Actions 워크플로우
# .github/workflows/ai-code-review.yml
name: AI Code Review
on:
pull_request:
types: [opened, synchronize]
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Get changed files
id: changed
run: |
git diff origin/${{ github.base_ref }}...HEAD --name-only > changed_files.txt
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Install dependencies
run: pip install openai PyGithub
- name: Run AI Review
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_NUMBER: ${{ github.event.pull_request.number }}
run: python .github/scripts/ai_review.py리뷰 스크립트 (Python)
# .github/scripts/ai_review.py
import os
from openai import OpenAI
from github import Github
client = OpenAI()
gh = Github(os.environ["GITHUB_TOKEN"])
# 변경된 파일 읽기
with open("changed_files.txt") as f:
files = f.read().splitlines()
# 각 파일 리뷰
for file_path in files:
if not file_path.endswith((".py", ".js", ".java")):
continue
diff = os.popen(f"git diff origin/main...HEAD -- {file_path}").read()
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": """
당신은 시니어 개발자입니다. 코드 리뷰를 수행하세요.
- 버그 가능성
- 보안 취약점
- 성능 이슈
- 코드 스타일
간결하게 핵심만 지적하세요.
"""},
{"role": "user", "content": f"파일: {file_path}
{diff}"}
]
)
review = response.choices[0].message.content
# PR에 코멘트 게시
repo = gh.get_repo(os.environ["GITHUB_REPOSITORY"])
pr = repo.get_pull(int(os.environ["PR_NUMBER"]))
pr.create_issue_comment(f"## AI 코드 리뷰: {file_path}
{review}")프롬프트 엔지니어링 팁
# 효과적인 리뷰 프롬프트
system_prompt = """
당신은 10년차 시니어 개발자입니다.
리뷰 기준:
1. [심각] 버그, 보안 취약점 - 반드시 수정 필요
2. [권장] 성능 개선, 가독성 - 수정 권장
3. [제안] 스타일, 컨벤션 - 선택적 개선
출력 형식:
- 라인 번호와 함께 지적
- 수정 제안 코드 포함
- 칭찬할 점도 언급
"""기존 도구 활용
| 도구 | 특징 |
|---|---|
| CodeRabbit | SaaS, 즉시 사용 가능 |
| PR-Agent | 오픈소스, 커스터마이징 |
| Sourcery | Python 특화 |
| Amazon CodeGuru | AWS 통합 |
비용 최적화
- 변경된 파일만 리뷰 (전체 X)
- 테스트 파일 제외
- gpt-4o-mini로 1차 필터링
- 심각한 이슈만 gpt-4o로 재분석
주의사항
- 민감한 코드는 self-hosted LLM 사용
- AI 리뷰는 보조 수단, 최종 판단은 사람
- 오탐(False Positive) 관리 필요