AI 코드 리뷰 자동화 - 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. [제안] 스타일, 컨벤션 - 선택적 개선

출력 형식:
- 라인 번호와 함께 지적
- 수정 제안 코드 포함
- 칭찬할 점도 언급
"""


기존 도구 활용








도구특징
CodeRabbitSaaS, 즉시 사용 가능
PR-Agent오픈소스, 커스터마이징
SourceryPython 특화
Amazon CodeGuruAWS 통합


비용 최적화



  • 변경된 파일만 리뷰 (전체 X)

  • 테스트 파일 제외

  • gpt-4o-mini로 1차 필터링

  • 심각한 이슈만 gpt-4o로 재분석



주의사항



  • 민감한 코드는 self-hosted LLM 사용

  • AI 리뷰는 보조 수단, 최종 판단은 사람

  • 오탐(False Positive) 관리 필요