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 로그인이 먼저 필요합니다.
그런데 이 글은 왜 같은 일을 손으로 하나씩 할까요? 토큰과 지시서가 각각 무슨 일을 하는지 알아야, 막혔을 때 스스로 풀 수 있습니다. 전체 흐름은 이렇습니다.
따라 하기: 리뷰 당번 세우기
준비: 출입증과 열쇠
- 회사 저장소라면 먼저 보안 담당자와 권한 목록을 확인하세요. 이 앱은 권한을 일부만 골라 받을 수 없습니다.
- Claude GitHub 앱에서 저장소를 골라 설치합니다. 저장소 설정의 GitHub Apps 목록에 Claude가 보이면 됩니다.
- 인증 토큰을 하나 마련합니다. API 키라면 Claude Console에서 만들고, 구독이라면 터미널(글자로 명령을 쳐서 컴퓨터를 부리는 창)에서
claude setup-token을 실행합니다. 토큰은 Claude를 부를 때 내미는 열쇠입니다. claude setup-token을 썼다면 브라우저에서 허락한 뒤 터미널에 뜬 토큰을 바로 복사합니다. 이 명령은 토큰을 어디에도 저장해 두지 않습니다. 만든 토큰은 1년 동안 쓸 수 있습니다.- 저장소의 Settings를 열고 왼쪽 메뉴 Security 묶음의 Secrets and variables에서 Actions로 갑니다. Secrets 탭에서 New repository secret을 누르세요. 시크릿은 열쇠를 지시서에 그대로 적지 않으려고 쓰는 금고입니다.
- Name 칸에 이름을, Secret 칸에 토큰을 넣고 Add secret을 누릅니다. 이름은 API 키면
ANTHROPIC_API_KEY, 구독 토큰이면CLAUDE_CODE_OAUTH_TOKEN으로 한 글자도 틀리지 않게 적습니다. 목록에 그 이름이 뜨면 성공입니다.
설정: 워크플로 파일
- 같은 이름의 파일이 이미 있다면 새로 만들지 말고 열어서 아래 예제와 견줘 보세요. 예전에 지름길 명령이 만들어 둔 파일일 수 있습니다.
- 없다면 GitHub 웹에서 저장소 첫 화면을 열고, 파일 목록 위 Add file 메뉴에서 Create new file을 누릅니다. 이름 칸에
.github/workflows/claude-code-review.yml을 적으면/마다 폴더가 생깁니다. - 아래 내용을 들여쓰기까지 그대로 붙여 넣습니다. 공식 문서의 리뷰 예제입니다.
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"'
- 구독 토큰을 넣었다면
anthropic_api_key줄을claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}로 바꿉니다. - Commit changes...를 누르고, 뜬 창에서 기본 브랜치(대개
main)에 바로 커밋(바뀐 내용을 저장소 기록에 남기는 일)합니다. 바로 커밋이 막힌 저장소라면 새 브랜치를 골라 PR을 열고 병합하세요.
지시서에서 눈여겨볼 줄은 둘입니다. 나머지는 손대지 않아도 됩니다.
--comment: 리뷰를 PR에 댓글로 올립니다. 빼면 댓글이 달리지 않고 실행 기록에만 남습니다.claude_args줄: 줄마다 댓글을 다는 도구를 켭니다. 플러그인 쪽에 같은 도구가 적혀 있어도 이 줄이 있어야 도구가 시작됩니다.
점검: 12월 2일 규칙
PR이 열리거나 댓글이 달리는 일처럼 당번을 깨우는 신호를 이벤트라고 부릅니다. 2026년 12월 2일부터 GitHub는 공개 저장소에서 pull_request_target 이벤트로 실행되는 워크플로를 기본으로 막습니다.
내 저장소도 해당할까요? Actions 이벤트 정책을 따로 정해 두지 않았고, 정식 출시(GA) 전부터 pull_request_target 기본 정책을 써 온 공개 저장소가 대상입니다. 비공개·내부 저장소는 해당하지 않습니다.
- 방금 만든 파일에서
on:아래가pull_request인지 확인합니다. 이름이 비슷한pull_request_target이 적혀 있다면pull_request로 고치세요. - 저장소의 다른 워크플로 파일도 같은 눈으로 훑어봅니다. 지금은 평가 모드(막지 않고 기록만 하는 상태)라서, Settings의 Actions 정책 화면 아래 Policy insights에서 막힐 실행을 미리 볼 수 있습니다.
pull_request_target을 꼭 써야 하는 워크플로가 있을 때만 이 단계를 밟습니다. Actions 이벤트 정책에서 명시적으로 허용하면 계속 실행됩니다. 이 이벤트는 기본 저장소의 비밀값을 쥔 채 실행되므로, PR 쪽 코드를 받아 실행하는 지시서에는 허용하지 마세요.
확인: 시험 PR 열기
- 같은 저장소 안에 새 브랜치(본 줄기를 건드리지 않고 따로 작업하는 곁가지)를 만들고, 코드를 몇 줄 고쳐 PR을 엽니다. 초안(draft) PR이나 너무 사소한 수정은 Claude가 건너뛰니 일반 PR로 여세요.
- 저장소의 Actions 탭에서 Code Review 워크플로가 실행되는지 봅니다. 아무것도 뜨지 않으면 지시서 위치와
on:줄, 저장소에서 워크플로가 켜져 있는지를 확인하세요. - 실행이 끝나면 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를 더하고 워크플로에 시간 제한을 걸어 두세요.
이상으로 글 마치겠습니다.
참고한 공식 문서
같은 분류의 글
Claude Code · github.com
Claude Code 작업 디렉터리 밖 파일 쓰기 막기: settings.json 한 줄 설정
settings.json에 한 줄을 넣어 Claude Code가 작업 디렉터리 밖에 파일을 쓰지 못하게 막고, 실제로 거부되는지 확인하는 법을 알려 드립니다.
Claude Code · code.claude.com
Claude Code 스크립트에서 부르기: claude -p와 JSON 출력 사용법
Claude Code를 화면 없이 claude -p로 불러 답을 받고, JSON 출력과 셸 스크립트로 반복 작업에 끼워 넣는 법을 따라 합니다.
Claude Code · code.claude.com
Claude Code 스킬·MCP·플러그인 비교: 무엇을 언제 붙이나
Claude Code의 스킬, MCP, 플러그인 가운데 내 문제에 맞는 쪽을 세 가지 사례로 고르고, 각각 어디에 설정하고 어떻게 확인하는지 알 수 있습니다.