Filter
Exclude
Time range
-
Near
🚀 [Seunghyeon's Claude Code 실전] Seunghyeon's Claude Code 실전 8. CLI 플래그 완전 정복: --print, --output-format, --resume, --continue 실전 활용 CI 파이프라인이 Claude를 호출하는 순간, 대화형 모드는 짐이 됩니다. ⚡ --print 하나가 그 짐을 전부 내려놓습니다. GitHub Actions YAML 한 줄에 Claude 응답이 JSON으로 꽂히는 경험. 그걸 처음 본 순간 파이프라인 설계가 달라졌습니다. 1. --print --output-format: 파이프라인의 첫 단추 "claude -p '린트 오류 원인 요약해줘' --output-format json" 을 실행하면 stdout에 구조화된 JSON이 그대로 떨어집니다. "jq '.result'" 한 줄이면 응답 텍스트만 뽑아서 Slack 알림, PR 코멘트, 이슈 본문에 바로 꽂을 수 있습니다. GitHub Actions step 예시 RESULT=$(claude -p "PR diff를 보고 위험 패턴 3줄 요약" \ --output-format json \ < diff.txt) echo "$​RESULT" | jq -r '.result' >> $​GITHUB_STEP_SUMMARY --output-format에는 "text", "json", "stream-json" 세 가지가 있습니다. "stream-json"은 토큰 단위 스트리밍이 필요한 실시간 로그 파이프에 씁니다. 스크립트 자동화라면 "json"이 단연 안전합니다. 파싱 대상이 고정되기 때문입니다. 2. 멱등성 확보: 같은 입력, 같은 출력을 보장하는 법 셸 스크립트에서 Claude를 반복 호출할 때 가장 무서운 건 '중간에 죽으면?'입니다. 재실행하면 같은 작업을 두 번 하거나, 이전 컨텍스트가 증발하는 상황이 생깁니다. 해결은 단순합니다. 첫 실행 때 세션 ID를 파일에 저장하고, 재실행 시 "--resume <session-id>"로 이어 붙이면 됩니다. SESSION_FILE=".claude_session_id" if [ -f "$​SESSION_FILE" ]; then SESSION_ID=$(cat "$​SESSION_FILE") claude --resume "$​SESSION_ID" -p "이전 분석 이어서 계속해줘" else # 첫 실행: 세션 ID 캡처 OUTPUT=$(claude -p "전체 저장소 보안 취약점 스캔 시작" \ --output-format json) echo "$​OUTPUT" | jq -r '.session_id' > "$​SESSION_FILE" echo "$​OUTPUT" | jq -r '.result' fi CI 파이프라인이 타임아웃으로 중단돼도 세션이 살아 있으면 이어받습니다. 티켓팅 사이트 새로고침처럼 처음부터 다시 줄 설 필요가 없습니다. 3. --continue vs --resume: 혼동하면 세션이 뒤엉킵니다 "--continue"는 '가장 최근 대화'를 자동으로 이어갑니다. 편하지만 병렬 워커를 여러 개 돌릴 때 서로의 세션을 덮어쓰는 사고가 납니다. "--resume <id>"는 명시적으로 세션을 지정합니다. Mac Mini 클러스터에서 n8n 워크플로 4개를 동시에 돌릴 때 각 워커에 서로 다른 session_id를 주면 세션 충돌이 0건입니다. "--continue"는 로컬 단일 터미널에서 빠르게 이어 쓸 때만. "--resume"은 자동화·병렬·CI 환경에서 항상. 이 구분 하나가 운영 안정성을 갈라놓습니다. 4. 오류 처리: exit code와 JSON 에러 필드를 같이 봐야 합니다 "--print" 모드에서 Claude가 에러를 내면 exit code 1이 떨어집니다. 하지만 "--output-format json"일 때는 stdout JSON 안에 "error" 필드도 같이 옵니다. exit code만 보면 원인을 모릅니다. JSON "error" 필드만 보면 셸 파이프가 중단된 걸 못 잡습니다. 둘 다 체크하는 게 실전 패턴입니다. OUTPUT=$(claude -p "$​PROMPT" --output-format json 2>&1) EXIT_CODE=$? if [ $​EXIT_CODE -ne 0 ]; then ERROR_MSG=$(echo "$​OUTPUT" | jq -r '.error // "unknown error"') echo "Claude 호출 실패: $​ERROR_MSG" >&2 exit 1 fi echo "$​OUTPUT" | jq -r '.result' Mac4 n8n 2.8.4 환경에서 이 패턴으로 교체하고 무음 실패(silent fail) 건수가 주 평균 11건에서 0건으로 떨어졌습니다. 에러가 Slack으로 바로 올라오니 대응 속도도 달라졌습니다. [The Verdict] "--print"와 "--output-format json"은 Claude를 자동화 부품으로 만드는 최단 경로입니다. "--resume"으로 세션 ID를 명시적으로 관리하는 순간, 파이프라인이 중단돼도 작업은 이어집니다. exit code와 JSON error 필드를 동시에 잡는 이중 체크까지 붙이면 CI에서 Claude는 신뢰할 수 있는 단계가 됩니다. #ClaudeCode #ShellAutomation #CIPipeline
1
2
77