AI한테 코딩 맡겼다가
2,400줄 전부 버린 이유
프롬프트를 잘 쓰는 게 아니라, 계약서처럼 설계해야 한다.
바이브 코딩의 함정과 Prompt Contracts의 등장.
새벽 2시의 실수
Claude Code에게 Supabase 인증 플로우를 만들어달라고 했다. 돌아온 건 완벽하게 작동하는 Firebase 인증 시스템이었다.
하지만 틀린 문제를 풀고 있었다.
피자를 주문했는데 완벽하게 조리된 리조또가 왔다. 기술적으로는 훌륭하다. 근본적으로는 틀렸다.
"나는 Claude Code로 코딩을 한 게 아니라, 도박을 하고 있었다."
바이브 코딩이란?
자연어로 AI에게 요청하고 결과를 기대하는 방식이다. AI는 컨텍스트 없이도 자신감 200%로 뭔가를 만들어낸다.
# 바이브 코딩의 전형적인 패턴 > "SaaS 대시보드 만들어줘" → 14개 파일, 3,000줄 생성 / 원하는 게 아닌 코드 → 다시 요청 → 또 다시 → 무한 반복 > "로그인 폼 React로 만들어줘" → Tailwind + Lucide 아이콘까지 붙은 복잡한 폼 생성 → 나는 일반 CSS를 원했지만, AI는 알 방법이 없다
AI는 그럴듯해 보이는 코드를 만든다. 그럴듯한 것이 올바른 것과 같지 않을 뿐이다.
바이브 코딩의 3가지 실질적 문제
프롬프트 계약서(Prompt Contracts)란?
코드를 한 줄 쓰기 전에 작성하는 구조화된 명세서.
AI에게 무엇을 만들지, 어떻게 만들지, 무엇을 하면 안 되는지, 결과를 어떻게 검증할지를 사전에 명시한 문서.
핵심 개념은 "프롬프트를 API처럼 다루는 것"이다. 소프트웨어에서 함수를 호출할 때 입력값과 반환값을 모르고 쓰지 않는 것처럼, AI 프롬프트도 명시적인 입력 / 출력 / 실패 조건을 정의해야 한다.
새로운 도구나 소프트웨어가 아니다. AI에게 작업을 넘기기 전에 작성하는 구조화된 텍스트 문서다.
프롬프트 계약서 구조
## ── PROMPT CONTRACT TEMPLATE ────────────────── ## GOAL 무엇을 만드는가 (한 줄로 명확하게) 예: Supabase RLS 기반 사용자 인증 플로우 구현 ## STACK 사용할 기술 스택 명시 예: Next.js 14, Supabase, Clerk, Convex ## CONSTRAINTS 하면 안 되는 것 (명시적으로 금지) 예: No Firebase. No Prisma. No Tailwind. 기존 /lib/auth.ts 패턴을 반드시 따를 것. ## FORMAT 출력 형식 정의 예: 파일 단위로 분리. 함수마다 JSDoc 주석 포함. index.ts → handler.ts → types.ts 순서로 작성. ## FAILURE CONDITIONS 이 결과가 나오면 실패로 간주 예: - Firebase import 시 실패 - RLS 정책 없이 직접 쿼리하면 실패 - 에러 핸들링이 없으면 실패 ## ──────────────────────────────────────────────
이 5가지 섹션이 전부다. 10분 작성으로 반복 수정에 드는 몇 시간을 아낄 수 있다.
Before vs After
── BEFORE (바이브 코딩) ────────────────────────── > "Supabase 인증 만들어줘" 결과: Firebase로 완성된 인증 시스템 → 2,400줄 전부 삭제 → 처음부터 다시 ── AFTER (프롬프트 계약서) ─────────────────────── ## GOAL: Supabase RLS 기반 인증 플로우 ## STACK: Next.js 14, Supabase ## CONSTRAINTS: No Firebase. No 외부 인증 라이브러리. ## FORMAT: 파일 단위 분리, 에러 핸들링 필수 ## FAILURE CONDITIONS: Firebase import 시 실패 결과: 첫 번째 시도에 프로덕션 수준 코드 생성 → 검토 → 배포
| 항목 | ❌ 바이브 코딩 | ✅ 프롬프트 계약서 |
|---|---|---|
| 방식 | 자연어로 대충 요청 | 구조화된 명세 사전 합의 |
| 결과 예측 | 불가능 | 예측 가능 |
| 문제 발생 시 | 전부 다시 | 조건 수정 후 재실행 |
| AI 역할 | 도박사 | 계약 이행자 |
| 시간 비용 | 무한 반복 수정 | 첫 시도에 근접 |
실전 적용 3원칙
4가지 질문에 먼저 답하라
무엇을 바꿔야 하는가 / 어디에서 / 왜 (제약 조건) / 어떻게 검증할 것인가. 이 4가지가 명확하지 않으면 프롬프트를 보내지 마라.
작게 쪼개서 요청하라
데이터 모델 → 핸들러 → 비즈니스 레이어 순으로. "전체 앱 만들어줘"는 도박이다. 기능 단위로 나누면 검증이 가능해진다.
제약 조건은 앞에 넣어라
컨텍스트가 길어질수록 AI는 프롬프트 끝부분을 덜 주목한다. 금지 사항과 핵심 조건은 반드시 프롬프트 앞부분에 배치하라.
그래도 알아야 할 한계
프롬프트 계약서도 버그가 될 수 있다.
계약서 자체가 잘못 작성되면, AI는 그 잘못된 명세를 완벽하게 따른다. 계약서가 틀리면 코드도 정확하게 틀린 방향으로 나온다.
결국 계약서를 잘 쓰려면 내가 뭘 원하는지 정확히 알아야 한다. AI는 도구다. 판단은 여전히 사람의 몫이다.
프롬프트 계약서는 새로운 마법이 아니다. 기존 프롬프트 엔지니어링을 더 체계화한 방법론에 가깝다. 하지만 이 사소한 구조화가 결과물의 질을 완전히 바꾼다.
도구에게 명세서를 주면,
도박이 아니라 납품이 된다."
'IT 기술 > AI' 카테고리의 다른 글
| BriefStock 개발일지 #2 - AI 투자 브리핑 시스템 구축 (매크로·종목분석·리스크·Claude 종합판단) (0) | 2026.04.13 |
|---|---|
| BriefStock 개발기 #1 - Claude Code로 하루 만에 풀스택 골격 + CI/CD 완성하기 (0) | 2026.04.10 |
| Claude Code - VB6 레거시 시스템을 React + Python으로 컨버전하며 느낀 Claude 실전 후기 (0) | 2026.03.10 |
| Claude 기본 활용 방법 2 - 서브에이전트(SubAgent) (0) | 2026.01.15 |
| Claude 기본 활용 방법 1 (0) | 2026.01.15 |