SKIP TO CONTENT
모든 기사
GUIDE·July 4, 2026·4분 분량

AI 코딩 에이전트가 같은 실수를 반복할 때 막힌 상태에서 벗어나게 하는 법

VCA Newsroom 작성

이 글은 자동으로 번역되었으며 오류가 있을 수 있습니다. 영어 원문 보기

AI 코딩 에이전트에게 사용 중단(deprecated)된 함수를 그만 쓰라고 말한다. 에이전트는 사과하고 코드를 다시 작성하지만 — 또다시 같은 사용 중단 함수를 쓴다. 세 번째로 고쳐준다. 결과는 똑같다. 이것이 바로 "둠 루프(doom loop)"이며, 모든 빌더가 언젠가는 마주친다. 다행인 것은, 이런 일이 벌어지는지 이해하고 나면 해결책은 빠르고 반복 가능하다는 점이다.

에이전트가 막히는 이유

AI 코딩 에이전트는 사람처럼 당신의 마지막 지적을 기억하지 않는다. 에이전트는 자신의 컨텍스트 — 즉 대화의 진행 중인 기록과 읽어 들인 파일들 — 를 바탕으로 작동한다. 긴 세션에서는 두 가지가 잘못된다.

  • 실수가 누적된다. 잘못된 가정이 컨텍스트 초반에 들어오면, 이후의 모든 응답이 그 위에 쌓여 올라간다. 당신의 지적은 여전히 틀린 내용을 말하고 있는 앞선 모든 텍스트와 경쟁하는 하나의 메시지에 불과하다.
  • 컨텍스트 부패(context rot). 긴 세션 동안 윈도우가 가득 차면서 출력 품질이 점진적으로 저하된다. 에이전트는 스무 개의 메시지 전에 당신이 준 지시를 놓치기 시작한다.

그래서 에이전트가 실수를 반복할 때, 그것은 대개 고집을 부리는 것이 아니라 — 오염된 컨텍스트에 빠져 허우적대고 있는 것이다. 에이전트의 태도가 아니라 컨텍스트를 고쳐라.

1단계: 다시 설명하지 말고 초기화하라

당신의 본능은 지적을 더 강하게 설명하려는 것이다. 참아라. 메시지를 하나 더 추가할 때마다 오염된 컨텍스트가 늘어난다. 대신, 나쁜 컨텍스트를 잘라내라.

  • Claude Code에서는 /rewind가 대화 파일 변경 사항을 이전 체크포인트로 되돌린다 — 최근 몇 단계는 잘못됐지만 이전 작업은 지킬 만한 가치가 있을 때 사용하라(Esc를 두 번 눌러도 같은 메뉴가 나온다). /clear는 대화를 통째로 지우고 코드는 그대로 둔 채 새로 시작한다 — 세션 전체가 탈선했을 때 사용하라. /compact는 더 가벼운 상태로 계속 진행하고 싶을 때 히스토리를 더 짧은 형태로 요약해준다. (Claude Code 모범 사례를 참고하라.)
  • Cursor나 채팅 기반 도구에서는, 오염된 대화를 이어가는 대신 막힌 작업을 위한 새 채팅을 시작하라.

하나의 명확한 지시가 담긴 깨끗한 컨텍스트가, 점점 짜증이 배어드는 다섯 개의 지시가 담긴 긴 컨텍스트를 이긴다.

2단계: 지적에 영구적인 거처를 마련하라

채팅에 입력한 지적은 세션이 끝나면 사라진다. 다음 세션에서 에이전트는 같은 실수를 저지른다 — 창을 닫으면서 당신이 그 해결책을 에이전트의 기억에서 지워버렸기 때문이다. 에이전트가 매번 읽는 곳에 지속적인 규칙을 넣어라.

  • Claude Code: 리포지토리 루트에 있는 CLAUDE.md 파일.
  • Cursor: 규칙 파일(예: .cursor/rules/).
  • 모든 에이전트: 이제 널리 지원되는 AGENTS.md 파일.

규칙은 단순하고 검증 가능한 문장으로 작성하라. "깨끗한 코드를 작성하려고 노력하라"가 아니라 "fetch를 사용하고 axios는 절대 쓰지 마라. 이 프로젝트에는 axios 의존성이 없다"처럼.

3단계: 제약을 놓칠 수 없게 만들어라

구체적인 예를 들어보자. 에이전트가 당신이 제거한 날짜 라이브러리를 계속 임포트한다고 하자.

// Agent keeps writing this:
import moment from 'moment'
const now = moment().format('YYYY-MM-DD')

대신 내장 Intl API를 쓰라고 세 번이나 말했다. 네 번째 지적 대신, CLAUDE.md에 한 줄을 추가하라.

## Dates
Never import `moment` or `dayjs` — they are not installed.
Format dates with the built-in `Intl.DateTimeFormat`. Example:
`new Intl.DateTimeFormat('en-CA').format(new Date())` → "2026-07-04"

차이는 이것이다. 당신은 규칙과 함께 작동하는 예제를 주었다. 에이전트는 추상적인 지시보다 복사해 쓸 수 있는 예제를 훨씬 안정적으로 따르며, 이제 그 규칙은 매 세션 시작 시 자동으로 로드된다.

4단계: 에이전트가 스스로 점검할 방법을 주어라

에이전트는 자신이 볼 수 없는 실수를 반복한다. 에이전트가 읽을 수 있는 신호를 주어 루프를 닫아라.

  • 바로 그 실수에서 실패하는 린터 규칙이나 테스트. moment가 린터에 의해 금지되어 있다면, 에이전트는 린터를 실행하고 오류를 확인한 뒤 — 당신이 개입하지 않아도 — 스스로 고친다.
  • 프롬프트에 넣는 간단한 "완료의 정의(definition of done)" 체크리스트: "끝내기 전에 npm run lintnpm test를 실행하고 둘 다 통과하는지 확인하라."

이것이 가장 큰 업그레이드다. 에이전트가 스스로 감지할 수 있는 실수는, 당신이 잡아내야 하는 실수이기를 그만둔다.

5단계: 작업을 잘게 쪼개라

에이전트가 크고 모호한 요청("인증 시스템을 리팩터링하라")에서 루프에 빠진다면, 그것은 대개 세부 사항이 아니라 범위에서 길을 잃은 것이다. 작업을 한 번에 하나의 작고 검증 가능한 단계로 나누고 — "토큰 갱신 로직을 별도 함수로 추출하되 동작은 바꾸지 마라" — 다음으로 넘어가기 전에 각 단계를 확인하라. 작은 작업은 헤맬 여지를 덜 남긴다.

패턴

에이전트가 실수 반복을 멈추지 않을 때, 목록을 하나씩 짚어가라. 컨텍스트를 초기화하고, 규칙이 지속되는 곳에 규칙을 적어두고, 예제를 보여주고, 에이전트가 스스로 실행할 수 있는 점검을 주고, 작업을 좁혀라. 한 가지 주제가 눈에 들어올 것이다 — 당신은 에이전트와 언쟁하는 것이 아니라, 에이전트가 볼 수 있는 것을 고치고 있다는 것이다. 그렇게 하면 둠 루프는 오후를 통째로 날리는 대신 2분짜리 우회로로 바뀐다.

Auto-generated by Vibe Coding Academy on July 4, 2026, grounded in the real sources linked above. We review for accuracy, but please verify time-sensitive details against the primary sources.

Build Blueprint · Creator

아이디어가 있으신가요? AI 에이전트가 바로 빌드할 수 있는 사양서를 받아보세요.

어떤 제품이든 설명하면 완전한 빌드 블루프린트를 받아보세요 — 기술 스택, 데이터 모델, 화면, API, 그리고 Claude Code나 Cursor에 바로 붙여넣을 수 있는 프롬프트까지. PDF로 내보내기 가능.

블루프린트 열기