| name | migration-until-applied |
| description | 데이터베이스 마이그레이션을 적용하고, 실패하면 스키마나 SQL을 고쳐서, dev 환경에서 마이그레이션이 깔끔하게 적용될 때까지 자동으로 반복하는 닫힌 루프입니다. 사용자가 "마이그레이션 적용될 때까지 돌려줘", "DB 마이그레이션 통과할 때까지 고쳐줘", "prisma migrate 에러 고쳐줘", "스키마 에러 고치고 마이그레이션 깔끔하게 적용해줘", "migrate dev 실패하는 거 고쳐줘", "run database migrations until they apply cleanly", "migration until applied", "fix migration errors and retry"처럼 마이그레이션을 끝까지 적용하고 싶을 때 사용하세요. (구분: API 응답이 스키마 계약과 맞는지는 looping:api-contract-until-match, openapi.yaml 동기화는 looping:openapi-sync-until-valid, 패키지 업그레이드는 looping:dependency-upgrade-one-by-one, 빌드 컴파일 에러는 looping:build-until-green) |
마이그레이션 적용까지 (Migration Until Applied)
데이터베이스 마이그레이션을 돌리고, 스키마 문제를 고치고, dev에서 깔끔하게 적용될 때까지 반복합니다.
| 항목 | 값 |
|---|
| 카테고리 | 데이터베이스(Database) |
| 트리거 | 수동(manual) — 사람이 직접 시작 |
| 종료 조건(Exit) | 모든 마이그레이션이 적용되고 상태가 깨끗할 때 (migrate status에 미적용·실패가 없음) |
| 반복 한도(Max iterations) | 6 |
| 매 반복 체크 명령 | npx prisma migrate status |
| 가드레일 | 강화됨(Hardened) |
| 지원 에이전트 | Claude Code · Cursor |
이 루프는 언제 쓰나
스키마를 바꾼 뒤 마이그레이션이 한 번에 적용되지 않고, drift·충돌·잘못된 SQL·재생성 안 된 클라이언트 때문에 migrate dev가 빨갛게 멈출 때 씁니다. 한 번 시작하면 에이전트가 적용 → 실패 분석 → 스키마/SQL 수정 → 재적용을 스스로 반복하며, dev 환경에서 마이그레이션 히스토리가 일관되고 앱이 다시 뜰 때까지 수렴시킵니다. 사람이 매번 에러 메시지를 읽고 고치고 다시 돌리는 수고를 덜어 줍니다.
루프 흐름
수동 시작 → 마이그레이션 적용 → 스키마 에러 수정 → 검증 →〔피드백 게이트〕status 깨끗?
↑ │ 아니오
└──────────────────────────────────────────────────┘
│ 예
종료
매 반복(pass)마다 하는 일
- 마이그레이션 적용 — 프로젝트의 마이그레이션 명령으로 대기 중인 마이그레이션을 적용합니다.
npx prisma migrate dev
- 스키마 에러 수정 — 마이그레이션이 실패하면 스키마나 SQL을 고치고, 필요하면 클라이언트를 재생성한 뒤 다시 시도합니다.
- 검증 — 마이그레이션 히스토리가 일관되고 앱이 여전히 정상 기동하는지 확인합니다.
npx prisma migrate status
가드레일 (점수 조작 방지 규칙)
종료 조건을 "가짜로" 통과시키지 못하게 막는 규칙입니다. 반드시 지키세요.
- 체크 명령이나 종료 기준을 고쳐서 억지로 성공시키지 않는다.
- 체크를 건너뛰거나 비활성화·우회해서 종료 조건을 통과시키지 않는다.
- 여러 번 반복해도 막히면, 지표를 조작하지 말고 멈추고 블로커를 보고한다.
Claude Code에서 실행하기
가장 간단합니다. 아래 kickoff 프롬프트를 그대로 붙여넣으면 에이전트가 스스로 반복합니다.
"마이그레이션 적용까지(Migration Until Applied)" 루프를 시작합니다.
목표: 모든 데이터베이스 마이그레이션이 깔끔하게 적용됨
최대 반복: 6
매 반복 사이 실행: npx prisma migrate status
종료 조건: migrate status에 미적용·실패가 없을 때
1단계: 마이그레이션을 적용한다. 스키마나 SQL 에러를 고치고, status가 깨끗해질 때까지 반복한다.
이 루프를 스스로 페이싱(self-pace)하라. 매 반복 후 체크 명령을 실행하고 출력을 읽어, 종료
조건이 충족되지 않았을 때만 계속한다. 종료 조건이 통과하거나 최대 반복에 도달하면 멈춘다.
매 회차마다 한 줄 상태 업데이트를 남긴다.
팁: npx prisma migrate dev / npx prisma migrate status는 Prisma 예시입니다. 프로젝트 스택에 맞게 바꾸세요 (아래 팁 참고). 운영 DB가 아니라 dev 환경에서 도는 루프임을 잊지 마세요.
팁 / 변형
- 다른 생태계로 교체: 체크 명령만 갈아끼우면 그대로 씁니다.
- Django:
python manage.py migrate / 상태는 python manage.py showmigrations
- Rails:
rails db:migrate / 상태는 rails db:migrate:status
- Drizzle:
drizzle-kit push 또는 drizzle-kit migrate
- Knex:
knex migrate:latest / knex migrate:status
- golang-migrate·Flyway·Liquibase: 각 CLI의
migrate / status(또는 info) 명령으로 대응
- 막힐 때: 같은 마이그레이션 에러가 2회 반복되면 가드레일대로 멈추고, drift 원인 가설(수동 변경된 DB, 충돌하는 마이그레이션, 데이터 손실 위험 등)과 함께 사람에게 보고하게 하세요. 데이터가 날아갈 수 있는 reset은 사람 확인 없이 하지 않습니다.
- 연관 루프: 패키지를 하나씩 올리며 깨짐을 고치는 건
looping:dependency-upgrade-one-by-one, API 응답이 스키마 계약과 맞는지는 looping:api-contract-until-match, 전체 테스트를 green까지 돌리는 건 looping:test-until-green.
원본 영어 kickoff (loops.elorm.xyz 원문)
Start the "Migration Until Applied" loop.
Goal: all database migrations apply cleanly
Max iterations: 6
Between iterations run: npx prisma migrate status
Exit when: migrate status shows no pending failures
Step 1: Run migrations. Fix schema or SQL errors, then repeat until status is clean.
Self-pace this loop. After each iteration, run the check command, read the output, and only continue if the exit condition is not met. Stop when the exit condition passes or max iterations is reached. Give a short status update each pass.
출처: https://loops.elorm.xyz/loops/migration-until-applied