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๋ถ„ ๋„์ž… ๋ฃจํ‹ด

  1. 6๋ถ„: PR ๋ฆฌ๋ทฐ ํ…œํ”Œ๋ฆฟ(4์ถ•) ํ™•์ •
  2. 8๋ถ„: GitHub Action ์ตœ์†Œ ๋ฒ„์ „ ์—ฐ๊ฒฐ
  3. 6๋ถ„: ์ตœ๊ทผ PR 1๊ฑด ๋ฆฌํ—ˆ์„ค ์‹คํ–‰

์™„๋ฃŒ ๊ธฐ์ค€:

  • ์ž๋™ ์ฝ”๋ฉ˜ํŠธ ๊ฒฐ๊ณผ๋ฅผ ์‚ฌ๋žŒ์ด ๋ฐ”๋กœ ํŒ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค
  • PR๋งˆ๋‹ค ์ตœ์†Œ ๋™์ผ ํฌ๋งท์˜ ์œ„ํ—˜ ํ•ญ๋ชฉ์ด ๋‚จ๋Š”๋‹ค

์šด์˜ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

  • secrets/permissions๋ฅผ ์ตœ์†Œ ๊ถŒํ•œ์œผ๋กœ ์„ค์ •ํ–ˆ๋Š”๊ฐ€?
  • ๋จธ์ง€ ์ตœ์ข… ์ฑ…์ž„์ž๋ฅผ ์‚ฌ๋žŒ์œผ๋กœ ๋ช…์‹œํ–ˆ๋Š”๊ฐ€?
  • ์ž๋™ ๋ฆฌ๋ทฐ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅ์†Œ ํžˆ์Šคํ† ๋ฆฌ๋กœ ์ถ”์ ํ•˜๋Š”๊ฐ€?

๋‹ค์Œ ์ฝ๊ธฐ

์ƒ์„ฑํ˜• AI ํ™œ์šฉ ๊ณ ์ง€

์ด ๋ฌธ์„œ๋Š” Claude Code ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ƒ์„ฑํ˜• AI๋ฅผ ํ™œ์šฉํ•ด ์ •๋ฆฌํ–ˆ์œผ๋ฉฐ, ์ตœ์ข… ๊ณต๊ฐœ ์ „ ์‚ฌ๋žŒ์ด ๊ฒ€ํ† ยท๋ณด์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.