Claude Code 헤드리스 모드와 CI/CD 완전정리: 자동화 파이프라인에 AI를 넣는 법
PR이 올라오면 AI가 자동으로 코드 리뷰, 이슈에 @claude를 멘션하면 자동으로 구현, 매일 아침 코드베이스 보안 점검 — 이 모든 게 Claude Code의 헤드리스 모드와 CI/CD 연동으로 가능합니다. 이 글에서는 비대화형 모드부터 GitHub Actions 연동까지 완전 정리합니다.

1. 헤드리스 모드란?
대화 없이 실행하는 Claude Code
헤드리스 모드(-p 플래그)는 Claude Code를 비대화형으로 실행합니다. 프롬프트를 받고, 작업을 수행하고, 결과를 stdout으로 출력한 뒤 종료합니다. 스크립트나 CI/CD 파이프라인에서 사용하기 위한 핵심 기능입니다.
# 기본 사용법
claude -p "src/auth.ts에서 보안 취약점 찾아줘"
# 파이프로 입력
cat error.log | claude -p "이 에러 로그를 요약해줘"
# git diff 분석
git diff HEAD~1 | claude -p "이 변경사항을 리뷰해줘"
대화형 vs 헤드리스
| 항목 | 대화형 (기본) | 헤드리스 (-p) |
|---|---|---|
| UI | 터미널 UI | 없음 (stdout만) |
| 종료 | 사용자가 직접 | 자동 종료 |
| 권한 확인 | 매번 물어봄 | 플래그로 제어 |
| 스크립트 사용 | 불가 | 가능 |
| CI/CD | 불가 | 핵심 모드 |
| 출력 캡처 | 어려움 | 쉬움 (stdout) |

2. 핵심 CLI 플래그
실행 제어
| 플래그 | 용도 | 예시 |
|---|---|---|
-p, --print |
헤드리스 모드 실행 | claude -p "분석해줘" |
--output-format |
출력 형식 (text/json/stream-json) | claude -p "질문" --output-format json |
--max-turns |
에이전트 반복 제한 | claude -p "질문" --max-turns 5 |
--model |
모델 선택 | claude -p --model opus "질문" |
--max-budget-usd |
비용 상한선 | claude -p --max-budget-usd 5.00 "질문" |
도구 제어
| 플래그 | 용도 | 예시 |
|---|---|---|
--allowedTools |
특정 도구 자동 승인 | --allowedTools "Read,Edit,Bash" |
--disallowedTools |
특정 도구 차단 | --disallowedTools "Bash(rm *)" |
--permission-mode |
권한 모드 설정 | --permission-mode acceptEdits |
시스템 프롬프트
| 플래그 | 용도 |
|---|---|
--append-system-prompt |
기본 프롬프트에 추가 (권장) |
--system-prompt |
기본 프롬프트 완전 교체 |
--system-prompt-file |
파일에서 프롬프트 로드 |
세션 관리
# 이전 대화 이어가기
claude -p "다음 단계 진행해줘" --continue
# 특정 세션 재개
claude -p "계속해줘" --resume "session-id"

3. 출력 형식 — text, json, stream-json
text (기본값)
claude -p "이 프로젝트를 요약해줘"
# → 평문 텍스트 출력
json — 구조화된 출력
claude -p "함수 목록 추출해줘" --output-format json
{
"result": "분석 결과...",
"session_id": "abc-123",
"usage": {
"input_tokens": 1234,
"output_tokens": 567
}
}
# jq로 특정 필드만 추출
claude -p "분석해줘" --output-format json | jq -r '.result'
stream-json — 실시간 스트리밍
claude -p "설명해줘" \
--output-format stream-json \
--verbose \
--include-partial-messages
JSON 스키마로 출력 검증
claude -p "auth.py에서 함수명 추출해줘" \
--output-format json \
--json-schema '{"type":"object","properties":{"functions":{"type":"array","items":{"type":"string"}}}}'
--json-schema를 사용하면 Claude가 스키마에 맞는 구조화된 데이터를 보장합니다.

4. 파이프라인 활용 예제
Unix 파이프와의 통합
Claude Code는 표준 Unix CLI 도구처럼 파이프에서 동작합니다.
# 파일 분석
cat auth.py | claude -p "보안 취약점 찾아줘"
# git diff 리뷰
git diff HEAD~1 | claude -p "이 변경사항 리뷰해줘"
# 에러 로그 분석
cat error.log | claude -p "핵심 에러 요약해줘"
# 빌드 에러 설명
cat build-error.txt | claude -p "원인 설명해줘"
출력 저장
# README 생성
claude -p "이 프로젝트의 README 만들어줘" > README.md
# 리뷰 결과를 JSON으로 저장
git diff | claude -p "버그 찾아줘" --output-format json | jq '.result' > review.md
스크립트 자동화
#!/bin/bash
# auto-review.sh — PR 자동 리뷰 스크립트
PR_NUMBER=$1
REVIEW=$(gh pr diff "$PR_NUMBER" | \
claude -p "이 PR을 리뷰하고 개선점을 알려줘" \
--output-format json \
--max-turns 5 | \
jq -r '.result')
echo "$REVIEW"
#!/bin/bash
# security-scan.sh — 보안 스캔 스크립트
claude -p "package.json의 보안 취약점 분석하고 해결책 제시해줘" \
--allowedTools "Read,Bash(npm audit *)" \
--max-turns 3 \
--output-format json

5. GitHub Actions 연동
공식 액션 설치
# Claude Code 안에서 한 번에 설치
claude
/install-github-app
이 명령으로 Claude GitHub App 설치, API 시크릿 생성, 워크플로우 설정이 자동으로 진행됩니다.
기본 워크플로우
# .github/workflows/claude.yml
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 }}
이 설정만으로 이슈나 PR 코멘트에서 @claude를 멘션하면 Claude가 자동 응답합니다.
PR 자동 리뷰 워크플로우
name: Auto Review
on:
pull_request:
types: [opened, synchronize]
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
prompt: "/review"
claude_args: "--max-turns 5"
스케줄 기반 자동화
name: Daily Security Scan
on:
schedule:
- cron: "0 9 * * *"
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
prompt: "보안 취약점 전체 스캔하고 리포트 생성해줘"
claude_args: "--model opus --max-turns 3"

6. GitLab CI/CD 연동
기본 설정
stages:
- ai
claude-review:
stage: ai
image: node:24-alpine3.21
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
before_script:
- apk add --no-cache git curl bash
- curl -fsSL https://claude.ai/install.sh | bash
script:
- claude -p "이 MR을 리뷰하고 개선점을 제시해줘" \
--permission-mode acceptEdits \
--allowedTools "Read,Bash(git diff *)" \
--max-turns 5
variables:
ANTHROPIC_API_KEY: $ANTHROPIC_API_KEY
AWS Bedrock 연동
claude-bedrock:
stage: ai
image: node:24-alpine3.21
before_script:
- apk add --no-cache bash curl git python3 py3-pip
- pip install awscli
- curl -fsSL https://claude.ai/install.sh | bash
script:
- claude -p "코드 리뷰해줘" \
--permission-mode acceptEdits
variables:
CLAUDE_CODE_USE_BEDROCK: "1"
AWS_REGION: "us-west-2"

7. 클라우드 프로바이더 연동
API 키 vs 클라우드 프로바이더
| 방식 | 설정 | 장점 |
|---|---|---|
| API 키 | ANTHROPIC_API_KEY |
간단, 범용 |
| AWS Bedrock | CLAUDE_CODE_USE_BEDROCK=1 |
AWS 결제 통합, OIDC |
| Google Vertex | CLAUDE_CODE_USE_VERTEX=1 |
GCP 결제 통합, WIF |
AWS Bedrock (GitHub Actions)
- uses: anthropics/claude-code-action@v1
with:
use_bedrock: "true"
claude_args: '--model us.anthropic.claude-sonnet-4-6'
env:
AWS_ROLE_TO_ASSUME: ${{ secrets.AWS_ROLE_TO_ASSUME }}
AWS_REGION: us-west-2
Google Vertex AI (GitHub Actions)
- uses: anthropics/claude-code-action@v1
with:
use_vertex: "true"
claude_args: '--model claude-sonnet-4@20250514'
env:
ANTHROPIC_VERTEX_PROJECT_ID: ${{ secrets.GCP_PROJECT_ID }}
CLOUD_ML_REGION: us-east5

8. 비용 관리와 보안
비용 최적화 전략
| 전략 | 방법 | 효과 |
|---|---|---|
| 턴 제한 | --max-turns 3~5 |
불필요한 반복 방지 |
| 예산 상한 | --max-budget-usd 10.00 |
비용 폭주 방지 |
| 모델 선택 | Sonnet 사용 (Opus보다 저렴) | 비용 절감 |
| 구체적 프롬프트 | 명확한 지시 | 토큰 절약 |
| 도구 제한 | --allowedTools |
불필요한 실행 방지 |
API 키 보안
# ✅ 올바른 방법: 환경 변수/시크릿 사용
export ANTHROPIC_API_KEY="sk-..."
# ✅ GitHub Actions 시크릿
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
# ❌ 잘못된 방법: 코드에 직접 입력
# 절대 하지 마세요!
권한 격리
# 읽기 전용 리뷰 (안전)
claude -p "PR 리뷰해줘" \
--allowedTools "Read,Bash(git diff *)" \
--disallowedTools "Bash(rm *),Bash(git push *)"
# 편집 허용 (주의)
claude -p "린트 에러 고쳐줘" \
--permission-mode acceptEdits \
--allowedTools "Read,Edit,Bash(npm run lint *)"

9. 실전 CI/CD 레시피
레시피 1: PR 자동 리뷰 + 코멘트
name: PR Review
on:
pull_request:
types: [opened, synchronize]
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
prompt: |
이 PR의 변경사항을 리뷰해줘:
- 버그 가능성
- 성능 이슈
- 보안 취약점
- 코드 스타일
claude_args: "--max-turns 5 --model sonnet"
레시피 2: 이슈 → 자동 구현
name: Auto Implement
on:
issue_comment:
types: [created]
jobs:
implement:
if: contains(github.event.comment.body, '@claude')
runs-on: ubuntu-latest
steps:
- uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
레시피 3: 매일 보안 스캔
#!/bin/bash
# daily-scan.sh
RESULT=$(claude -p "전체 코드베이스 보안 스캔 실행. 취약점을 심각도별로 정리해줘" \
--output-format json \
--max-turns 10 \
--max-budget-usd 5.00 | jq -r '.result')
# Slack 알림 전송
curl -X POST "$SLACK_WEBHOOK" \
-H 'Content-type: application/json' \
-d "{\"text\": \"보안 스캔 결과:\\n$RESULT\"}"
레시피 4: 테스트 자동 생성
# 변경된 파일에 대한 테스트 자동 생성
git diff --name-only HEAD~1 | while read file; do
claude -p "이 파일의 테스트를 생성해줘: $file" \
--allowedTools "Read,Write" \
--max-turns 3
done

10. 자주 묻는 질문 (FAQ)
Q: 헤드리스 모드에서 권한 확인이 뜨면 어떻게 하나요?
A: --allowedTools로 필요한 도구를 미리 승인하거나, --permission-mode acceptEdits로 편집을 자동 승인하세요. CI/CD에서는 필수입니다.
Q: GitHub Actions에서 비용이 얼마나 드나요?
A: GitHub Actions 자체 비용 + Claude API 비용이 발생합니다. --max-turns와 --max-budget-usd로 비용을 제어하세요.
Q: 대용량 파일을 파이프로 넣으면?
A: 매우 큰 파일은 잘릴 수 있습니다. 파일을 직접 참조하는 것이 더 안정적입니다: claude -p "src/big-file.ts를 분석해줘"
Q: 여러 PR을 동시에 리뷰할 수 있나요?
A: 네, GitHub Actions 워크플로우가 PR마다 독립적으로 실행됩니다. 동시에 여러 PR을 처리할 수 있습니다.
Q: 오프라인에서도 헤드리스 모드가 작동하나요?
A: 아닙니다. Claude Code는 Claude API에 접속해야 하므로 인터넷 연결이 필수입니다.
Q: 자체 호스팅 러너에서도 사용 가능한가요?
A: 네, Node.js가 설치된 러너라면 curl -fsSL https://claude.ai/install.sh | bash로 설치 후 사용할 수 있습니다.
면책 조항: 이 글은 정보 제공 목적으로 작성되었습니다. Claude Code의 기능과 요금은 Anthropic의 정책에 따라 변경될 수 있으며, 최신 정보는 공식 문서를 확인해 주세요.
'IT' 카테고리의 다른 글
| Claude Code 에이전트 팀 완전정리: AI 팀을 만들어 협업하는 법 (1) | 2026.03.11 |
|---|---|
| Claude Code 서브에이전트 완전정리: AI가 AI를 부려서 일하는 법 (0) | 2026.03.11 |
| Claude Code MCP 서버 연동 완전정리: AI에 외부 도구를 연결하는 법 (0) | 2026.03.10 |
| Claude Code Hook 시스템 완전정리: AI 코딩을 자동화하는 확실한 방법 (0) | 2026.03.10 |
| Claude Code Git 연동 완전정리: 커밋, PR, 브랜치를 AI로 자동화하는 법 (0) | 2026.03.10 |
댓글