안녕하세요, 혹시 매일같이 쏟아지는 Pull Request(PR)를 리뷰하고, 변경 사항을 요약하느라 시간을 쏟고 계신가요? 개발의 본질인 '창작'보다 '관리'에 더 많은 에너지를 쓰고 있다면 오늘 이 글이 아주 좋은 해결책이 될 것입니다.
최근 구글에서 발표한 강력한 AI 모델, 제미나이(Gemini)를 명령줄 인터페이스(CLI)와 깃허브 액션(GitHub Actions)에 통합하여, 마치 AI 동료가 생긴 것처럼 똑똑한 CI/CD 파이프라인을 구축하는 방법을 단계별로 알아보겠습니다. 제가 직접 모든 과정을 테스트하고 가장 효율적인 방법을 담았으니, 그대로 따라오시기만 하면 됩니다!

1. 왜 제미나이 CLI와 깃허브 액션을 함께 사용해야 할까?
깃허브 액션은 코드를 푸시하거나 PR을 생성하는 등 특정 이벤트가 발생했을 때 원하는 작업을 자동으로 실행해주는 강력한 CI/CD 도구입니다. 여기에 제미나이의 뛰어난 자연어 처리 및 코드 이해 능력이 더해지면, 단순한 빌드/테스트를 넘어선 지능적인 자동화가 가능해집니다.
"Pull Request가 생성되면, AI가 변경된 코드를 분석해서 리뷰 코멘트를 자동으로 달아준다."
상상만 해도 멋지지 않나요? 이를 통해 팀은 코드 리뷰에 드는 시간을 획기적으로 줄이고, 컨벤션 체크나 간단한 로직 오류 검출 등을 AI에게 맡겨 개발 생산성을 극대화할 수 있습니다.
2. 시작 전 준비물 (Prerequisites)
본격적인 시작에 앞서, 아래 3가지만 준비해주세요.
- 구글 계정: 제미나이 API 키를 발급받기 위해 필요합니다.
- 깃허브 계정 및 레포지토리: 깃허브 액션을 적용할 대상 프로젝트입니다.
- 기본적인 터미널 및 Git 지식: CLI 환경에 대한 약간의 이해가 있으면 충분합니다.
3. 단계별 구축 가이드: A to Z
이제부터 실제 파이프라인을 구축하는 과정을 하나씩 살펴보겠습니다.
3.1. STEP 1: Google AI Studio에서 제미나이 API 키 발급받기
가장 먼저 제미나이에게 말을 걸 수 있는 '열쇠', 즉 API 키가 필요합니다.
- Google AI Studio에 접속하여 구글 계정으로 로그인합니다.
- 좌측 메뉴에서 'Get API key' 탭을 클릭합니다.
- 'Create API key in new project' 버튼을 눌러 새로운 API 키를 생성합니다.
- 생성된 API 키 문자열을 복사하여 안전한 곳에 잠시 보관해두세요. 이 키는 외부에 노출되면 안 되니 조심스럽게 다뤄주세요!
3.2. STEP 2: 깃허브 레포지토리에 API 키 안전하게 등록하기 (Secrets)
절대로 API 키를 코드에 직접 하드코딩하면 안 됩니다. 깃허브의 Secrets 기능을 사용하면 안전하게 키를 관리하고 워크플로우에서 사용할 수 있습니다.
- 자동화를 적용할 깃허브 레포지토리로 이동합니다.
- 'Settings' > 'Secrets and variables' > 'Actions' 메뉴로 들어갑니다.
- 우측 상단의 'New repository secret' 버튼을 클릭합니다.
- 'Name'에는
GEMINI_API_KEY
라고 입력하고, 'Secret'에는 방금 복사해둔 API 키를 붙여넣습니다. - 'Add secret'을 누르면 등록이 완료됩니다. 이제 워크플로우에서
${{ secrets.GEMINI_API_KEY }}
형태로 안전하게 키를 호출할 수 있습니다.
3.3. STEP 3: 깃허브 액션 워크플로우(.yml) 파일 생성하기
이제 깃허브 액션이 어떤 동작을 할지 정의하는 '설계도'를 만들 차례입니다. 레포지토리의 루트 디렉토리에 .github/workflows/
폴더를 만들고, 그 안에 ai-code-review.yml
과 같은 이름으로 새 파일을 생성합니다.
3.4. STEP 4: AI 코드 리뷰 워크플로우 작성하기 (핵심!)
생성한 ai-code-review.yml
파일에 아래의 코드를 작성합니다. 이 코드는 새로운 Pull Request가 열릴 때마다 변경된 코드(diff)를 가져와 제미나이에게 리뷰를 요청하고, 그 결과를 PR 코멘트로 남기는 역할을 합니다.
name: AI Code Review with Gemini
on:
pull_request:
types: [opened, synchronize]
jobs:
code-review:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Get code changes (diff)
id: diff
run: |
diff_content=$(git diff ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }})
echo "diff_content<<EOF" >> $GITHUB_OUTPUT
echo "$diff_content" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: Install Google AI Python SDK
run: pip install -q -U google-generativeai
- name: Ask Gemini for Code Review
id: gemini_review
env:
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
DIFF_CONTENT: ${{ steps.diff.outputs.diff_content }}
run: |
python -c "
import google.generativeai as genai
import os
genai.configure(api_key=os.environ['GEMINI_API_KEY'])
model = genai.GenerativeModel('gemini-1.5-flash')
prompt = f\"\"\"
You are an expert code reviewer.
Please review the following code changes (git diff format) and provide constructive feedback.
Focus on potential bugs, code style improvements, and best practices.
Provide the feedback in Korean Markdown format.
Code Changes:
\`\`\`diff
{os.environ['DIFF_CONTENT']}
\`\`\`
\"\"\"
response = model.generate_content(prompt)
review_text = response.text.replace('\`', '').replace('\'', '')
print(f'review_comment<<EOF')
print(review_text)
print('EOF')
" >> $GITHUB_OUTPUT
- name: Post review comment to PR
uses: actions/github-script@v6
with:
script: |
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: `### 🤖 Gemini AI Code Review\n\n${{ steps.gemini_review.outputs.review_comment }}`
})
코드 설명:
- on: pull_request: PR이 열리거나 새로운 커밋이 푸시될 때 이 워크플로우가 실행됩니다.
- permissions: 워크플로우가 PR에 코멘트를 작성할 수 있도록 권한을 부여합니다. 매우 중요합니다!
- Get code changes (diff):
git diff
명령어로 베이스 브랜치와 현재 PR 브랜치의 코드 차이점을 추출합니다. - Ask Gemini for Code Review: Python 스크립트를 실행하여 환경 변수로 전달된 코드 변경사항(diff)과 프롬프트를 제미나이 API로 보냅니다.
- Post review comment to PR: 제미나이의 응답을 받아 PR에 코멘트로 등록합니다.
4. 실행 결과 확인 및 활용 방안
위 워크플로우를 저장하고 커밋한 뒤, 새로운 브랜치를 만들어 코드를 수정한 후 Pull Request를 생성해보세요. 잠시 후, 'Actions' 탭에서 워크플로우가 실행되는 것을 볼 수 있고, 성공적으로 완료되면 아래와 같이 봇이 PR에 자동으로 리뷰 코멘트를 남겨주는 것을 확인할 수 있습니다.
이제 여러분은 이 기본 구조를 바탕으로 더 다양한 자동화를 구현할 수 있습니다.
- AI 커밋 메시지 생성: 코드 변경 사항(diff)을 기반으로 표준화된 형식의 커밋 메시지를 자동으로 생성하는 워크플로우를 추가할 수 있습니다.
- 테스트 코드 자동 생성 제안: 변경된 기능에 필요한 테스트 코드의 스켈레톤을 제안합니다.
- 문서 업데이트 제안: 코드 변경 시 영향을 받는 문서(README.md 등)의 업데이트 내용을 제안합니다.
- 깃허브 액션 마켓플레이스 활용: 직접 YAML 파일을 작성하는 대신, 다른 개발자들이 만들어 둔 마켓플레이스 액션을 활용하여 더 빠르고 간편하게 유사한 기능을 구현할 수도 있습니다.
5. 추가 정보: FAQ (자주 묻는 질문)
Q. Gemini API, 비용은 얼마나 드나요?
A. Google AI의 Gemini API는 현재 상당한 양의 무료 사용량(Free Tier)을 제공하고 있어, 개인 프로젝트나 소규모 팀에서는 부담 없이 시작할 수 있습니다. 예를 들어, 'gemini-1.5-flash' 모델의 경우 분당 15회 요청, 일일 1500회 요청까지 무료로 제공됩니다. (2024년 8월 기준) 정확한 최신 정보는 공식 가격 정책 페이지를 참고하시는 것이 가장 좋습니다.
Q. GitHub Copilot과 비교하면 어떤가요?
A. 좋은 질문입니다! 두 도구는 상호 보완적인 관계에 가깝습니다.
- GitHub Copilot: 주로 코드 편집기(IDE) 내에서 개발자와 함께 호흡하며, 주석이나 코드 앞부분을 기반으로 실시간 코드 완성 및 제안에 특화되어 있습니다. '함께 코딩하는 페어 프로그래머'에 가깝습니다.
- Gemini + GitHub Actions: 코드 작성 이후의 단계, 즉 CI/CD 파이프라인 내에서 특정 이벤트를 기반으로 한 자동화 작업(코드 리뷰, 요약, 리포팅 등)에 더 큰 강점을 가집니다. '코드를 검토하고 관리해주는 시스템'에 가깝습니다.
따라서 많은 개발팀이 코딩 시점에는 Copilot을, 코드 통합 및 리뷰 시점에는 제미나이 액션을 함께 사용하여 개발 프로세스 전반의 효율을 높이고 있습니다.
6. 마무리하며: 스마트한 개발자로 거듭나기
오늘 우리는 제미나이 CLI와 깃허브 액션을 연동하여 단순 반복 작업을 AI에게 맡기는 방법을 알아보았습니다. 처음 설정이 조금 번거롭게 느껴질 수 있지만, 한번 구축해두면 장기적으로 팀 전체의 개발 문화를 바꾸고 생산성을 극적으로 향상시킬 수 있는 강력한 무기가 됩니다.
AI는 더 이상 먼 미래의 기술이 아닙니다. 지금 바로 여러분의 개발 워크플로우에 적용해보세요. AI와 함께 더 스마트하게 일하는 개발자로 거듭나시길 응원합니다!