<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>랄프 루프 Archives -</title>
	<atom:link href="https://blog.kwt.co.kr/tag/%EB%9E%84%ED%94%84-%EB%A3%A8%ED%94%84/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.kwt.co.kr/tag/랄프-루프/</link>
	<description>여러분의 돈과 시간을 낭비하지마세요.</description>
	<lastBuildDate>Sun, 20 Sep 2026 00:14:57 +0000</lastBuildDate>
	<language>ko-KR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.6.2</generator>

<image>
	<url>https://blog.kwt.co.kr/wp-content/uploads/2022/07/cropped-logo_bg-32x32.jpg</url>
	<title>랄프 루프 Archives -</title>
	<link>https://blog.kwt.co.kr/tag/랄프-루프/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>랄프 위검 루프란? Claude Code 사용법·완료 조건·주의점</title>
		<link>https://blog.kwt.co.kr/%eb%9e%84%ed%94%84-%ec%9c%84%ea%b2%80-%eb%a3%a8%ed%94%84-%ec%9e%90%eb%8a%94-%eb%8f%99%ec%95%88-ai%ea%b0%80-%ec%bd%94%eb%94%a9%ed%95%98%eb%8a%94-%ec%8b%9c%eb%8c%80%ea%b0%80-%ec%99%94%eb%8b%a4/</link>
					<comments>https://blog.kwt.co.kr/%eb%9e%84%ed%94%84-%ec%9c%84%ea%b2%80-%eb%a3%a8%ed%94%84-%ec%9e%90%eb%8a%94-%eb%8f%99%ec%95%88-ai%ea%b0%80-%ec%bd%94%eb%94%a9%ed%95%98%eb%8a%94-%ec%8b%9c%eb%8c%80%ea%b0%80-%ec%99%94%eb%8b%a4/#respond</comments>
		
		<dc:creator><![CDATA[시간 조절자]]></dc:creator>
		<pubDate>Fri, 06 Mar 2026 07:58:29 +0000</pubDate>
				<category><![CDATA[기술]]></category>
		<category><![CDATA[ralph]]></category>
		<category><![CDATA[ralph loop]]></category>
		<category><![CDATA[랄프]]></category>
		<category><![CDATA[랄프 루프]]></category>
		<category><![CDATA[랄프위검]]></category>
		<category><![CDATA[클로드코드]]></category>
		<guid isPermaLink="false">https://blog.kwt.co.kr/?p=1821</guid>

					<description><![CDATA[<p>랄프 위검 루프의 뜻과 Claude Code 공식 플러그인 설치·실행법을 정리했다. 완료 문구, 반복 한도, 테스트, 권한·비용 안전장치까지 확인한다.</p>
<p>The post <a href="https://blog.kwt.co.kr/%eb%9e%84%ed%94%84-%ec%9c%84%ea%b2%80-%eb%a3%a8%ed%94%84-%ec%9e%90%eb%8a%94-%eb%8f%99%ec%95%88-ai%ea%b0%80-%ec%bd%94%eb%94%a9%ed%95%98%eb%8a%94-%ec%8b%9c%eb%8c%80%ea%b0%80-%ec%99%94%eb%8b%a4/">랄프 위검 루프란? Claude Code 사용법·완료 조건·주의점</a> appeared first on <a href="https://blog.kwt.co.kr"></a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><strong>랄프 위검 루프(Ralph Wiggum Loop)는 같은 작업 프롬프트를 AI 코딩 에이전트에 반복 투입하고, 파일·테스트 결과를 다음 반복의 피드백으로 쓰는 개발 방식이다.</strong> 핵심은 밤새 무한 실행하는 데 있지 않다. 명확한 완료 조건, 자동 검증, 반복 한도, 제한된 권한을 함께 설계해야 실무에 쓸 수 있다. 2026년 5월부터는 Claude Code가 완료 조건 기반 반복의 내장 명령 <code>/goal</code>를 기본 제공하므로, 플러그인을 설치하기 전에 이 내장 기능부터 확인한다.</p>



<div class="wp-block-group has-border-color has-background" style="border-color:#dbeafe;border-width:1px;background-color:#eff6ff;padding-top:18px;padding-right:20px;padding-bottom:18px;padding-left:20px"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<h3 class="wp-block-heading">핵심 요약</h3>



<ul class="wp-block-list">
<li><strong>뜻:</strong> 동일한 프롬프트를 반복해 에이전트가 이전 파일 변경과 테스트 결과를 바탕으로 다음 작업을 이어가는 방식이다.</li>


<li><strong>현재 사용법:</strong> Claude Code에서는 Anthropic 플러그인 디렉터리의 <code>ralph-loop</code>를 설치해 Stop hook 기반 루프를 실행할 수 있다.</li>


<li><strong>내장 대안:</strong> Claude Code는 2026년 5월부터 완료 조건을 별도 모델이 매 턴 판정하는 <code>/goal</code> 명령을 기본 제공한다. 플러그인 설치 전에 먼저 확인한다.</li>


<li><strong>안전 조건:</strong> <code>--max-iterations</code>, 기계적으로 판정 가능한 테스트, 비밀값 차단, 제한된 실행 권한을 반드시 둔다.</li>
</ul>
</div></div>



<h2 class="wp-block-heading">랄프 위검 루프란?</h2>



<p>Geoffrey Huntley가 공개한 원형은 놀랄 만큼 단순하다. 프롬프트 파일을 코딩 에이전트에 넣는 과정을 셸의 <code>while</code> 루프로 반복한다. 한 번의 실행이 끝나도 수정된 코드, 작업 메모, Git 기록은 저장소에 남는다. 다음 실행은 이 결과를 읽고 남은 일을 계속한다.</p>



<pre class="wp-block-code"><code>while :; do
  cat PROMPT.md | claude-code
done</code></pre>



<p>이름은 심슨 가족의 캐릭터 랄프 위검에서 왔다. 첫 시도에 완벽한 답을 기대하기보다 실패 결과를 다시 입력해 끈질기게 개선한다는 비유다. 다만 “사람 없이 알아서 완성하는 개발자”라기보다 <strong>검증 가능한 작업을 반복 실행하는 자동화 패턴</strong>으로 이해하는 편이 정확하다.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img fetchpriority="high" decoding="async" width="1035" height="555" src="https://blog.kwt.co.kr/wp-content/uploads/2026/08/ralph-loop-flow-2026-08-28.png" alt="Claude Code 랄프 루프가 프롬프트, 작업, 종료 검사, 반복으로 이어지는 구조" class="wp-image-2816" style="width:500px;height:auto"/><figcaption class="wp-element-caption">같은 프롬프트를 반복하고 완료 문구 또는 반복 한도에서 멈추는 구조<br>출처: Anthropic Ralph Loop 플러그인 문서</figcaption></figure></div>


<h2 class="wp-block-heading">원형 Bash 루프와 Claude Code 플러그인의 차이</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>구분</th><th>원형 Bash 루프</th><th>Claude Code Ralph Loop 플러그인</th></tr></thead><tbody><tr><td>반복 방식</td><td>에이전트 프로세스를 셸에서 다시 실행</td><td>현재 세션의 종료 시도를 Stop hook이 가로챔</td></tr><tr><td>프롬프트</td><td>파일의 같은 내용을 다시 전달</td><td>명령에 넣은 같은 프롬프트를 다시 전달</td></tr><tr><td>진행 상태</td><td>파일·Git·작업 문서에 남김</td><td>현재 세션과 수정된 파일·Git 기록을 함께 사용</td></tr><tr><td>종료</td><td>외부 조건이나 수동 중단을 별도 구현</td><td>완료 문구 또는 최대 반복 횟수로 종료</td></tr></tbody></table></figure>



<p>Anthropic 플러그인은 Claude가 종료하려 할 때 Stop hook으로 이를 막고 같은 프롬프트를 다시 넣는다. 플러그인 README 기준 <code>--max-iterations</code>의 기본값은 제한 없음이므로, 실제 작업에서는 숫자를 명시하는 편이 안전하다. 완료 문구는 정확한 문자열 일치 방식이라 테스트 통과 여부를 대신 검증해 주지는 않는다.</p>



<h2 class="wp-block-heading">Claude Code에서 설치하고 실행하는 법</h2>



<p>2026년 8월 28일 확인 기준 Anthropic 공식 플러그인 디렉터리에는 <code>ralph-loop</code>가 development 카테고리로 등록되어 있다. Claude Code 안에서 다음 명령으로 설치한다.</p>



<pre class="wp-block-code"><code>/plugin install ralph-loop@claude-plugins-official</code></pre>



<p>설치 후에는 작고 검증 가능한 작업부터 실행한다.</p>



<pre class="wp-block-code"><code>/ralph-loop "Todo REST API를 구현한다.
완료 조건:
- CRUD 엔드포인트가 동작한다
- 입력 검증 테스트가 통과한다
- 전체 테스트가 통과한다
모든 조건을 실제로 확인한 뒤 &lt;promise&gt;COMPLETE&lt;/promise&gt;를 출력한다."   --completion-promise "COMPLETE"   --max-iterations 20</code></pre>



<p>진행을 중단해야 할 때는 <code>/cancel-ralph</code>를 사용한다. Windows에서는 플러그인의 Bash hook이 Git Bash 경로 문제를 일으킬 수 있다. 공식 README는 Git for Windows의 <code>Git/bin/bash.exe</code>를 명시하는 우회 방법을 안내한다.</p>



<h2 class="wp-block-heading">플러그인 없이 쓰는 내장 명령: /goal과 /loop</h2>



<p>Claude Code는 2026년 5월 v2.1.139/140부터 완료 조건 기반 반복을 플러그인 없이 수행하는 <code>/goal</code> 명령을 기본 제공한다. 랄프 루프를 검색해 들어온 사용자가 실제로 원하는 기능이 이쪽에 있는 경우가 많으므로, 설치 전에 내장 기능으로 해결되는지 먼저 확인한다.</p>



<p><code>/goal</code> 다음에 완료 조건을 붙이면 각 턴이 끝날 때마다 작은 판별 모델(기본 Haiku)이 조건 충족 여부를 평가한다. <strong>아직 아님</strong>이면 다음 턴을 자동으로 시작하고, <strong>충족</strong> 또는 <strong>불가능</strong> 판정이 나오면 루프가 끝난다. 조건은 최대 4,000자까지 쓸 수 있고 &#8220;or stop after 20 turns&#8221; 같은 상한 문구를 넣어 실행 범위를 제한할 수 있다.</p>



<pre class="wp-block-code"><code>/goal all tests in test/auth pass and the lint step is clean</code></pre>



<p>상태 확인은 인자 없는 <code>/goal</code>, 중단은 <code>/goal clear</code>다. 잔액 소진이나 컨텍스트 초과처럼 사용자가 직접 고쳐야 하는 오류가 나면 목표가 자동으로 해제되고, 일시적 오류는 최대 3회 재시도 뒤 일시정지된다. 사람 개입 없이 계속 돌리려면 auto mode와 함께 쓴다. 한편 <code>/loop</code>는 완료 조건이 아니라 시간 간격으로 같은 작업을 반복하는 내장 스킬이다. <code>/loop 5m check the deploy</code>처럼 쓰고, 간격을 생략하면 Claude가 스스로 다음 간격을 정한다.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>구분</th><th>원형 Bash 루프</th><th>ralph-loop 플러그인</th><th>/goal (내장)</th><th>/loop (내장)</th></tr></thead><tbody><tr><td>다음 턴 시작</td><td>셸이 프로세스를 다시 실행</td><td>세션 종료를 Stop hook이 차단</td><td>이전 턴 종료 직후 자동</td><td>설정한 시간 간격마다</td></tr><tr><td>종료 조건</td><td>직접 구현</td><td>완료 문구 문자열 일치 또는 반복 한도</td><td>조건 충족·불가능 판정, 복구 불가 오류</td><td>직접 중단 또는 완료 판단</td></tr><tr><td>검증 주체</td><td>없음</td><td>정확한 문자열 일치</td><td>별도 판별 모델이 매 턴 평가</td><td>없음(각 실행이 독립)</td></tr><tr><td>준비물</td><td>셸 스크립트</td><td>플러그인 설치</td><td>없음(기본 제공)</td><td>없음(기본 제공)</td></tr></tbody></table></figure>



<p>선택 기준은 단순하다. 같은 프롬프트를 문자열 그대로 되돌려 주는 원형 랄프 방식이 필요하면 ralph-loop 플러그인, &#8220;테스트가 모두 통과하면 멈춰라&#8221;처럼 조건 판정이 필요하면 <code>/goal</code>, 배포 상황 확인처럼 주기적 재확인이 필요하면 <code>/loop</code>가 각각 맞다. 커뮤니티 글 일부는 <code>/goal</code>를 Codex 기능으로 소개하지만, 공식 문서 기준 Claude Code의 내장 명령이다.</p>



<h2 class="wp-block-heading">잘 되는 프롬프트의 5가지 조건</h2>



<ol class="wp-block-list">
<li><strong>범위를 작게 고정한다.</strong> 전체 서비스 대신 인증, API 한 묶음, 테스트 보강처럼 완료 가능한 단위로 자른다.</li>


<li><strong>완료 조건을 명령형으로 적는다.</strong> “좋게 만든다” 대신 테스트 통과, 린트 오류 0개, 문서 파일 생성처럼 판정 가능한 결과를 쓴다.</li>


<li><strong>매 반복에서 검증 명령을 실행하게 한다.</strong> 실패 로그를 다음 수정의 입력으로 사용해야 반복이 개선으로 이어진다.</li>


<li><strong>진행 상황을 파일에 남긴다.</strong> 계획, 완료 항목, 막힌 이유를 저장소 안의 문서와 Git 커밋으로 남긴다.</li>


<li><strong>막혔을 때의 탈출 조건을 둔다.</strong> 일정 횟수 뒤에는 억지로 완료를 선언하지 말고 시도한 방법과 차단 요인을 기록하게 한다.</li>
</ol>



<h2 class="wp-block-heading">완료 문구만 믿으면 안 되는 이유</h2>



<p><code>&lt;promise&gt;COMPLETE&lt;/promise&gt;</code> 같은 문구는 루프를 멈추는 신호일 뿐 품질 보증서가 아니다. 에이전트가 작업을 오해한 채 문구를 출력할 수 있고, 테스트 자체가 잘못 작성됐을 수도 있다. 종료 조건은 다음처럼 여러 층으로 둔다.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>검증 층</th><th>예시</th><th>실패 시 동작</th></tr></thead><tbody><tr><td>정적 검사</td><td>format, lint, type check</td><td>오류 위치를 읽고 수정</td></tr><tr><td>자동 테스트</td><td>unit·integration·회귀 테스트</td><td>실패 원인을 좁혀 재실행</td></tr><tr><td>변경 범위</td><td>허용 파일·금지 디렉터리</td><td>범위를 벗어난 변경 되돌리기</td></tr><tr><td>자원 한도</td><td>최대 반복·시간·토큰 예산</td><td>중단 후 차단 요인 기록</td></tr><tr><td>사람 검토</td><td>diff·보안·배포 승인</td><td>승인 전 병합·배포 금지</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">어떤 작업에 맞고, 무엇은 피해야 하나?</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>적합한 작업</th><th>피해야 할 작업</th></tr></thead><tbody><tr><td>명세가 고정된 기능 구현</td><td>요구사항이 계속 바뀌는 기획</td></tr><tr><td>테스트 추가와 회귀 오류 수정</td><td>주관적 UX·브랜드 판단</td></tr><tr><td>반복 가능한 리팩터링</td><td>운영 장애에 대한 무제한 자동 변경</td></tr><tr><td>문서·타입·린트 정리</td><td>비밀값·결제·삭제 권한이 필요한 작업</td></tr></tbody></table></figure>



<p>공식 플러그인 README도 명확한 성공 기준과 자동 검증이 있는 작업을 권하고, 사람의 판단이 필요한 작업이나 운영 환경 디버깅에는 적합하지 않다고 설명한다.</p>



<h2 class="wp-block-heading">밤새 실행하기 전 안전 체크리스트</h2>



<ul class="wp-block-list">
<li><code>--max-iterations</code>를 설정하고 비용·시간 상한도 별도로 둔다.</li>


<li>프로덕션 자격증명, 배포 키, 개인 데이터가 작업 환경에 노출되지 않게 한다.</li>


<li>삭제·배포·결제·외부 전송 명령은 사람 승인 없이는 실행할 수 없게 한다.</li>


<li>별도 브랜치나 격리된 worktree에서 실행하고 시작 시점의 커밋을 남긴다.</li>


<li>테스트와 린트가 실패하면 완료 문구를 출력하지 않도록 프롬프트에 명시한다.</li>


<li>완료 뒤에는 사람이 diff, 의존성 변경, 보안 영향, 라이선스를 검토한다.</li>
</ul>



<p>긴 실행의 비용은 모델, 컨텍스트 길이, 캐시 정책, 반복 횟수에 따라 크게 달라진다. 고정된 “시간당 비용”을 가정하지 말고 실제 토큰과 도구 호출을 기록해야 한다. 자세한 측정 항목은 <a href="https://blog.kwt.co.kr/ai-agent-cost-tracking-guide/">AI 에이전트 비용 추적 가이드</a>와 <a href="https://blog.kwt.co.kr/ai-agent-tracing-opentelemetry-guide/">OpenTelemetry 추적 실무 글</a>에서 확인할 수 있다.</p>



<h2 class="wp-block-heading">랄프 루프와 일반 코딩 에이전트 중 무엇을 고를까?</h2>



<p>짧은 수정이나 한 번의 명확한 질문은 일반 대화형 실행이 낫다. 실패를 보고 여러 번 고쳐야 하며 테스트로 완료를 판정할 수 있을 때 랄프 루프가 유용하다. 도구 선택 자체가 고민이라면 <a href="https://blog.kwt.co.kr/ai-coding-agent-guide/">AI 코딩 에이전트 선택 기준 7가지</a>를 함께 보면 된다.</p>



<h2 class="wp-block-heading">자주 묻는 질문</h2>



<h3 class="wp-block-heading">랄프 위검 루프는 완전 자율 개발인가?</h3>



<p>아니다. 반복 실행은 자동화할 수 있지만 명세, 권한, 테스트, 비용 한도, 최종 검토는 사람이 설계해야 한다. 특히 배포와 데이터 변경은 별도 승인을 두는 편이 안전하다.</p>



<h3 class="wp-block-heading">완료 문구와 최대 반복 횟수 중 무엇이 더 중요한가?</h3>



<p>둘 다 필요하지만 안전장치로는 최대 반복 횟수가 더 중요하다. 완료 문구는 정확히 일치하면 종료되므로 잘못된 조기 완료를 막지 못한다. 테스트 통과와 변경 범위 검사도 함께 둬야 한다.</p>



<h3 class="wp-block-heading">Claude Code 외의 코딩 에이전트에서도 쓸 수 있나?</h3>



<p>가능하다. 랄프는 특정 제품이 아니라 반복 패턴이다. 다만 각 도구의 비대화식 실행, 권한 모델, 세션 상태, 종료 코드가 다르므로 같은 셸 한 줄을 그대로 복사하기보다 해당 도구에 맞는 중단·검증 장치를 구현해야 한다.</p>



<h3 class="wp-block-heading">랄프 루프와 /goal은 무엇이 다른가?</h3>



<p>랄프 루프는 같은 프롬프트를 그대로 다시 넣어 반복하는 방식이고, <code>/goal</code>는 완료 조건을 별도 모델이 매 턴 판정해 조건이 충족될 때까지 다음 턴을 이어가는 방식이다. 반복 내용을 바꾸지 않는 단순 재시도는 랄프 루프가 맞고, 테스트 통과 같은 판정 가능한 종료 조건이 있다면 /goal가 더 안전하다.</p>



<h2 class="wp-block-heading">참고 자료</h2>



<ul class="wp-block-list">
<li><a href="https://ghuntley.com/ralph/" target="_blank" rel="noreferrer noopener">Geoffrey Huntley, Ralph Wiggum as a “software engineer”</a></li>


<li><a href="https://github.com/anthropics/claude-plugins-public/tree/main/plugins/ralph-loop" target="_blank" rel="noreferrer noopener">Anthropic Claude Plugins Public: ralph-loop</a></li>


<li><a href="https://github.com/anthropics/claude-plugins-official" target="_blank" rel="noreferrer noopener">Anthropic Claude Code Plugins Directory</a></li>


<li><a href="https://code.claude.com/docs/en/plugins" target="_blank" rel="noreferrer noopener">Claude Code 공식 플러그인 문서</a></li>


<li><a href="https://code.claude.com/docs/en/goal" target="_blank" rel="noreferrer noopener">Claude Code 공식 문서, Keep Claude working toward a goal(/goal)</a></li>


<li><a href="https://code.claude.com/docs/en/scheduled-tasks" target="_blank" rel="noreferrer noopener">Claude Code 공식 문서, Run a prompt repeatedly with /loop</a></li>
</ul>



<p><em>공식 문서와 저장소를 2026년 9월 20일 다시 확인해 내장 명령 /goal·/loop 정보를 추가하고, 설치 명령과 종료 옵션을 재검증했다. ralph-loop 플러그인 저장소는 2026년 3월 28일 이후 변경이 없다.</em></p>
		<div class="wpulike wpulike-robeen " ><div class="wp_ulike_general_class wp_ulike_is_restricted"><button type="button"
					aria-label="Like Button"
					data-ulike-id="1821"
					data-ulike-nonce="c98940dc2a"
					data-ulike-type="post"
					data-ulike-template="wpulike-robeen"
					data-ulike-display-likers=""
					data-ulike-likers-style="popover"
					class="wp_ulike_btn wp_ulike_put_image wp_post_btn_1821"></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="0"></span>			</div></div>
	<p>The post <a href="https://blog.kwt.co.kr/%eb%9e%84%ed%94%84-%ec%9c%84%ea%b2%80-%eb%a3%a8%ed%94%84-%ec%9e%90%eb%8a%94-%eb%8f%99%ec%95%88-ai%ea%b0%80-%ec%bd%94%eb%94%a9%ed%95%98%eb%8a%94-%ec%8b%9c%eb%8c%80%ea%b0%80-%ec%99%94%eb%8b%a4/">랄프 위검 루프란? Claude Code 사용법·완료 조건·주의점</a> appeared first on <a href="https://blog.kwt.co.kr"></a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kwt.co.kr/%eb%9e%84%ed%94%84-%ec%9c%84%ea%b2%80-%eb%a3%a8%ed%94%84-%ec%9e%90%eb%8a%94-%eb%8f%99%ec%95%88-ai%ea%b0%80-%ec%bd%94%eb%94%a9%ed%95%98%eb%8a%94-%ec%8b%9c%eb%8c%80%ea%b0%80-%ec%99%94%eb%8b%a4/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
