muaco Tech Note

Claude Codecode.claude.com

GitHub Actions에서 Claude Code로 PR 자동 리뷰 만들기토큰과 워크플로 설정

GitHub 저장소에 Claude Code 리뷰 워크플로를 넣어 PR을 열 때마다 리뷰 댓글이 자동으로 달리게 만들고, 12월 2일 pull_request_target 기본 차단에 대비해 점검합니다.

안녕하세요, muaco입니다.

이 글로 할 수 있는 일

이 글을 따라 하면 PR을 열 때마다 Claude Code가 코드를 읽고 리뷰 댓글을 자동으로 남깁니다. 문제를 찾으면 해당 줄에 댓글을 달고, 찾지 못하면 요약 댓글 하나로 끝냅니다.

PR(풀 리퀘스트)은 회사의 결재 요청서와 닮았습니다. 바꾼 코드를 본 줄기에 합쳐 달라고 올리는 서류입니다. 이렇게 코드가 올라올 때마다 정해 둔 검사를 자동으로 돌리는 방식을 CI(지속적 통합)라고 부릅니다.

GitHub에서 그 검사를 맡는 당번이 GitHub Actions이고, 당번에게 건네는 지시서가 워크플로 파일입니다.

미리 갖춰야 할 준비물

  • GitHub 저장소와 관리자(admin) 권한. 권한이 없다면 저장소 주인에게 먼저 부탁하세요.
  • Claude 인증 수단 하나. Claude Console(platform.claude.com)에서 만든 API 키와 Pro, Max, Ultra, Team, Enterprise 요금제 구독 가운데 하나를 고르세요. 구독을 쓴다면 토큰을 뽑을 Claude Code가 내 컴퓨터에 깔려 있어야 합니다.
  • 실행 비용. 한 번 돌 때마다 GitHub Actions 실행 시간(분 단위)과 Claude API 사용량이 함께 듭니다. 구독 토큰으로 인증하면 API 요금 대신 구독에서 쓰입니다.

Claude Code를 이미 쓰고 있다면 지름길 명령을 써 보세요. claude를 켜고 /install-github-app을 입력하면 앱 설치부터 워크플로 PR 준비까지 대신 해 줍니다. 다만 github.com 저장소 전용이고, GitHub CLI와 gh auth login 로그인이 먼저 필요합니다.

그런데 이 글은 왜 같은 일을 손으로 하나씩 할까요? 토큰과 지시서가 각각 무슨 일을 하는지 알아야, 막혔을 때 스스로 풀 수 있습니다. 전체 흐름은 이렇습니다.

따라 하기: 리뷰 당번 세우기

준비: 출입증과 열쇠

따라 하기
  1. 회사 저장소라면 먼저 보안 담당자와 권한 목록을 확인하세요. 이 앱은 권한을 일부만 골라 받을 수 없습니다.
  2. Claude GitHub 앱에서 저장소를 골라 설치합니다. 저장소 설정의 GitHub Apps 목록에 Claude가 보이면 됩니다.
  3. 인증 토큰을 하나 마련합니다. API 키라면 Claude Console에서 만들고, 구독이라면 터미널(글자로 명령을 쳐서 컴퓨터를 부리는 창)에서 claude setup-token을 실행합니다. 토큰은 Claude를 부를 때 내미는 열쇠입니다.
  4. claude setup-token을 썼다면 브라우저에서 허락한 뒤 터미널에 뜬 토큰을 바로 복사합니다. 이 명령은 토큰을 어디에도 저장해 두지 않습니다. 만든 토큰은 1년 동안 쓸 수 있습니다.
  5. 저장소의 Settings를 열고 왼쪽 메뉴 Security 묶음의 Secrets and variables에서 Actions로 갑니다. Secrets 탭에서 New repository secret을 누르세요. 시크릿은 열쇠를 지시서에 그대로 적지 않으려고 쓰는 금고입니다.
  6. Name 칸에 이름을, Secret 칸에 토큰을 넣고 Add secret을 누릅니다. 이름은 API 키면 ANTHROPIC_API_KEY, 구독 토큰이면 CLAUDE_CODE_OAUTH_TOKEN으로 한 글자도 틀리지 않게 적습니다. 목록에 그 이름이 뜨면 성공입니다.

설정: 워크플로 파일

따라 하기
  1. 같은 이름의 파일이 이미 있다면 새로 만들지 말고 열어서 아래 예제와 견줘 보세요. 예전에 지름길 명령이 만들어 둔 파일일 수 있습니다.
  2. 없다면 GitHub 웹에서 저장소 첫 화면을 열고, 파일 목록 위 Add file 메뉴에서 Create new file을 누릅니다. 이름 칸에 .github/workflows/claude-code-review.yml을 적으면 /마다 폴더가 생깁니다.
  3. 아래 내용을 들여쓰기까지 그대로 붙여 넣습니다. 공식 문서의 리뷰 예제입니다.
name: Code Review
on:
  pull_request:
    types: [opened, synchronize, ready_for_review, reopened]
jobs:
  review:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      pull-requests: read
      issues: read
      id-token: write
    steps:
      - uses: actions/checkout@v6
        with:
          fetch-depth: 1
      - uses: anthropics/claude-code-action@v1
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          plugin_marketplaces: "https://github.com/anthropics/claude-plugins-official.git"
          plugins: "code-review@claude-plugins-official"
          prompt: "/code-review:code-review --comment ${{ github.repository }}/pull/${{ github.event.pull_request.number }}"
          claude_args: '--allowedTools "mcp__github_inline_comment__create_inline_comment"'
따라 하기
  1. 구독 토큰을 넣었다면 anthropic_api_key 줄을 claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}로 바꿉니다.
  2. Commit changes...를 누르고, 뜬 창에서 기본 브랜치(대개 main)에 바로 커밋(바뀐 내용을 저장소 기록에 남기는 일)합니다. 바로 커밋이 막힌 저장소라면 새 브랜치를 골라 PR을 열고 병합하세요.

지시서에서 눈여겨볼 줄은 둘입니다. 나머지는 손대지 않아도 됩니다.

  • --comment: 리뷰를 PR에 댓글로 올립니다. 빼면 댓글이 달리지 않고 실행 기록에만 남습니다.
  • claude_args 줄: 줄마다 댓글을 다는 도구를 켭니다. 플러그인 쪽에 같은 도구가 적혀 있어도 이 줄이 있어야 도구가 시작됩니다.

점검: 12월 2일 규칙

PR이 열리거나 댓글이 달리는 일처럼 당번을 깨우는 신호를 이벤트라고 부릅니다. 2026년 12월 2일부터 GitHub는 공개 저장소에서 pull_request_target 이벤트로 실행되는 워크플로를 기본으로 막습니다.

내 저장소도 해당할까요? Actions 이벤트 정책을 따로 정해 두지 않았고, 정식 출시(GA) 전부터 pull_request_target 기본 정책을 써 온 공개 저장소가 대상입니다. 비공개·내부 저장소는 해당하지 않습니다.

따라 하기
  1. 방금 만든 파일에서 on: 아래가 pull_request인지 확인합니다. 이름이 비슷한 pull_request_target이 적혀 있다면 pull_request로 고치세요.
  2. 저장소의 다른 워크플로 파일도 같은 눈으로 훑어봅니다. 지금은 평가 모드(막지 않고 기록만 하는 상태)라서, Settings의 Actions 정책 화면 아래 Policy insights에서 막힐 실행을 미리 볼 수 있습니다.
  3. pull_request_target을 꼭 써야 하는 워크플로가 있을 때만 이 단계를 밟습니다. Actions 이벤트 정책에서 명시적으로 허용하면 계속 실행됩니다. 이 이벤트는 기본 저장소의 비밀값을 쥔 채 실행되므로, PR 쪽 코드를 받아 실행하는 지시서에는 허용하지 마세요.

확인: 시험 PR 열기

따라 하기
  1. 같은 저장소 안에 새 브랜치(본 줄기를 건드리지 않고 따로 작업하는 곁가지)를 만들고, 코드를 몇 줄 고쳐 PR을 엽니다. 초안(draft) PR이나 너무 사소한 수정은 Claude가 건너뛰니 일반 PR로 여세요.
  2. 저장소의 Actions 탭에서 Code Review 워크플로가 실행되는지 봅니다. 아무것도 뜨지 않으면 지시서 위치와 on: 줄, 저장소에서 워크플로가 켜져 있는지를 확인하세요.
  3. 실행이 끝나면 PR에 Claude의 댓글이 달렸는지 봅니다. 문제를 찾았다면 해당 줄마다, 찾지 못했다면 요약 댓글 하나가 달려 있습니다.

막히기 쉬운 네 군데

실행은 끝났는데 댓글이 없습니다

  • 증상: Actions 실행은 성공했는데 PR에는 Claude의 댓글이 하나도 없습니다.
  • 원인: --comment가 빠지면 리뷰는 실행 기록에만 남습니다. 초안, 닫힌 PR, 사소한 PR, 이미 Claude 댓글이 달린 PR도 일부러 건너뜁니다. 커밋을 더 올려도 리뷰가 다시 붙지 않는 까닭입니다.
  • 해결: 지시서의 prompt와 claude_args 두 줄을 위 예제와 대조하세요. Claude Code v2.1.229 이전 지름길 명령이 만든 파일이면 새로 받을 수도 있습니다.
  • 다시 받기: /install-github-app을 다시 실행해 Update workflow file with latest version을 고릅니다(저장소에 claude.yml이 있을 때 뜹니다). 최신 파일이 새 브랜치로 올라가고 PR 화면이 열리면, 그 PR을 만들어 병합해야 반영됩니다.

실행이 곧바로 실패합니다

  • 증상: 봇이 연 PR이나 쓰기 권한 없는 사람이 연 PR에서만 실행이 실패로 끝납니다.
  • 원인: 액션은 Claude를 부르기 전에 두 가지를 봅니다. PR을 올린 사람에게 쓰기 권한이 있는지, 사람인지 봇인지입니다.
  • 해결: 믿을 수 있는 봇이면 with: 아래 allowed_bots에 이름을 올립니다. 쓰기 권한 없는 사람까지 여는 allowed_non_write_users는 공식 보안 문서가 위험하다고 적은 설정이니 리뷰용으로는 피하세요.

인증 오류가 납니다

  • 증상: 실행 기록에 인증 오류가 찍히고 리뷰가 시작되지 않습니다.
  • 원인: 금고에 열쇠가 없거나, 금고 이름과 지시서가 부르는 이름이 어긋났을 수 있습니다. 열쇠 자체가 무효인 경우도 있습니다.
  • 해결: Secrets 목록의 이름과 지시서의 secrets. 뒤 이름을 한 글자씩 맞춰 봅니다. 이름이 맞다면 워크플로를 뒤지기 전에 열쇠를 내 컴퓨터에서 먼저 시험하세요.
  • 시험 방법: macOS·Linux 터미널에서 export CLAUDE_CODE_OAUTH_TOKEN=복사한토큰을 입력하고 같은 창에서 claude -p "안녕"을 실행합니다. API 키라면 변수 이름만 ANTHROPIC_API_KEY로 바꾸세요. 답이 오면 열쇠는 멀쩡합니다.
  • Windows라면: PowerShell에서 $env:CLAUDE_CODE_OAUTH_TOKEN = "복사한토큰"처럼 입력합니다.

포크에서 온 PR에는 리뷰가 없습니다

  • 증상: 외부 기여자가 포크(저장소를 통째로 복사해 간 사본)에서 보낸 PR에만 리뷰가 붙지 않습니다.
  • 원인: 공개 저장소에서 GitHub는 포크 PR이 띄운 실행에 비밀값을 넘기지 않습니다. 열쇠가 없으니 Claude를 부르지 못합니다.
  • 해결: 고장이 아니라 정해진 동작입니다. 이를 풀려고 pull_request_target으로 바꾸지는 마세요. 까닭은 12월 2일 점검의 3단계에 적었습니다.

여기서 더 나아가려면

리뷰 기준을 팀에 맞추려면 저장소 맨 위에 CLAUDE.md를 두고 코드 스타일과 리뷰 기준을 적어 두세요. Claude가 실행마다 이 파일을 읽으니, 짧게 유지할수록 비용도 줄어듭니다.

비용에 상한을 두고 싶다면 claude_args에 --max-turns를 더하고 워크플로에 시간 제한을 걸어 두세요.

이상으로 글 마치겠습니다.

참고한 공식 문서

#GitHub Actions#Claude Code#CI#자동 리뷰#코드 리뷰#워크플로#pull_request_target

같은 분류의 글