Development··3분 읽기·3

바이브 코딩이 실패하는 3가지 패턴

바이브 코딩이 망하는 이유는 속도가 아니라 '구조 없는 반복'이다. 실패 패턴 3가지와 그 메커니즘을 분석한다.

글꼴

지난 글에서 바이브 코딩이 뭔지 정리했다. AI에게 시키고, 결과 보고, 피드백하고, 반복. 코드를 직접 안 쓰니까 빠르다.

근데 이 "빠름"이 문제가 된다.

처음엔 잘 돌아간다. 프로토타입도 금방 나오고, 기능도 뚝딱 붙는다. 그러다 어느 순간부터 뭔가 이상해진다. 고치면 다른 데가 터지고, 새 기능 붙이려면 기존 코드를 뜯어야 하고, AI한테 맡기면 점점 이상한 방향으로 간다.

이 글에서는 바이브 코딩이 왜 망하는지, 구체적인 패턴 3가지를 정리한다. 내가 직접 겪은 것도 있고, 주변에서 본 것도 있다.


패턴 1: "일단 돌아가게" 반복

가장 흔한 패턴이다.

[상황]
"로그인 안 돼요"
→ AI한테 "로그인 버그 고쳐줘"
→ 고쳐짐
→ 근데 회원가입이 터짐
→ "회원가입도 고쳐줘"
→ 고쳐짐
→ 근데 비밀번호 찾기가 터짐
→ (반복)

이게 왜 생기나. AI가 코드를 고칠 때 로컬 최적화를 하기 때문이다. 눈앞의 문제만 해결하고, 그 수정이 다른 곳에 어떤 영향을 미치는지는 모른다. 사람도 마찬가지긴 한데, 사람은 최소한 "이 함수 다른 데서도 쓰는데..."라는 감각이 있다.

AI는 그게 없다. 아니, 정확히는 컨텍스트를 다 주지 않으면 그게 없다. 그래서 한 곳 고치면 다른 곳이 터지는 거다.

왜 위험한가

이게 반복되면 코드가 점점 스파게티가 된다. 여기저기 땜빵 코드가 쌓이고, 원래 구조는 사라지고, 어디가 뭘 하는지 아무도 모르게 된다. AI도 모르고, 나도 모른다.

처음에 이런 경험을 했다. 블로그 댓글 기능을 만드는데, 뭔가 계속 이상했다. 나중에 보니 같은 로직이 세 군데에 다 있었다. AI가 고칠 때마다 새로 만들어서.


패턴 2: 테스트 없이 "눈으로 확인"

바이브 코딩의 본질이 "결과를 보고 판단하는 것"이라고 했다. 브라우저에서 확인하고, 동작하면 넘어가고.

근데 이게 모든 케이스를 커버하진 않는다.

[상황]
로그인 폼을 만들었다.
이메일 입력, 비밀번호 입력, 로그인 버튼.
테스트: 내 계정으로 로그인 → 됨 → 완료!

[일주일 뒤]
"이메일 없이 로그인하면 앱이 터져요"
"비밀번호 틀리면 무한 로딩이에요"
"이메일에 +가 들어가면 안 돼요"

"동작한다"와 "제대로 동작한다"는 다르다. 해피 패스만 확인하면 당장은 문제없어 보인다. 진짜 문제는 엣지 케이스, 에러 케이스, 동시성 문제 같은 데서 터진다.

AI 코드는 특히 위험하다

왜냐면 AI가 만든 코드는 그럴듯해 보이기 때문이다. 문법도 맞고, 패턴도 알려진 거 쓰고, 주석도 달려있다. 근데 실제로 돌려보면 구멍이 있다.

// AI가 만든 코드 예시
async function login(email: string, password: string) {
  const user = await db.users.findUnique({ where: { email } })
  if (user.password === password) {  // <- 여기서 user가 null이면?
    return { success: true }
  }
  return { success: false }
}

이런 게 눈에 안 띈다. 테스트 없이 "내 계정으로 로그인했는데 됐어요"만 확인하면 절대 발견 못한다.


패턴 3: 컨텍스트 유실

이건 좀 미묘한 문제다.

바이브 코딩을 하면서 AI와 대화가 길어진다. 처음엔 "로그인 폼 만들어줘"로 시작했는데, 수정하고 피드백하고 반복하다 보면 대화가 수십 턴이 된다.

이쯤 되면 AI가 처음 맥락을 잊는다.

[턴 1] "React + TypeScript로 로그인 폼 만들어줘"
[턴 5] "버튼 색상 바꿔줘"
[턴 10] "에러 메시지 추가해줘"
[턴 20] "폼 제출 로직 수정해줘"
...
[턴 50] AI가 갑자기 JavaScript로 코드를 짜기 시작함

또는 이런 경우:

[처음] "우리 프로젝트는 Tailwind 쓰고, 컴포넌트는 이 스타일로 만들어"
[나중] AI가 갑자기 styled-components로 만들기 시작함

이게 왜 생기냐면, AI의 컨텍스트 윈도우에는 한계가 있기 때문이다. 대화가 길어지면 오래된 내용이 밀려난다. "우리 프로젝트 규칙"이 밀려나면 AI는 일반적인 방식으로 돌아간다.

진짜 문제

컨텍스트 유실이 한두 번이면 "아, 다시 말해줘야지" 하면 된다. 근데 이게 누적되면 코드 전체가 일관성 없는 덩어리가 된다.

  • 어떤 컴포넌트는 Tailwind, 어떤 건 CSS 모듈
  • 어떤 API 호출은 axios, 어떤 건 fetch
  • 어떤 상태 관리는 useState, 어떤 건 context, 어떤 건 zustand

이런 코드베이스는 유지보수가 지옥이다. AI한테 다시 맡겨도 "어떤 패턴 따라야 해요?"를 매번 알려줘야 한다.


공통 원인: 구조 없는 반복

세 패턴의 공통점이 있다. 구조 없이 반복한다는 거다.

  • 패턴 1: 전체 구조 없이 로컬 수정만 반복
  • 패턴 2: 테스트 구조 없이 눈 확인만 반복
  • 패턴 3: 규칙 구조 없이 대화만 반복

바이브 코딩 자체가 문제가 아니다. 바이브 코딩 + 구조 부재가 문제다.


기술 부채가 쌓이는 메커니즘

이걸 좀 더 구조적으로 보면 이렇다.

[전통적 개발]
코드 작성 → 리뷰 → 테스트 → 머지
   ↓         ↓       ↓
  느림      피드백   검증

[바이브 코딩 (구조 없을 때)]
시키기 → 확인 → 시키기 → 확인 → ...
   ↓        ↓
  빠름    불완전

전통적 개발에서는 느린 대신 피드백과 검증이 있다. 바이브 코딩에서 그걸 생략하면 속도만 남고 품질 관리는 사라진다.

기술 부채가 쌓이는 속도 = 코드 생성 속도 - 검증 속도

바이브 코딩은 코드 생성 속도를 10배로 만들었다. 검증 속도가 그대로면? 기술 부채도 10배 빠르게 쌓인다.


실패를 피하려면

다음 편들에서 자세히 다루겠지만, 핵심만 미리 말하면:

  1. 전체 구조를 먼저 잡는다 - AI한테 시키기 전에 "이 기능은 이 구조로 간다"를 명확히
  2. 테스트를 먼저 쓴다 - 해피 패스만 말고, 터져야 할 때 터지는지 확인
  3. 규칙을 문서화한다 - CLAUDE.md 같은 걸로 프로젝트 컨텍스트를 유지

바이브 코딩이 실패하는 건 "AI를 썼기 때문"이 아니다. "AI만 믿고 검증을 생략했기 때문"이다.


마무리

빠른 개발이 나쁜 게 아니다. 검증 없는 빠른 개발이 문제다.

바이브 코딩은 도구다. 칼이 사람을 베는 게 아니라 칼을 든 사람이 베는 것처럼, 바이브 코딩이 코드를 망치는 게 아니라 검증 없이 쓰는 방식이 망치는 거다.

다음 편에서는 이 문제를 해결하기 위해 개발자 역할이 어떻게 바뀌어야 하는지 이야기한다. "구현자"에서 "개발 감독"으로의 전환.

바이브 코딩은 자유를 주지만, 책임은 사라지지 않는다.

이 글이 어떠셨나요?

이 글이 도움이 되셨나요?
공유:

관련 포스트

뉴스레터 구독

새 글이 올라오면 이메일로 알려드려요.

댓글

댓글을 불러오는 중...