운영자가 엮은 글
코딩 프롬프트 — 「되게 해줘」로 시킨 코드가 늘 다시 고쳐지는 이유
코딩 요청에서 완료 조건·에지 케이스·깨지면 안 되는 것을 적는 법.
글: 메피파이 운영자읽는 시간 1분
무엇이 어려운가
이렇게 씁니다
CSV 파일 읽어서 월별 합계 내는 스크립트 짜줘
동작하는 코드는 나옵니다. 문제는 '동작한다'의 기준이 서로 다르다는 것입니다.
완료 조건이 없으면 AI는 가장 좁은 해석으로 완료를 선언합니다. 헤더가 없는 파일, 쉼표가 든 값, 빈 줄, 숫자가 아닌 칸 — 실제 데이터가 갖고 있는 것들이 전부 '동작한다' 밖에 있습니다. 그리고 기존 코드에 붙이는 작업이라면 깨지면 안 되는 것을 말하지 않은 채 시키는 순간, 고치라는 것과 함께 멀쩡하던 것이 바뀝니다.
요청에 무엇을 더해야 하는가
1. 완료 조건을 번호로, 관찰 가능하게
이렇게 바꿉니다
완료 조건: 1) 헤더 유무를 자동 감지한다 2) 금액 칸이 숫자가 아니면 그 줄 번호를 stderr로 알리고 계속 간다 3) 결과는 월 오름차순 CSV로 stdout에 낸다. 파이썬 3.11, 표준 라이브러리만.
조건마다 '됐는지 눈으로 확인할 수 있는가'를 기준으로 씁니다.
2. 실패했을 때의 동작을 정한다
성공 경로만 적으면 실패 경로는 AI의 임의가 됩니다. 오류 메시지는 무엇을 담는지, 종료 코드는 몇인지, 이어 가는지 멈추는지를 정해 줍니다. 이것이 에지 케이스 목록보다 먼저입니다 — 케이스는 빠뜨려도 동작 원칙이 있으면 AI가 일관되게 처리합니다.
3. 언어·런타임·의존성을 확정한다
버전을 정하지 않으면 내 환경에서 안 도는 문법이 옵니다. 의존성 추가 허용 여부도 적습니다. 그리고 재지 않은 성능 수치를 주장하지 말라는 한 줄을 넣어 두면 '10배 빨라졌습니다' 같은 근거 없는 문장이 걸러집니다.
완성 지시문의 네 부분
- 목표와 스택 — 언어·런타임·의존성·실행 환경을 확정값으로 적거나 빈칸으로 남깁니다
- 수용 기준(번호) — 관찰 가능한 완료 조건
- 에지 케이스 — 실패 시 동작(오류 메시지·종료 코드·복구)과 기존 동작 중 깨지면 안 되는 것
- 검증 방법 — 실행해 볼 명령과 입력 예시
예시 — 완료 조건이 검증 방법으로 이어지는 모습
완료 조건 2)에서 이어집니다
검증: 금액 칸에 'abc'가 든 3번째 줄이 있는 sample.csv를 넣었을 때, stderr에 'line 3: amount is not a number'가 찍히고 stdout의 월별 합계에는 나머지 줄만 반영된다. 종료 코드는 0.
조건마다 이런 검증 문장이 하나씩 붙어야 '됐다'를 눈으로 확인할 수 있습니다.
기존 코드에 붙이는 작업이라면 깨지면 안 되는 것을 목록으로 줍니다 — '헤더가 있는 파일의 결과는 지금과 같아야 한다', '기존 명령줄 옵션은 그대로 동작한다'처럼. 이 목록이 없으면 고치라는 것과 함께 멀쩡하던 것이 바뀝니다. 그리고 재지 않은 성능 수치를 주장하지 못하게 막는 한 줄이 들어갑니다.
직접 쓸 때의 체크리스트
- 1완료 조건이 번호 달린 관찰 가능한 문장인가
- 2실패 시 동작(메시지·종료 코드·복구)을 정했는가
- 3언어·런타임 버전·의존성 정책을 적었는가
- 4기존 동작 중 깨지면 안 되는 것을 나열했는가
- 5검증 방법(실행해 볼 명령·입력 예시)을 요구했는가
읽었으면 직접 해 보는 편이 빠릅니다.