바이브코딩이란? AI에게 코드를 맡길 때 사람이 해야 할 일
바이브코딩을 단순히 '말로 시키면 AI가 알아서 만드는 것'으로 받아들이지 않고, 사람이 요구사항과 확인 기준을 정한 뒤 AI가 만든 결과를 점검하는 작업 방식으로 이해합니다. 가상의 가계부 CSV 합계 도구를 예로 들어 입력·출력·하지 말 것·확인 방법을 한 쪽 메모로 정리합니다.
AI에게 '에러가 나요'라고만 말하기보다 같은 입력으로 문제를 재현하고, 실제 예외 메시지를 근거로 원인을 좁힌 뒤 최소한의 수정만 요청하는 흐름을 연습합니다. amount에 쉼표가 들어간 CSV를 사용해 ValueError를 실제 Python에서 재현하고 수정 코드까지 다시 실행해 확인합니다.
이런 분께Claude Code로 만든 작은 Python 도구에서 오류가 발생했을 때 에러 메시지를 근거로 수정 과정을 통제하고 싶은 초보 사용자
오류가 났을 때 첫 단계는 추측이 아니라 재현입니다. 이번 예제에서는 amount 값 하나를 문자열 "1,450"으로 바꾼 가상 CSV를 사용합니다. CSV 규칙상 쉼표가 값 안에 들어가므로 따옴표로 감싸지만, csv 모듈로 읽고 나면 row['amount']에는 문자열 '1,450'이 들어옵니다. 기존 코드가 int(row['amount'])를 그대로 호출하면 이 문자열을 정수로 바꾸지 못합니다.
date,category,amount
2026-09-01,food,12000
2026-09-03,transport,"1,450"
2026-09-03,food,8500
2026-09-10,supplies,3200
2026-09-15,transport,1450
2026-10-02,food,9800import csv
import sys
from collections import defaultdict
path = sys.argv[1]
monthly = defaultdict(int)
with open(path, encoding="utf-8", newline="") as f:
reader = csv.DictReader(f)
for row in reader:
month = row["date"][:7]
monthly[month] += int(row["amount"])
for month in sorted(monthly):
print(f"{month} = {monthly[month]}")이 코드를 `python summarize_buggy.py expenses_bad.csv`로 실행하면 정상 합계를 출력하기 전에 변환 단계에서 멈춥니다. GPT 채팅 Python 도구에서 같은 코드를 실제 실행했고, 예외 문자열이 아래 문구와 정확히 일치하는지 확인했습니다.
ValueError: invalid literal for int() with base 10: '1,450'이 메시지에는 이미 중요한 단서가 있습니다. 실패한 함수는 int(), 실패한 값은 '1,450'입니다. 따라서 'CSV 전체가 잘못됐다'거나 '월별 집계 로직이 틀렸다'고 먼저 가정할 필요가 없습니다. 문제 범위는 amount 문자열을 정수로 바꾸는 지점으로 좁힐 수 있습니다.
| 관찰 | 확인된 사실 | 아직 추측하면 안 되는 것 |
|---|---|---|
| 예외 종류 | ValueError | 파일 전체가 손상됐다고 단정하지 않기 |
| 실패 값 | '1,450' | 다른 모든 행도 잘못됐다고 가정하지 않기 |
| 실패 연산 | int() 변환 | 집계 공식 자체가 틀렸다고 단정하지 않기 |
| 수정 범위 | amount 파싱 지점 우선 | 프로그램 전체를 다시 작성하지 않기 |
Claude Code에 도움을 요청할 때도 에러 메시지와 재현 명령, 문제가 난 입력 조건을 함께 전달합니다. 그래야 AI의 원인 설명이 실제 증거와 연결되는지 확인할 수 있고, 문제와 무관한 대규모 수정이 제안됐을 때 범위를 다시 줄이기도 쉽습니다.
이번 수정 요구사항은 단순합니다. 숫자 문자열 안의 쉼표는 제거한 뒤 정수로 변환하고, 쉼표를 제거해도 숫자가 아니면 어느 행에서 어떤 값이 실패했는지 명확한 오류를 내야 합니다. 월별 집계 방식과 출력 형식은 바꾸지 않습니다.
python summarize_buggy.py expenses_bad.csv 를 실행하면 아래 오류가 납니다.
ValueError: invalid literal for int() with base 10: '1,450'
원인을 먼저 설명해줘.
그다음 amount 변환 부분만 최소 수정해줘.
요구사항:
- 쉼표가 들어간 숫자 문자열은 쉼표를 제거한 뒤 정수로 변환
- 그래도 숫자가 아니면 행 번호와 원래 값을 포함한 명확한 ValueError
- 월별 집계와 출력 형식은 그대로 유지
- Python 표준 라이브러리만 사용
- 수정 후 어떤 명령으로 재실행할지도 알려줘.여기서는 '전체 코드를 다시 작성해줘'라고 하지 않습니다. 실패 위치가 amount 변환으로 좁혀졌으므로 그 부분만 고치도록 범위를 제한합니다. AI가 다른 파일이나 집계 규칙까지 바꾸려고 한다면 왜 필요한지 먼저 설명하게 하고, 근거가 없으면 원래 범위로 되돌립니다.
아래 수정안은 amount 파싱을 parse_amount()로 분리합니다. 먼저 쉼표를 제거하고 int()를 시도하며, 실패하면 입력 행 번호와 원래 문자열을 포함한 ValueError를 다시 발생시킵니다. csv.DictReader의 헤더가 1행이므로 데이터 행 번호는 enumerate(reader, start=2)로 맞춥니다.
import csv
import sys
from collections import defaultdict
def parse_amount(text, line_number):
cleaned = text.replace(",", "")
try:
return int(cleaned)
except ValueError as exc:
raise ValueError(
f"line {line_number}: amount must be an integer, got {text!r}"
) from exc
path = sys.argv[1]
monthly = defaultdict(int)
with open(path, encoding="utf-8", newline="") as f:
reader = csv.DictReader(f)
for line_number, row in enumerate(reader, start=2):
month = row["date"][:7]
monthly[month] += parse_amount(row["amount"], line_number)
for month in sorted(monthly):
print(f"{month} = {monthly[month]}")이 수정은 통화 기호, 소수점, 괄호 음수 같은 모든 금액 표현을 처리하려는 범용 파서가 아닙니다. 이번에 실제로 재현한 천 단위 쉼표 문제만 해결합니다. 입력 규칙을 넓히려면 허용할 형식을 먼저 정한 뒤 별도의 요구사항으로 추가하는 편이 안전합니다.
수정 후에는 문제를 일으킨 바로 그 파일로 다시 실행합니다. GPT 채팅 Python 도구에서 위 수정 코드를 `expenses_bad.csv`에 실제 실행한 결과 월별 합계는 2026-09 = 26600, 2026-10 = 9800으로 나왔습니다. 이는 시리즈 처음부터 정한 기대값과 정확히 같습니다.
python summarize_fixed.py expenses_bad.csv
2026-09 = 26600
2026-10 = 9800에러가 사라졌다는 사실만으로 끝내지 않습니다. 쉼표가 없는 1450과 쉼표가 있는 "1,450"이 모두 같은 금액으로 해석되어 기존 정상 결과를 유지하는지 숫자로 확인하는 것이 재실행 단계의 핵심입니다.
쉼표 제거를 추가했다고 해서 잘못된 값을 0으로 바꾸거나 무시하면 안 됩니다. 예를 들어 3행 amount가 abc라면 데이터 오류가 숨겨지지 않도록 실패해야 합니다. 같은 수정 코드를 별도의 가상 입력에 실제 실행해 `line 3`과 원래 값 `'abc'`가 포함된 ValueError를 확인했습니다.
date,category,amount
2026-09-01,food,12000
2026-09-03,transport,abcValueError: line 3: amount must be an integer, got 'abc'GPT 채팅 Python 도구에서 Python 코드를 실제 실행 · 가상 CSV만 사용 · Claude Code 실제 실행 없음
Python 실행 검증은 GPT 채팅 Python 도구에서 수행했으며 Claude Code에서 테스트했다고 주장하지 않습니다. 예제 파서는 천 단위 쉼표만 처리하며 통화 기호·소수점·지역별 숫자 형식까지 일반화하지 않습니다.