본문 바로가기
프로그램 (PHP,Python)

GitHub PR 보안·품질·속도를 동시에 잡는 Claude Code Action 활용법

by 날으는물고기 2025. 11. 19.

GitHub PR 보안·품질·속도를 동시에 잡는 Claude Code Action 활용법

728x90

“GitHub 안에 들어앉은 Claude 에이전트”

역할

  • PR/이슈에 대한 지능형 코드 어시스턴트 + 자동 구현 에이전트
  • 개발자가 GitHub에서
    • @claude에 질문 → 코드/아키텍처/Q&A
    • @claude에게 “이 PR 보안 리뷰해줘” → 리뷰 코멘트 + 개선 제안
    • “이 이슈 구현해줘” → 브랜치 생성, 코드 수정, PR 생성까지 자동 실행

지능형 모드 감지 (Intelligent Mode Detection)

  • 별도 mode 설정 없이 워크플로 컨텍스트를 보고 자동으로 모드를 결정:
    • PR/이슈 댓글 + @claudeTag Mode (대화/리뷰 모드)
    • prompt가 있는 스케줄/라벨/자동 워크플로 → Agent Mode (자동화 모드)

지원 모델/제공자

  • Anthropic API 직접 호출
  • AWS Bedrock 기반 Claude
  • Google Vertex AI 기반 Claude

실행 위치

  • GitHub Actions Runner에서 돌아가며, 코드/파일 조작은 전부 GitHub API + MCP 서버를 통해 수행됩니다.

아키텍처 구조 – 두 단계 + 모드 시스템 + MCP

1. 두 단계 구조

Phase 1 – Preparation (prepare.ts)

  • GitHub 토큰/OIDC 인증 설정
  • 액터 권한 확인(쓰기 권한 등)
  • 이벤트 분석 → Claude를 실행해야 할지, 어떤 모드인지 결정
  • PR/이슈 컨텍스트 수집 + 진행상황 체크박스가 포함된 tracking comment 생성

Phase 2 – Execution (base-action/)

  • GitHub MCP 서버 설치/구성
  • PR diff, 이슈 내용, 파일 내용 등으로 프롬프트 생성
  • Claude 호출(Anthropic/Bedrock/Vertex)
  • 결과 반영
    • 파일 수정/커밋/브랜치·PR 생성
    • PR/이슈 코멘트 업데이트
    • 체크박스 상태 갱신

2. 모드 시스템

Mode 디렉토리 (src/modes/)

  • Tag 모드
    • @claude 멘션, 이슈 할당 등 “사람 요청”을 처리
    • 코드 리뷰, 질의응답, 부분 수정 등
  • Agent 모드
    • 워크플로 prompt에 따라 완전 자동화 작업 수행
    • 예: “매일 새벽 3시 리포지토리 헬스 체크하고 이슈 생성”

각 모드는 공통 인터페이스(shouldTrigger, prepare) 구현, registry.ts에서 이벤트와 매핑됩니다.

3. GitHub / MCP 통합 구조

GitHub 통합 (src/github/)

  • 컨텍스트 파싱: 이벤트(댓글, PR, 이슈) → 내부 공통 구조
  • 데이터 페치: GraphQL/REST로 PR diff, 코멘트, 이슈, 파일 등 수집
  • 연산
    • 브랜치 생성/삭제
    • 파일 수정 커밋
    • 코멘트/리뷰 작성 및 업데이트

MCP 서버 (src/mcp/)

  • GitHub Actions 서버: 워크플로/CI 관련 작업
  • GitHub Comment 서버: 코멘트 읽기/쓰기
  • GitHub File Ops 서버: 리포지토리 파일 읽기/쓰기
  • MCP 설정은 mcp_config로 사용자가 추가 확장 가능 (예: 사내 API, 이슈 트래커 MCP 등).

진행상황 체크박스

  • Claude가 작업을 단계별로 수행하면서 tracking comment의 체크박스 상태를 실시간 갱신
  • “설계 검토 → 코드 작성 → 테스트 → PR 생성” 식으로 눈에 보이는 상태 관리가 가능.

주요 기능 정리 (질의응답 + 리뷰 + 구현 자동화)

1. 코드 Q&A / 아키텍처 질의응답

💬 예시 (PR/이슈 댓글)

@claude 이 PR에서 user authentication 흐름이 어떻게 되는지 설명해줘.
@claude 이 서비스간 의존성을 줄이려면 어떤 구조로 리팩터링하는 게 좋을까?
  • Claude는
    • 관련 코드를 MCP로 읽고
    • 언어/프레임워크/아키텍처 관점에서 설명
    • 설계 상의 리스크나 개선 포인트 제안

2. PR 리뷰 자동화

기능

  • PR diff 분석
  • 스타일/성능/보안/테스트 커버리지 관점 리뷰
  • GitHub 리뷰 코멘트로 제안 추가

💡 워크플로 예시: 특정 라벨이 붙으면 자동 리뷰

name: Claude Auto Review

on:
  pull_request:
    types: [opened, synchronize, labeled]

jobs:
  review:
    if: contains(github.event.pull_request.labels.*.name, 'review:claude')
    runs-on: ubuntu-latest
    steps:
      - uses: anthropics/claude-code-action@v1
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          prompt: "/review security, performance, readability 관점에서 엄격하게 리뷰해줘"
          claude_args: |
            --max-turns 6

3. 코드 구현 / 수정 자동화

가능한 작업 범위

  • 단순 수정(버그 픽스)
  • 리팩터링
  • 신규 기능 구현
  • 테스트 코드 추가, 문서 업데이트

💡 예시 – 이슈 기반 기능 구현

name: Implement Feature from Issue

on:
  issues:
    types: [opened, labeled]

jobs:
  implement:
    if: contains(github.event.issue.labels.*.name, 'impl:claude')
    runs-on: ubuntu-latest
    steps:
      - uses: anthropics/claude-code-action@v1
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          prompt: |
            이 이슈 설명을 기준으로 기능을 구현해줘.
            - 기존 코드 스타일과 폴더 구조를 따르고
            - 단위 테스트를 추가하고
            - CHANGELOG 또는 관련 문서를 업데이트해줘.
          claude_args: |
            --max-turns 12
  • Claude가
    • 브랜치 생성
    • 코드를 수정 & 테스트 추가
    • PR 생성
    • PR에 작업 내용과 체크리스트를 코멘트로 남김

4. 진척도 시각화(체크박스)

Progress Tracking

  • Claude가 tracking comment 예시
    작업 진행 상황:
    
    - [x] 요구사항 분석
    - [x] 관련 코드 파일 스캔
    - [ ] 구현
    - [ ] 테스트 작성 및 실행
    - [ ] PR 생성 및 링크 추가
  • 단계가 끝날 때마다 체크박스 업데이트 → 사람이 보기에도 “어디까지 되었는지” 명확.

설정 구조 – prompt + claude_args + CLAUDE.md

1. Action 입력 구조의 핵심

통합된 설정

- uses: anthropics/claude-code-action@v1
  with:
    anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
    prompt: "여기에 Claude에게 줄 지시"
    claude_args: |
      --model claude-sonnet-4.5
      --max-turns 8
      --system-prompt "사내 코딩 컨벤션과 보안 가이드를 반드시 지켜라."
  • prompt
    • “이번 실행에서 무엇을 시킬지”에 대한 주 지시문
  • claude_args
    • CLI 옵션을 그대로 넘기는 형태
    • 예: --model, --max-turns, --system-prompt, --allowedTools, --disallowedTools

2. CLAUDE.md – 레포지토리 단위 정책 파일

CLAUDE.md 역할

  • 레포지토리 루트에 두는 “이 프로젝트에서 Claude가 따라야 할 개발 규칙/컨텍스트” 문서
  • 예시 내용
    • 언어/프레임워크 버전, 런타임
    • 코딩 컨벤션, 폴더 구조
    • 테스트/배포 규칙, 커밋 메시지 규칙
    • 보안/취약점 관련 기준 (예: OWASP Top 10, 내부 보안 가이드)

Claude는 매 실행마다 이 파일을 참고하여

  • 프로젝트 스타일에 맞는 코드 작성
  • 보안/설계 기준 반영

3. 예시 – 기본 @claude 멘션 대응 워크플로

name: Claude Code

on:
  issue_comment:
    types: [created]
  pull_request_review_comment:
    types: [created]

jobs:
  claude:
    runs-on: ubuntu-latest
    steps:
      - uses: anthropics/claude-code-action@v1
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          # prompt 생략 시 → @claude 멘션에 자동 대응
  • 이 상태면 누군가 댓글에 @claude라고 적는 순간 Action이 기동되고, Tag 모드로 답변/코드 제안 수행.
300x250

보안 관점: 권한·네트워크·통제 전략

Claude Code Action은 강력하지만 네트워크/도구 사용에 제약이 적기 때문에, CI/CD에 넣을 때는 반드시 보안 컨트롤을 설계해야 합니다.

1. GitHub 권한/비밀정보 관리

🔐 권한 최소화

  • GitHub App / 워크플로 권한:
    • Contents: Read & write (필요 시에만)
    • Issues: Read & write
    • Pull requests: Read & write
  • 민감 리포엔:
    • write 대신 별도 “bot 전용” 브랜치만 쓰게 정책 수립
    • protected branch + 필수 리뷰/빌드 통과 후만 merge 허용

🔑 비밀정보(Secrets) 관리

  • ANTHROPIC_API_KEY는 반드시 GitHub Secrets로 보관
  • 다른 클라우드(AWS/Google) 자격증명도 역시 Secrets + OIDC/Workload Identity Federation 사용 권장

2. 네트워크/런타임 보안 (Harden-Runner 등)

🛡 네트워크 기본 특성

  • Claude Code Action은 기본적으로 네트워크 차단이 없음
    • 패키지 레지스트리(npm, PyPI) 접속
    • GitHub API, Anthropic API, 각종 외부 서비스 호출 가능
  • 이는 유연성을 높여주지만, 보안/감사 측면에서 리스크가 될 수 있음

🔍 Harden-Runner로 모니터링/차단

예시 – 아웃바운드 네트워크 감사 적용

jobs:
  claude:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      pull-requests: read
      issues: read
      id-token: write
    steps:
      - name: Harden the runner (Audit all outbound calls)
        uses: step-security/harden-runner@v2
        with:
          egress-policy: audit

      - name: Run Claude Code
        uses: anthropics/claude-code-action@v1
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          claude_args: |
            --allowedTools "Bash(npm test)"

보안 관점 가이드

  • 처음에는 egress-policy: audit으로 “누구에게 어디로 나가는지”를 관측
  • 이후 허용 도메인(Anthropic, GitHub, 사내 레지스트리 등)을 화이트리스트로 제한
  • 필요하다면 Bash 등 도구 사용을 정해진 커맨드로만 제한 (--allowedTools 활용)

3. 도구/파일 접근 통제

🧰 allowed/disallowed tools (현재는 claude_args로 전달)

  • 예: “테스트 실행만 허용하고, 임의 curl/rm -rf 같은 건 금지”라는 식으로 설계
claude_args: |
  --allowedTools "Bash(npm test)"
  --disallowedTools "Bash(rm *)"

📁 파일 접근 범위

  • Claude는 MCP GitHub File Ops를 통해 파일을 읽고 수정
  • 보안상 민감한 파일(예: 인프라 크리덴셜 템플릿)은
    • 별도 리포로 분리
    • Claude가 동작하는 워크플로에서 해당 경로 접근을 정책적으로 금지(프롬프트 + 코드 리뷰 규칙)

4. 리뷰/감사 및 운영 프로세스

🧾 사람 리뷰 필수 정책

  • Claude가 생성한 PR/커밋에는
    • “AI Generated” 라벨 자동 부여
    • 최소 1명 이상의 인간 리뷰어 필수 요구
  • 보안 고위험 영역(인증/암호화/결제)
    • Claude 코드는 “초안/제안”으로만 사용하고, 실제 반영은 담당자 수동 작성

📊 로그/모니터링

  • GitHub Audit Log, Actions 로그에
    • Claude 실행 워크플로 ID
    • 사용된 prompt/명령 패턴(내부 정책상 가능한 범위에서)
  • Harden-Runner / SIEM(Wazuh, Elastic, Chronicle 등)에
    • 네트워크 이벤트 / 프로세스 이벤트 연계
    • 비정상 외부 접속 탐지 룰 설정

도입/운영 체크리스트

  1. 리포지토리 범위 정의
    • 어느 레포/브랜치에 Claude Code를 허용할지 결정
    • POC는 비핵심·테스트 레포부터 시작
  2. 권한 설계
    • GitHub App 권한 최소화 (Contents/Issues/PR만)
    • Protected branch + 필수 리뷰/빌드
  3. 네트워크/런타임 통제
    • Harden-Runner 등으로 egress audit → 이후 제한
    • allowedTools로 실행 가능한 명령 최소화
  4. CLAUDE.md + 보안 가이드 구축
    • 프로젝트 코딩 규칙 + 보안 규칙(입력 검증, 인증/권한, 비밀정보 처리) 명시
    • “보안 관련 변경은 반드시 사람 검토 필요” 같은 정책도 적어둠
  5. 운영 정책/교육
    • 개발자에게
      • @claude 멘션 사용법
      • “무조건 믿지 말고 리뷰하라”는 원칙
    • 보안팀은
      • 정기적으로 Claude 생성 PR 샘플 리뷰
      • 이상 행위(과도한 패키지 설치, 외부 호스트 접속 등) 모니터링
  6. 클라우드 제공자 선택
    • 데이터 거버넌스/규제가 중요하다면:
      • AWS Bedrock / Google Vertex AI 경유 사용 검토 (데이터 레지던시, VPC 등)

“코드 리뷰 + 구현 자동화 엔진”으로 보기

정리하면 Claude Code Action은

  • PR/이슈 Q&A + 리뷰 + 코드 구현까지 한 번에 처리하는 GitHub Action
  • Intelligent Mode Detection으로 별도 모드 설정 없이 자연스럽게 동작
  • prompt + claude_args + CLAUDE.md만으로 구성이 단일화된 깔끔한 구조
  • GitHub API + MCP + 체크박스로 협업 흐름에 자연스럽게 녹아드는 자동화
  • 네트워크 제한이 거의 없는 강력한 에이전트이므로
    권한 최소화 + 네트워크 모니터링 + 사람 리뷰를 반드시 결합해야 안전하게 운영 가능
728x90
그리드형(광고전용)

댓글