Ralph Wiggum 개발법: 코딩 에이전트를 밤새 돌리는 요령

Ralph Wiggum 개발법: 코딩 에이전트를 밤새 돌리는 요령

AI 코딩 에이전트로 작업하다 보면 한 가지 답답한 순간이 있습니다. 에이전트가 코드를 작성하다가 어느 시점에 “완료했습니다”라고 선언하는데, 정작 빌드가 깨져 있거나 테스트가 실패하는 거죠. 그래서 다시 지시하고 또 고치고 또 확인하고… 이 과정을 수십 번 반복하다 보면 “차라리 내가 짜는 게 빠르겠다”는 생각이 들기도 합니다 😅

그런데 2025년 말, 호주에서 염소를 키우던 한 개발자가 이 문제를 아주 단순한 방법으로 해결했습니다. Bash while 루프 하나로요. 이름도 기가 막히는데, Ralph Wiggum입니다.

Ralph Wiggum이 뭔가요?

심슨 가족을 본 적 있다면 랄프 위검(Ralph Wiggum)을 기억할 겁니다. 경찰서장의 아들로 순진하고 엉뚱한데, 무언가를 이해하지 못하면서도 절대 멈추지 않는 캐릭터예요. “I’m in danger!” 밈으로도 유명하죠.

이 기법의 창시자 Geoffrey Huntley는 오랫동안 오픈소스를 개발해온 개발자인데요. Ralph Wiggum이라는 이름을 붙인 이유가 재밌습니다.

“멍청하고, 사랑스럽고, 절대 포기하지 않는다.” (It’s kind of dumb, it’s kind of lovable and it never gives up.)

AI 코딩 에이전트도 비슷해요. 한 번에 완벽한 코드를 짜지는 못하지만, 자기가 만든 실수를 다시 보고 고치는 과정을 충분히 반복하면 결국 돌아가는 코드에 도달합니다. Ralph처럼요.

핵심 원리

Ralph Wiggum 개발법은 놀라울 정도로 단순합니다. Bash 루프 하나예요.

ralph.sh
while true; do
  cat PROMPT.md | claude --print --dangerously-skip-permissions
done

이게 전부입니다. PROMPT.md에 작업 지시사항을 적어두고 AI 에이전트에게 반복해서 같은 프롬프트를 던지는 거죠. 에이전트가 작업을 마치고 종료되면 루프가 다시 같은 프롬프트로 새 세션을 시작합니다.

여기서 눈여겨볼 점이 있는데요. 에이전트의 진행 상황은 LLM의 컨텍스트 윈도우에 저장되는 게 아니라 파일 시스템과 git 히스토리에 남는다는 겁니다. 새 세션이 시작돼도 이전에 수정한 파일과 git 로그를 보고 작업을 이어갈 수 있어요.

이게 왜 잘 먹히냐면 LLM의 특성 때문입니다. LLM은 컨텍스트 윈도우가 길어질수록 성능이 떨어지거든요. Ralph 방식은 매 루프마다 깨끗한 컨텍스트로 시작하면서도 파일 시스템이라는 “외부 메모리”로 연속성을 유지합니다.

왜 “반복”이 “완벽”을 이길까

전통적인 소프트웨어 개발에서는 설계를 잘 하고 한 번에 올바른 코드를 짜는 걸 중시합니다. 하지만 AI 코딩에서는 이 전략이 잘 안 먹혀요.

LLM은 복잡한 작업을 한 번에 완벽하게 해내기 어렵습니다. 대신 짧은 단위로 시도하고 피드백을 받아 고치는 데 능하죠. Ralph 방식은 바로 이 특성을 활용합니다.

기존 워크플로우에서는 에이전트가 실수하면 개발자가 개입해서 방향을 잡아줘야 했어요. Ralph 방식에서는? 그냥 루프가 다시 돌아갑니다. 실패한 코드와 에러 메시지를 보고 다른 접근법을 시도하게 되는 거죠.

Huntley는 이걸 “naive persistence”, 즉 순진한 끈기라고 표현합니다. 에이전트를 실수로부터 보호하지 않고 오히려 정면으로 마주하게 만드는 겁니다. 안전망 없이 자기 실패를 직시하도록 몰아넣으면 결국 루프를 탈출하기 위해 올바른 해법을 “꿈꾸게” 된다는 거예요.

실전 구현: 스펙 기반 개발

단순한 루프만으로는 복잡한 프로젝트를 만들 수 없습니다. Ralph 방식이 제대로 돌아가려면 스펙 기반 개발이 필요해요.

프로젝트를 시작할 때 에이전트에게 바로 코드를 짜라고 하지 않습니다. 먼저 LLM과 긴 대화를 나누면서 요구사항을 정리해요. 어떤 기능이 필요한지, 기술 스택은 뭘 쓸 건지, 제약 조건은 무엇인지를 충분히 논의하죠.

요구사항이 정리되면 스펙 문서를 작성합니다. 기능 단위로 나눠서 각각 별도 파일로 만드는 게 좋아요.

프로젝트 구조 예시
project/
├── PROMPT.md           # 메인 프롬프트
├── CLAUDE.md           # 프로젝트 규칙
├── specs/
│   ├── auth.md         # 인증 기능 스펙
│   ├── dashboard.md    # 대시보드 스펙
│   └── api.md          # API 스펙
├── ralph.sh            # Ralph 루프 스크립트
└── src/                # 소스 코드

PROMPT.md에는 매 루프에서 에이전트가 해야 할 일을 적어둡니다.

PROMPT.md
specs/ 디렉토리의 스펙 문서를 읽고 아직 구현되지 않은 부분을 구현하세요.

작업 순서:

1. specs/ 폴더의 모든 스펙을 읽으세요
2. 현재 코드 상태를 확인하세요
3. 아직 미완성인 기능을 찾아 구현하세요
4. 테스트를 실행하고 통과하는지 확인하세요
5. 변경사항을 git commit 하세요

모든 스펙이 구현되고 테스트가 통과하면 "RALPH_DONE"을 출력하세요.

CLAUDE.md에는 코딩 스타일이나 사용할 프레임워크, 테스트 방법 같은 프로젝트 규칙을 적어둡니다. 매 세션마다 이 파일을 읽기 때문에 일관된 품질의 코드가 나오게 됩니다.

Claude Code 공식 플러그인

Ralph 방식이 커뮤니티에서 큰 인기를 끌자 Anthropic이 클로드 코드의 공식 플러그인으로 만들었습니다. Claude Code 팀의 Daisy Hollman이 직접 제작했죠.

플러그인 설치 (Claude Code 세션 안에서)
/plugin install ralph-wiggum@claude-plugins-official

플러그인을 설치하면 세 가지 커맨드가 추가됩니다.

/ralph-wiggum:help          Ralph Wiggum 기법과 사용 가능한 커맨드 설명
/ralph-wiggum:ralph-loop    현재 세션에서 Ralph Wiggum 루프 시작
/ralph-wiggum:cancel-ralph  활성 루프 취소

/ralph-wiggum:ralph-loop를 실행하면 Claude가 자율적으로 작업하고, 종료를 시도할 때 Stop Hook이 차단하면서 프롬프트를 다시 넣어주는 루프가 시작돼요.

/ralph-wiggum:ralph-loop에는 두 가지 옵션이 있어요.

  • --max-iterations <n> — 지정한 횟수에 도달하면 루프가 자동으로 멈춥니다.
  • --completion-promise <text> — Claude 출력에서 이 문구가 <promise> 태그 안에 나오면 완료로 봅니다.

예를 들어 이렇게 쓸 수 있어요.

/ralph-wiggum:ralph-loop "테스트 추가" --max-iterations 20 --completion-promise "TESTS COMPLETE"

프롬프트가 길 때는 PROMPT.md에 미리 작성해두고 $(cat PROMPT.md)로 불러오는 방법도 있어요.

/ralph-wiggum:ralph-loop "PROMPT.md를 읽고 지시사항을 따르세요" --max-iterations 20 --completion-promise "완료"

완료를 알릴 때는 Claude 출력에 <promise> 태그를 넣어야 해요.

<promise>TESTS COMPLETE</promise>

Stop Hook이 이 태그를 보면 루프가 멈춥니다.

플러그인 버전은 외부 Bash 루프 대신 Hooks 시스템을 씁니다. Stop Hook으로 Claude가 종료하려는 순간을 가로채서 같은 프롬프트를 다시 넣어주는 방식이에요.

플러그인의 핵심은 hooks.jsonstop-hook.sh 두 파일입니다.

hooks.json
{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "${CLAUDE_PLUGIN_ROOT}/hooks/stop-hook.sh"
          }
        ]
      }
    ]
  }
}

stop-hook.sh.claude/ralph-loop.local.md 상태 파일을 확인해서 루프가 활성 상태면 종료를 막고 같은 프롬프트를 다시 주입합니다.

Bash 스크립트 방식과 비교하면 플러그인은 몇 가지 장점이 있습니다. 루프가 현재 세션 안에서 돌기 때문에 컨텍스트가 유지되고, Claude Code의 권한 시스템이나 다른 Hook과도 잘 어울리죠.

반면 원본 Bash 스크립트 방식은 매번 깨끗한 컨텍스트로 시작합니다. 길고 복잡한 작업에서는 오히려 이쪽이 더 안정적일 수 있어요. 컨텍스트 윈도우가 가득 차면서 생기는 성능 저하를 피할 수 있으니까요.

실제 사례들

Ralph 방식은 이미 다양한 프로젝트에서 쓰이고 있습니다.

Huntley 본인은 자기가 만든 프로그래밍 언어를 3개월간 “Cursed”라는 이름의 연속 루프로 구축했습니다. 밤에 루프를 돌려놓고 아침에 결과를 확인하는 식으로 작업했다고 해요.

YC 해커톤에서는 팀들이 하룻밤 만에 6개 이상의 리포지토리를 만들어냈는데, API 비용이 약 297달러밖에 안 들었습니다. 사람이 직접 코딩했다면 몇 주는 걸렸을 작업이죠.

단순한 실험이 아니라 실제 생산성을 끌어올리는 도구가 될 수 있다는 걸 보여주는 사례입니다.

성공적인 Ralph 루프를 위한 팁

Ralph 루프를 효과적으로 사용하려면 몇 가지 신경 쓸 게 있습니다.

무엇보다 스펙을 잘 짜야 해요. AI 모델 성능보다 프롬프트 품질이 결과에 훨씬 큰 영향을 미치거든요. 스펙이 모호하면 에이전트가 엉뚱한 방향으로 루프를 돌리면서 시간과 토큰만 날립니다.

테스트도 빠질 수 없어요. “테스트가 통과할 때까지” 작업하라고 지시하면 자동화된 테스트가 자연스럽게 종료 조건이 됩니다. 테스트 없이는 “완료”의 기준을 제대로 판단할 수 없으니까요.

git commit도 자주 하도록 프롬프트에 적어두세요. 매 루프에서 이전 작업을 파악하려면 git 히스토리가 깨끗해야 합니다. 루프를 밤새 돌리면 API 호출이 꽤 쌓이니 토큰 사용량 제한이나 비용 알림도 미리 걸어두는 게 좋아요.

마지막으로, 결과는 꼭 직접 확인하세요. Ralph 방식은 코드를 “생성”해줄 뿐이지 품질이나 보안까지 책임지지는 않아요. 자동화가 편하다고 리뷰를 건너뛰면 나중에 큰 문제가 됩니다.

Ralph 방식의 한계

솔직히 말하면 Ralph 방식이 만능은 아닙니다.

에이전트가 완전히 잘못된 접근을 하고 있는데 루프만 계속 돌아가는 상황이 생겨요. “같은 실수를 약간씩 다른 방식으로 반복”하는 패턴에 빠지면 토큰만 날리게 됩니다.

기존 코드베이스에 암묵적인 규칙이 많은 프로젝트도 까다롭습니다. 스펙만으로 충분한 맥락을 전달하기 어렵거든요. 새 프로젝트를 처음부터 만들 때 Ralph 방식이 가장 잘 먹힙니다.

보안이 중요한 코드를 맡기는 것도 위험해요. “테스트가 통과하는 코드”와 “안전한 코드”는 다른 문제니까요.

Ralph를 넘어서: 자율 개발의 미래

Ralph Wiggum 방식은 AI 자율 개발이라는 큰 흐름의 초기 단계에 해당합니다. Bash 루프 하나로 시작한 아이디어가 공식 플러그인이 됐고, 여러 에이전트 프레임워크에서 비슷한 패턴을 채택하고 있어요.

앞으로는 단순한 루프를 넘어서 여러 에이전트가 협업하고 테스트 결과를 더 똑똑하게 피드백하는 방향으로 발전할 겁니다. 코드 리뷰까지 자동화하는 것도 시간 문제예요.

클로드 코드서브 에이전트에이전트 팀 기능이 이미 이런 방향으로 나아가고 있죠. Ralph 루프가 하나의 에이전트를 반복 실행하는 거라면, 에이전트 팀은 여러 에이전트가 각자 역할을 맡아 병렬로 작업하는 개념입니다.

마치며

Ralph Wiggum 개발법의 교훈은 단순합니다. 반복은 완벽을 이긴다. 한 번에 완벽한 코드를 짜려고 끙끙대기보다 빠르게 시도하고 실패하고 다시 도전하는 루프가 결국 더 나은 결과를 만들어냅니다.

5줄짜리 Bash 스크립트에서 시작한 아이디어가 2026년 AI 코딩의 주요 패러다임이 됐다는 건, 때로는 가장 단순한 해법이 가장 강력하다는 걸 보여줘요. Ralph Wiggum처럼 멍청해 보여도 절대 포기하지 않으면 결국 해내니까요.

직접 시도해보고 싶다면 CLAUDE.md 작성 가이드로 프로젝트 규칙을 정리하는 것부터 시작해보세요. 클로드 코드 권한 설정으로 --dangerously-skip-permissions 대신 안전하게 권한을 관리하는 방법도 함께 살펴보면 좋습니다. 좋은 스펙과 명확한 규칙이 있어야 Ralph 루프가 제대로 동작합니다.

더 깊이 알고 싶다면 아래 자료들을 참고하세요.

This work is licensed under CC BY 4.0 CC BY

개발자를 위한 뉴스레터

달레가 정리한 AI 개발 트렌드와 직접 만든 콘텐츠를 전해드립니다.

Discord