태그 보관물: 루프엔지니어링

프롬프트에서 루프로: Claude Code를 활용한 자율 에이전트 설계

대표 이미지

프롬프트에서 루프로: Claude Code를 활용한 자율 에이전트 설계

단순한 대화를 넘어 검증 가능한 성공 조건과 제어 루프를 통해 코딩 에이전트를 자동화하는 방법

사실 저도 처음에는 AI 코딩 툴을 그냥 ‘말 잘 듣는 똑똑한 비서’ 정도로 생각했어요. 채팅창에 정성스럽게 프롬프트를 쓰고, 결과가 나오면 검토하고, 다시 수정 요청을 보내는 식이었죠. 그런데 어느 순간 깨달았습니다. 제가 하는 일이 코딩이 아니라 AI랑 ‘티키타카’ 하는 커뮤니케이션 노동이 되어 있더라고요. 최근 Anthropic의 Boris Cherny가 “이제 더 이상 클로드에게 프롬프트를 작성하지 않고, 대신 클로드를 구동시키는 ‘루프(Loop)’를 설계하는 것이 내 역할이다”라고 말한 걸 보고 무릎을 쳤습니다 [3].

결국 AI 코딩의 핵심은 더 세밀한 프롬프트를 쓰는 게 아니에요. 에이전트가 스스로 실행하고, 결과물을 검증하며, 성공했다면 스스로 멈출 수 있는 ‘루프(Loop)’ 시스템을 설계하는 것이 진짜 실력인 시대가 온 겁니다.

시도: 대화형 프롬프팅으로 모든 것을 해결하려 했던 시절

초보 시절의 저는 소위 ‘바이브 코딩’에 의존했습니다. 채팅창에서 한 턴씩 지시하고 결과를 기다리는 전통적인 워크플로우였죠. “이 기능 좀 구현해줘”, “아, 거기 오타 있네? 수정해줘” 같은 식입니다. 하지만 프로젝트 규모가 커지고 복잡한 SaaS 기능을 구현하려니 한계가 명확하더라고요.

단일 샷 프롬프팅으로는 절대 해결 안 되는 문제들이 있습니다. 복잡한 비즈니스 로직은 여러 번의 패스와 수정 과정이 필수적인데 [15], 매 단계마다 제가 개입해서 확인해야 하니 이게 무슨 ‘자율 에이전트’인가 싶었죠. 사실 많은 엔지니어가 클로드를 그냥 고성능 검색 엔진처럼 사용하곤 해요. 그러다 보니 결과물도 어디서 본 듯한 일반적인 수준에 머무는 경우가 많습니다 [15].

결국 제가 컨텍스트를 충분히 주지 않은 채 AI가 적당히 추측해서 코드를 짜게 만들고, 그걸 다시 제가 고치는 비효율의 반복이었던 셈입니다.

실패: 루프를 돌렸지만 ‘무한 굴레’와 ‘비용 폭탄’을 만난 이유

“그럼 그냥 계속 실행하게 두면 되겠네?”라고 생각해서 단순 반복 루프를 설정해본 적이 있어요. 결과는 처참했습니다. 가장 먼저 마주한 건 ‘비용 폭탄’이었어요. 명확한 종료 조건 없이 루프를 돌렸더니, AI가 목표를 달성하지 못한 채 API 한도와 크레딧을 순식간에 다 써버리더라고요 [3].

더 무서운 건 ‘거짓 성공’이었습니다. 검증 도구가 허술하면 AI는 낮은 품질의 코드를 짜놓고도 “완벽하게 수정되었습니다!”라고 자신 있게 보고합니다. 이걸 그대로 배포했다가 낭패를 본 적이 한두 번이 아니에요. 이런 현상을 ‘인지적 항복(Cognitive Surrender)’이라고 부르더군요 [3].

심지어 어떤 때는 수정 사항이 새로운 버그를 만들고, 그 버그를 고치려다 또 다른 곳을 망가뜨리는 ‘무한 수정 루프(Infinite Correction Loops)’에 빠지기도 합니다. 존재하지 않는 파일 경로를 환각하거나 공유 모듈을 멋대로 파괴하는 모습에 경악했죠 [4].

“A well-designed loop multiplies a good engineer. It multiplies a bad decision at the same speed”

잘 설계된 루프는 유능한 엔지니어를 증폭시키지만, 잘못된 결정 역시 똑같은 속도로 증폭시킨다 [3].

분석: 자율 루프를 완성하는 4가지 핵심 설계 요소

시행착오 끝에 깨달은 건, 자율성은 그냥 주어지는 게 아니라 ‘정교한 제어’의 결과라는 점입니다. 실패 없는 루프를 만들려면 다음 네 가지가 반드시 필요해요.

첫째는 검증 스택(Verification Stack)입니다. 이제 “잘 됐니?”라고 묻는 수동 리뷰에서 벗어나야 해요. 자동화된 테스트나 ‘스톱 훅(Stop Hook)’을 통해 기계적으로 검증해야 합니다 [2].

둘째, 명확하고 기계적인 성공 조건입니다. “버그를 수정해줘” 같은 모호한 요청은 금물입니다. 대신 “/tests/unit/ 경로의 모든 테스트가 통과하고 종료 코드 0을 반환할 것”처럼 평가 모델이 객관적으로 확인할 수 있는 조건을 정의해야 합니다 [3].

셋째는 가드레일입니다. --max-turns 플래그로 최대 반복 횟수를 제한해 비용 폭탄을 막고, --allowedTools로 에이전트가 사용할 수 있는 도구의 범위를 엄격히 제한해야 합니다 [3, 4].

마지막으로 외부 메모리 활용입니다. CLAUDE.md 같은 파일을 통해 세션 간 학습 내용을 전파하는 거죠. 에이전트가 반복해서 실수하는 부분이 있다면, 그걸 CLAUDE.md에 기록하게 해서 다음 세션에서는 똑같은 실수를 하지 않도록 시스템적으로 교정해야 합니다 [3].

실제로 자율 루프를 구현할 때 사용하는 설정 예시는 다음과 같습니다.

# 헤드리스 모드로 실행하며, 최대 10턴까지만 허용하고 특정 도구만 사용하게 제한함
claude --print \
  --max-turns 10 \
  --allowedTools "Read" "Bash(npm test)" "Write" \
  --prompt "/goal '모든 유닛 테스트를 통과시키고, 새로운 파일 생성 없이 기존 버그를 수정하라. 성공 조건은 npm test의 exit code 0이다.'"

이 설정은 AI가 무한정 실행되는 것을 막으면서(--max-turns), 허용된 도구만 사용하여 안전하게 작업을 수행하고, 기계적으로 검증 가능한 목표(/goal)를 달성할 때까지 루프를 돌게 만듭니다.

적용: 단순 작업부터 복잡한 오케스트레이션까지

이제 이 개념을 실제 워크플로우에 어떻게 녹여내느냐가 관건입니다. 저는 보통 작업의 규모에 따라 세 가지 패턴을 씁니다.

먼저 단순 반복 패턴이에요. /goal 명령어를 사용해 “receipts 폴더의 모든 파일을 날짜순으로 이름 변경하고, 더 이상 원본 이름이 남지 않을 때까지 반복하라”는 식으로 지시하는 거죠 [6]. AI가 스스로 파일 개수를 세고 멈추기 때문에 매우 효율적입니다.

조금 더 무거운 작업은 L-Thread(Long-duration) 패턴을 씁니다. 자동 테스트와 스톱 훅을 결합해, 제가 잠든 사이에도 에이전트가 계속해서 코드를 수정하고 테스트하는 장기 자율 작업 방식이죠 [2].

가장 복잡한 건 B-Thread(Big/Orchestration) 패턴입니다. 메인 에이전트가 거대한 작업을 받으면, 이를 작은 단위로 분해해서 여러 개의 서브 에이전트(워커)에게 배분합니다. 각 워커가 mini L-thread를 돌며 작업을 처리하고 나면, 다시 메인 에이전트가 결과를 통합하고 최종 검증하는 ‘노동 분업’ 구조입니다 [2].

또한 CI/CD 파이프라인에 통합하고 싶다면 --print 플래그를 사용한 헤드리스 모드를 추천합니다. TUI 없이 출력을 stdout으로 스트리밍할 수 있어 프로그램 방식으로 호출하기 딱 좋거든요 [4].

// Node.js에서 Claude Code를 자율 에이전트로 호출하는 기본 구조 예시
import { spawn } from "node:child_process";

function runAutonomousTask(goal) {
  const args = [
    "--print", 
    "--output-format", "json", 
    "--prompt", goal,
    "--allowedTools", "Read", "--allowedTools", "Bash(npm test)"
  ];

  const proc = spawn("claude", args);
  
  proc.stdout.on("data", (data) => {
    console.log(`Agent Progress: ${data}`);
    // 여기서 테스트 결과나 종료 신호를 분석해 루프를 제어하는 로직 추가 가능
  });
}

runAutonomousTask("/goal '결제 모듈의 엣지 케이스 테스트를 작성하고 모두 통과시켜라'");

짚고 넘어갈 한계와 고려사항

물론 자율 에이전트가 만능은 아닙니다. 제가 가장 경계하는 건 ‘코드 이해 부채(Comprehension Debt)’예요. 코드가 팀원들이 이해하는 속도보다 더 빠르게 배포되는 상황이죠 [3]. 나중에 유지보수하려고 보면 “이거 대체 왜 이렇게 짰지?” 싶은 AI 특유의 기괴한 구조가 보일 때가 있습니다.

그래서 에이전트에게 절대 투표권을 주면 안 됩니다. 생성된 코드를 정리하기 위해 오히려 더 많은 비용을 지불하는 사례도 많거든요 [17]. 엄격한 린트 규칙과 CI 체크, 그리고 시니어 엔지니어의 날카로운 리뷰라는 가드레일이 반드시 필요합니다.

또한 토큰 비용 문제도 무시할 수 없어요. 루프가 복잡해질수록 비용은 기하급수적으로 증가합니다 [3]. 경제성 검토 없이 무작정 자율성을 높이는 건 위험한 도박과 같습니다.

핵심 요약

  • 프롬프트 작성에 쏟는 시간을 줄이고, 기계적으로 확인 가능한 ‘성공 조건’을 설계하는 데 집중하세요.
  • 모든 자율 루프에는 반드시 --max-turns 같은 예산(Budget) 제한을 설정해 비용 폭탄을 방지하세요.
  • 테스트 코드가 곧 에이전트의 가이드라인입니다. 테스트를 먼저 강화해야 자율성도 올라갑니다.
  • 반복되는 실수는 CLAUDE.md에 기록해서 시스템적으로 해결하고 모든 세션에 전파하세요.
  • 자율성은 편리함이 아니라, 정교하게 설계된 ‘제어’의 결과물임을 명심하세요 [13].

결국 제가 깨달은 건, AI를 ‘말 잘 듣는 도구’로 보는 관점을 버려야 한다는 것이었습니다. 대신 내가 잠든 사이에도 신뢰할 수 있게 동작하는 ‘소프트웨어 공장’을 설계한다는 마음가짐이 중요하더라고요. 여러분도 이제 프롬프트를 쓰는 사람이 아니라, 시스템을 설계하는 루프 엔지니어가 되어보시길 바랍니다. 저처럼 크레딧 다 쓰고 멘붕 오는 일은 없으시길 바라며!

References

1. [towardsai.net] Loop Engineering in Claude Code: Let the Agent Run Itself — https://pub.towardsai.net/loop-engineering-in-claude-code-let-the-agent-run-itself-e3ffe52578d3 2. [claudefa.st] Claude Code Autonomous Loops: Ship Features While You Sleep — https://claudefa.st/blog/guide/mechanics/autonomous-agent-loops 3. [techtimes.com] Claude Code Loop Engineering: Stop Prompting, Start Designing Autonomous Agent Workflows — https://www.techtimes.com/articles/318828/20260622/claude-code-loop-engineering-stop-prompting-start-designing-autonomous-agent-workflows.htm 4. [sitepoint.com] Claude Code as an Autonomous Agent: Advanced Workflows (2026) — https://www.sitepoint.com/claude-code-as-an-autonomous-agent-advanced-workflows-2026 6. [sabrina.dev] AI Loop Engineering: Build Autonomous Agents with Claude Code /goal + Routines — https://www.sabrina.dev/p/loop-engineering-claude-code-goal-routines 13. [github.com] Loop Engineering – GitHub — https://github.com/cobusgreyling/loop-engineering 15. [medium.com] Most SaaS Engineers Use Claude Like a Search Engine… — https://medium.com/@growwithmed/most-saas-engineers-use-claude-like-a-search-engine-thats-why-their-output-stays-generic-aa1e09661337 17. [odra.dev] We charge $10k a week to delete AI-generated code — https://odra.dev/slopfix/

관련 글 추천

  • https://infobuza.com/2026/07/15/20260715-3g7jgz/
  • https://infobuza.com/2026/07/14/20260714-rlik89/

FAQ

자율 루프 설계 시 '비용 폭탄'을 방지하기 위해 어떤 설정을 해야 하나요?

`–max-turns` 플래그를 사용하여 최대 반복 횟수를 제한함으로써 AI가 무한정 실행되는 것을 막고 비용 발생을 제어할 수 있습니다.

에이전트가 낮은 품질의 코드를 짜놓고 성공했다고 보고하는 현상을 무엇이라고 하나요?

이러한 현상을 '인지적 항복(Cognitive Surrender)'이라고 부릅니다.

자율 루프를 완성하기 위한 4가지 핵심 설계 요소는 무엇인가요?

첫째는 자동화된 테스트나 스톱 훅을 통한 '검증 스택', 둘째는 객관적으로 확인 가능한 '명확하고 기계적인 성공 조건', 셋째는 반복 횟수와 도구 범위를 제한하는 '가드레일', 마지막으로 세션 간 학습 내용을 전파하는 '외부 메모리' 활용입니다.

에이전트가 반복해서 실수하는 문제를 시스템적으로 어떻게 해결할 수 있나요?

`CLAUDE.md` 같은 외부 메모리 파일에 에이전트의 실수 내용을 기록하여, 다음 세션에서도 동일한 실수를 하지 않도록 교정하고 학습 내용을 전파할 수 있습니다.

작업 규모에 따른 세 가지 루프 패턴은 각각 무엇인가요?

단순 반복 작업에 사용하는 '단순 반복 패턴', 자동 테스트와 스톱 훅을 결합해 장기간 수행하는 'L-Thread(Long-duration) 패턴', 그리고 메인 에이전트가 작업을 분해하여 여러 서브 에이전트에게 배분하는 'B-Thread(Big/Orchestration) 패턴'이 있습니다.

정보부자 편집장 JYLEE · 10년차 IT 엔지니어 출신
현업 개발·인프라 경험을 바탕으로 기술 트렌드를 직접 검증하고 풀어 씁니다. 모든 글은 작성 후 사람이 사실관계를 검토합니다.

보조 이미지 1

보조 이미지 2