GitHub ์ฐ๋์ ํต์ฌ์ โ์ฝ๋ ์๋ ์์ฑโ์ด ์๋๋ผ ๋ฆฌ๋ทฐ ๋ณ๋ชฉ ์ ๊ฑฐ์ ๋๋ค. ํนํ PR ํฌ๊ธฐ๊ฐ ์ปค์ง์๋ก ์ฌ๋ ๋ฆฌ๋ทฐ์ด๊ฐ ๋์น๊ธฐ ์ฌ์ด ํญ๋ชฉ(๋ณด์, ํ ์คํธ ๋๋ฝ, ์ฑ๋ฅ ํ๊ท)์ ๋จผ์ ์๋ ์ฒดํฌํ๊ณ , ์ฌ๋์ ์ต์ข ํ๋จ์ ์ง์คํ๋ ๊ตฌ์กฐ๊ฐ ํจ๊ณผ์ ์ ๋๋ค.
flowchart LR A[PR ์์ฑ] --> B[Claude ์๋ ๋ฆฌ๋ทฐ] B --> C[๋ฆฌ์คํฌ ์์ฝ/์ฝ๋ฉํธ ์ด์] C --> D[์ฌ๋ ๋ฆฌ๋ทฐ ์ต์ข ํ์ ] D --> E[์กฐ๊ฑด๋ถ ๋จธ์ง]
๐ง ์น ํ ์นํธ์ํธ
- ์๋ํ๋ ํ์ ๋ณด์กฐ, merge ์ฑ ์์ ์ฌ๋
- ์์ PR + ๋ช ํํ ์ฒดํฌ๋ฆฌ์คํธ๊ฐ ํ์ง์ ๋ง๋ ๋ค
- ๋ณด์/๋น์ฉ/์ด์ ํญ๋ชฉ์ ํ ํ๋ฆฟ์ผ๋ก ๊ณ ์ ํด์ผ ๋๋ฝ์ด ์ค์ด๋ ๋ค
1) GitHub Actions๋ก ๋ถ์ด๋ ๊ธฐ๋ณธ ๊ตฌ์กฐ
๊ณต์ ๋ฌธ์์์ ์๋ดํ๋ ๋ฐฉ์๋๋ก Action์ ๊ฑธ๋ฉด, PR ์ด๋ฒคํธ์์ Claude ๋ฆฌ๋ทฐ๋ฅผ ์๋ ์คํํ ์ ์์ต๋๋ค.
์ฐธ๊ณ :
์ํฌํ๋ก ์์
name: Claude PR Review
on:
pull_request:
types: [opened, synchronize, reopened]
jobs:
claude-review:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- uses: actions/checkout@v4
- name: Claude Code Action
uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
prompt: |
Review this PR in Korean.
Return:
1) ์์ฝ 5์ค
2) ์ํ์์(๋ณด์/์ฑ๋ฅ/ํ
์คํธ) ๊ฐ 1๊ฐ ์ด์
3) ์ฆ์์์ 3๊ฐ
4) ๋จธ์ง ๊ถ๊ณ (๊ฐ๋ฅ/์กฐ๊ฑด๋ถ/๋ณด๋ฅ)2) ๋ก์ปฌ ์ธ์ ์์๋ ๊ฐ์ด ์ฐ๋ฉด ์ข์ ๋ช ๋ น
/install-github-app: ์ ์ฅ์ ์ฐ๋ ์ค์น ๋ณด์กฐ/pr-comments [PR]: PR ์ฝ๋ฉํธ ๋น ๋ฅธ ํ์ธ
์ฐธ๊ณ : https://code.claude.com/docs/en/interactive-mode
3) ๋ฆฌ๋ทฐ ํ์ง์ ์ฌ๋ฆฌ๋ ํ๋กฌํํธ ํจํด
์ด PR์ ๋ค์ 4์ถ์ผ๋ก ์ ๊ฒํด์ค.
- ๋ณด์
- ์ฑ๋ฅ
- ํ
์คํธ ์ปค๋ฒ๋ฆฌ์ง
- ์ด์ ์ํฅ(๋ก๊ทธ/๋กค๋ฐฑ)
๊ฐ ์ถ๋ง๋ค:
- ๊ทผ๊ฑฐ 1๊ฐ
- ์์ ์ 1๊ฐ
- ์ํ๋(๋ฎ์/์ค๊ฐ/๋์)
์ ํ๊ธฐํด์ค.4) ์ด์์์ ์์ฃผ ๋์น๋ ํฌ์ธํธ
- Action์ด ๋ฆฌ๋ทฐ ์ฝ๋ฉํธ๋ฅผ ๋จ๊ธธ ๊ถํ(
pull-requests: write)์ด ๋น ์ง๋ฉด ๊ฒฐ๊ณผ๊ฐ ์กฐ์ฉํ ์คํจํ ์ ์์ต๋๋ค. - ๋ํ PR์์ ๋ ธ์ด์ฆ๊ฐ ๋ง์ผ๋ฉด, ํ๋กฌํํธ์ โCritical/Major/Minorโ ๋ฑ๊ธ์ ๊ฐ์ ํด ์ฝ๋ฉํธ ํ์ง์ ์์ ํํ์ธ์.
- ์๋ ๋ฆฌ๋ทฐ๋ merge ์น์ธ์ด ์๋๋ผ โ๋ฆฌ์คํฌ ์กฐ๊ธฐ ํ์งโ ์ญํ ๋ก ๋๋ ๊ฒ ์์ ํฉ๋๋ค.
5) ๋ฏธ๋ ์ฌ๋ก 2๊ฐ
์ฌ๋ก A: ์๋ ์์ฝ๋ง ๋์ (๋ถ๋ถ ์ฑ๊ณต)
PR ๊ธธ์ด๊ฐ ๊ธด ํ์์ ์์ฝ ์๋ํ๋ง ๋จผ์ ๋ถ์๋๋ ๋ฆฌ๋ทฐ ์์ ์๋๋ ๋นจ๋ผ์ก์ง๋ง, ํ ์คํธ ๋๋ฝ ๊ฒ์ถ์ ํฌ๊ฒ ๊ฐ์ ๋์ง ์์์ต๋๋ค.
์ฌ๋ก B: ์ํ์ถ ํ ํ๋ฆฟ ๋์ (์ฑ๊ณต)
๋ณด์/์ฑ๋ฅ/ํ ์คํธ/์ด์ 4์ถ ํ ํ๋ฆฟ์ ๊ณ ์ ํ์, ์ฝ๋ฉํธ ํ์ง ํธ์ฐจ๊ฐ ์ค๊ณ ์ฌ๋ ๋ฆฌ๋ทฐ ์๊ฐ์ด ๋จ์ถ๋์ต๋๋ค.
6) 20๋ถ ๋์ ๋ฃจํด
- 6๋ถ: PR ๋ฆฌ๋ทฐ ํ ํ๋ฆฟ(4์ถ) ํ์
- 8๋ถ: GitHub Action ์ต์ ๋ฒ์ ์ฐ๊ฒฐ
- 6๋ถ: ์ต๊ทผ PR 1๊ฑด ๋ฆฌํ์ค ์คํ
์๋ฃ ๊ธฐ์ค:
- ์๋ ์ฝ๋ฉํธ ๊ฒฐ๊ณผ๋ฅผ ์ฌ๋์ด ๋ฐ๋ก ํ์ ํ ์ ์๋ค
- PR๋ง๋ค ์ต์ ๋์ผ ํฌ๋งท์ ์ํ ํญ๋ชฉ์ด ๋จ๋๋ค
์ด์ ์ฒดํฌ๋ฆฌ์คํธ
- secrets/permissions๋ฅผ ์ต์ ๊ถํ์ผ๋ก ์ค์ ํ๋๊ฐ?
- ๋จธ์ง ์ต์ข ์ฑ ์์๋ฅผ ์ฌ๋์ผ๋ก ๋ช ์ํ๋๊ฐ?
- ์๋ ๋ฆฌ๋ทฐ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅ์ ํ์คํ ๋ฆฌ๋ก ์ถ์ ํ๋๊ฐ?
๋ค์ ์ฝ๊ธฐ
์์ฑํ AI ํ์ฉ ๊ณ ์ง
์ด ๋ฌธ์๋ Claude Code ๊ณต์ ๋ฌธ์๋ฅผ ๋ฐํ์ผ๋ก ์์ฑํ AI๋ฅผ ํ์ฉํด ์ ๋ฆฌํ์ผ๋ฉฐ, ์ต์ข ๊ณต๊ฐ ์ ์ฌ๋์ด ๊ฒํ ยท๋ณด์ ํ์ต๋๋ค.