AI 바이브 코딩 기준 코드 품질이 무너지기 전 확인할 것

··설명 약 8분·작성: 해비·블로그 소개

AI 바이브 코딩에서 코드 품질을 검토할 목표와 수정 범위는 어떻게 정하나요?

AI가 만든 코드가 동작해도 요청보다 많은 변경이나 중복 기능이 섞였는지 확인해야 합니다. 목표·비목표·수정 허용 파일을 먼저 적고 기존 패턴 재사용, 오류·빈 상태, 실제 검사 결과를 비교하세요.

본문 근거: cursor.com

먼저 기준을 정합니다

AI가 기능을 빨리 추가해도 구조가 무너지면 이후 수정 비용이 커집니다. 코드 품질은 파일 수나 추상화 수가 아니라 변경 범위, 중복, 테스트 가능성, 기존 규칙 준수 여부로 판단합니다.

AI 코딩 도구의 제품 이름이나 UI는 바뀔 수 있지만, 저장소를 읽고 변경하고 검증한다는 기본 흐름은 같습니다. 따라서 특정 버튼 위치를 외우기보다 다음 질문에 답할 수 있어야 합니다.

  • AI가 지금 어떤 파일을 읽을 수 있는가?
  • 어떤 파일을 수정해도 되는가?
  • 어떤 명령을 실행해도 되는가?
  • 비밀정보가 컨텍스트에 포함되지 않았는가?
  • 완료를 무엇으로 증명할 것인가?

요청을 작업 계약으로 바꾸기

검토 순서
1. 요청 범위를 넘긴 파일이 있는가
2. 기존 기능을 중복 구현했는가
3. 불필요한 추상화가 생겼는가
4. 오류·빈 상태·접근성을 놓쳤는가
5. test/build 결과가 실제로 있는가

좋은 요청은 구현 방법을 모두 대신 결정하는 문서가 아닙니다. 목표와 경계, 완료 조건을 명확히 해서 AI가 불필요한 범위를 추측하지 않게 만드는 것이 목적입니다.

직접 해볼 일 · 입력과 검토 기준

독자 질문: 작동하는 변경과 좋은 변경을 어떻게 구분할까?

실습: 같은 필터 기능에 대한 두 변경안을 상상하고 영향표를 작성하세요. A는 새 라이브러리·설정 파일을 추가하고 B는 기존 필터 함수를 재사용합니다.

입력 예시: 완료 항목 숨기기 기능의 목표/비목표, 수정 허용 파일, 기존 동작 회귀 조건을 표로 정리해 주세요. 의존성 추가가 필요하다고 판단하면 근거와 대안을 먼저 제시하고 구현은 보류하세요.

결과 검토: 두 안 모두 기능·빈 목록·키보드 조작·기존 필터 조합을 충족하는지 확인합니다. 파일 수만으로 승자를 정하지 말고 새 의존성 비용, 중복 코드, 테스트 가능성을 비교합니다.

수정 요청: B가 접근성이나 오류 처리를 놓쳤다면 최소 구현을 이유로 승인하지 말고 누락된 조건만 보완시킵니다.

다음 학습: 4회차에서는 반복되는 범위·검증 규칙을 저장소 지침에 옮깁니다.

확인 범위: 공식 자료 cursor.com를 대조했습니다. 이 글의 AI 도구 조작·저장소 변경·명령 실행은 편집자가 직접 수행하지 않았으므로 미확인입니다. 독자는 자신의 환경에서 결과를 기록해 주세요.

독립 실습: 두 diff를 같은 기준으로 평가하기

요청이 “검색어 앞뒤 공백을 무시해 주세요”라면 기존 검색 함수에 trim 처리를 추가하는 안과 새 검색 라이브러리·캐시 계층을 추가하는 안을 비교합니다. 여기서 줄 수만 세지 말고 정상 입력·공백 입력·빈 입력이 기존 동작과 어떻게 달라지는지 적습니다.

목표: 앞뒤 공백을 제거한 검색어로 기존 필터 실행
비목표: 검색 API, 캐시, 전역 상태 구조 변경
허용: 현재 검색어 처리 함수와 직접 관련 검증
회귀 조건: 원본 배열 순서와 데이터가 유지됨
거절 기준: 요청 없는 패키지·설정·인증 변경

판정 예: 요구가 검색어 앞뒤 공백 무시뿐이고 기존 검색 함수가 있다면 그 함수에 trim을 적용한 안이 우선입니다. 공백만 입력했을 때 전체 목록을 유지한다는 조건을 놓쳤다면 짧은 diff라도 보완이 필요합니다. 결과물은 선택한 안·근거·추가 확인 항목이 있는 비교표입니다.

자주 발생하는 오류와 해결

많은 파일을 바꿨다는 이유만으로 나쁜 설계라고 단정하지 않습니다. 요구사항마다 필요한 변경인지 설명하게 합니다. 반대로 짧은 코드가 예외 처리나 접근성을 제거했다면 줄 수가 줄어도 승인하지 않습니다. 승인되지 않은 변경을 제거할 때는 사용자 변경이 섞였는지 먼저 확인하고 해당 변경만 수정합니다.

선택 실습: 같은 프로젝트로 연습하기

이 선택 실습은 TaskFlow 작업 관리 앱의 변경 요청을 AI와 함께 검토하는 연습입니다. 요청·코드·검증 결과를 구분해 기록합니다.

제공 스타터의 상태 문구 변경 한 건에 목표 / 비목표 / 변경 파일 / 유지해야 할 동작 / 검증 항목을 추가합니다. apps/web/src/main.js의 실제 문구를 읽고 변경할 위치를 확정하며 API URL 표시와 기존 환경 설정은 유지합니다.

TaskFlow 실습

이어서 읽기: 바이브 코딩이란 Cursor Claude Code Codex로 앱 만드는 방식과 현실. 누적 작업 기록은 docs/ai-log.md에 회차별로 추가합니다. 새로 진입하면 실제 개발환경 시작 ZIP을 별도 폴더에 풉니다. 이 앱에는 상태 문구와 API URL 표시가 있으며 작업 목록·검색·완료 필터는 없습니다. 상단의 필터 예시는 독립 설계 문제이고, 현재 앱에서 그대로 실행된 기능으로 기록하지 않습니다.

제공 스타터의 상태 문구 변경 한 건에 목표 / 비목표 / 변경 파일 / 유지해야 할 동작 / 검증 항목을 추가합니다. apps/web/src/main.js의 실제 문구를 읽고 변경할 위치를 확정하며 API URL 표시와 기존 환경 설정은 유지합니다. 상단의 검색·필터 비교표는 독립 설계 과제입니다. AI가 무관한 리팩터링을 제안하면 별도 작업으로 분리합니다.

실습은 가능한 한 작은 변경으로 시작합니다. 변경 전에 현재 working tree를 확인하고, AI가 작업한 뒤에는 대화 내용보다 실제 diff를 기준으로 판단합니다.

git status --short
git diff

프로젝트에 맞는 검증 명령이 있다면 함께 실행합니다.

pnpm lint
pnpm build

이 과정의 TaskFlow 기준은 pnpm 11.19.0이며 lint·build 스크립트를 사용합니다. test 스크립트는 없으므로 npm test나 pnpm test가 통과한다고 기록하지 않습니다. 별도 테스트가 있는 저장소는 package.json의 실제 명령을 추가하고, TaskFlow 동작은 브라우저 확인으로 별도 기록합니다.

변경을 검토하는 방법

요청 전 범위 계약과 실제 diff를 나란히 저장합니다.
계획에 없던 파일 변경은 사유를 기록합니다. 승인되지 않은 변경은 사용자 변경과 구분한 뒤 해당 범위만 수정하며, 전체 파일을 강제로 되돌리지 않습니다.

검토할 때는 “코드가 그럴듯한가”가 아니라 요구사항과 diff를 비교합니다.

요청한 파일만 바뀌었는가
기존 규칙을 재사용했는가
새 dependency가 필요한가
오류 처리와 접근성을 놓치지 않았는가
검증 결과가 실제 실행 결과인가
되돌리기 쉬운 변경인가

실패와 위험

  • 요청 한 줄만 전달
  • “코드 정리도 해줘” 같은 무제한 범위
  • dependency 추가를 자동 허용
  • 기존 테스트 삭제 후 성공 처리
  • 요구하지 않은 설계 변경

AI가 틀릴 수 있다는 추상적인 경고보다 실패를 발견할 구조를 만드는 것이 중요합니다. 작은 diff, 명확한 검증 명령, 사람 승인 지점이 있으면 모델이 달라져도 같은 작업 원칙을 유지할 수 있습니다.

완료 체크리스트

  • 품질을 취향이 아니라 관찰 가능한 기준으로 설명
  • 최소 변경 원칙과 무조건 작은 코드의 차이 설명
  • 다음 AGENTS.md 회차에서 반복 지침을 저장소 규칙으로 승격할 준비

누적 기록과 실행 결과

이전 회차 ai-step-02-vibe에 남긴 기록을 시작점으로 사용합니다.

현재 구조는 기존 TaskFlow 소스와 package.json을 유지하고, 학습 기록은 새로 만드는 docs/ai-log.md에 누적합니다. 이 경로는 앱 실행 파일이 아닌 실습용 기록 위치입니다. 기존 동명 파일이 있으면 덮어쓰지 않고 회차 항목을 추가합니다. 앱 수정 파일은 저장소 탐색 후 계약에 확정하며 문서의 예시 경로를 실제 파일로 가정하지 않습니다.

Before는 해당 회차의 기록 항목이 없는 상태이고, 적용은 위 실습을 수행하며 관찰 내용을 채우는 과정입니다. After는 아래 항목의 근거와 미검증 범위가 남은 상태입니다. 문서 제목을 바꾸는 것만으로 기능 구현이 완료된 것은 아닙니다.

아래는 docs/ai-log.md에 추가하는 회차 항목 전체입니다. 앱 전체 코드가 아닌 개발 로그 양식이며, 빈칸은 직접 확인한 결과로 채웁니다.

체크포인트: ai-step-03-scope-quality
작업 요청 / 목표 / 비목표:
시작 상태 / 적용 지침:
허용 파일 / 실제 변경 파일:
계획 / diff 요약:
실행 명령 / 실제 결과 / 증거 위치:
미검증 항목 / 필요한 조건:
사람이 확인·수정한 내용:
승인 여부 / 승인 대상:
commit: 미생성 또는 실제 확인한 식별자
실패 지점 / 복구점 / 다음 행동:

검증란은 성공·실패·미실행을 구분합니다. 이 양식 자체는 실행 성공이나 사람 승인 증거가 아닙니다. 앱을 바꿨다면 diff → pnpm lint·pnpm build → 필요한 브라우저 확인 → 사람 검토 → 승인 → commit 순서로 기록합니다. 로그만 편집한 단계는 내용 대조가 검증이며 앱 테스트 통과로 부풀리지 않습니다.

완료 체크포인트

ai-step-03-scope-quality

다음 학습

4회차 AI 하네스 파일 사용법: AGENTS.md와 Codex 지침 구조 이해하기

도구별 기능·권한 명칭·설치 방법은 발행 시점 공식 문서를 기준으로 다시 확인하고, 이 글의 원칙과 제품별 UI를 구분합니다.

글 소개·학습 준비·전체 목차
작업 범위 안의 코드 카드와 검수 돋보기로 표현한 AI 코딩 품질 표지

AI 코딩 도구 · 3 / 11

AI 바이브 코딩 기준 코드 품질이 무너지기 전 확인할 것

AI 작업 전 품질 기준을 사람이 먼저 정의하는 법을 배웁니다. 요구사항보다 더 많은 기능을 추가하거나 관련 없는 리팩터링을 섞는 문제를 막기 위해 기능 범위 계약과 변경 영향 표를 사용합니다.

선수 지식

요구사항과 실제 변경 파일을 비교할 수 있으면 됩니다.

이번 글에서 배우는 내용

  • 목표/비목표 구분
  • 수정 허용 파일과 금지 파일
  • 기존 구조·네이밍·의존성 유지
  • 새 라이브러리 추가 조건
  • 완료 조건과 회귀 조건
  • 좋은 diff와 나쁜 diff 비교
  • 불필요한 추상화·설정·옵션 추가 판별

목차

  1. 먼저 기준을 정합니다
  2. 요청을 작업 계약으로 바꾸기
  3. 독립 실습: 두 diff를 같은 기준으로 평가하기
  4. 자주 발생하는 오류와 해결
  5. TaskFlow 실습
  6. 변경을 검토하는 방법
  7. 실패와 위험
  8. 완료 체크리스트
  9. 누적 기록과 실행 결과
  10. 완료 체크포인트
  11. 다음 학습
  12. 단독 실습과 결과 확인

이 글이 도움이 되었나요?

조회 중

읽음 기록

읽음 — / 전체 11개 · 필수 9개

이 글을 쓴 해비

웹사이트를 제작·운영하고, 개인 서비스와 자동화·AI 도구를 만듭니다. 직접 만들며 배운 내용과 문제 해결 과정을 BlogFlow에 기록합니다.

새 글 받아보기

RSS 리더에서 BlogFlow의 새 글을 확인할 수 있습니다.

RSS 피드 구독하기

댓글 남기기