업무용 스크립트 요청문에 입력·출력·오류 원칙 담기
“자동화해 줘”를 실행 가능한 작업 설명으로 바꿉니다. 민감정보 없는 합성 샘플과 손으로 확인한 기대 결과를 붙여, 팀별 작업 기록 집계 스크립트를 요청하는 문장을 완성합니다.
AI가 작성한 코드는 겉보기에는 완성되어 있어도 입력값, 예외 상황, 의존성, 오류 처리에 숨은 가정이 있을 수 있습니다. 작은 합성 CSV 예제로 코드를 단계별로 검토하는 방법을 확인합니다.
이런 분께AI 채팅 도우미로 간단한 Python 스크립트를 작성하고 실제 데이터에 적용하기 전에 체계적으로 검토하고 싶은 사람을 위한 내용입니다.
AI 채팅 도우미는 문법상 그럴듯한 코드를 빠르게 작성할 수 있지만, 그럴듯해 보인다는 것이 정확하다는 뜻은 아닙니다. 모든 입력 행이 완전하다고 가정하거나, 특정 열을 잘못 해석하거나, 기존 결과 파일을 덮어쓰거나, 설치되지 않은 패키지에 의존하거나, 특정 예외값이 들어왔을 때만 실패할 수도 있습니다. 따라서 코드가 보기 좋은지를 확인하는 데 그치지 말고 코드가 전제한 조건을 하나씩 확인해야 합니다.
간단한 코드 검토는 다섯 가지 질문으로 정리할 수 있습니다. 어떤 입력값을 기대하는가? 경계값이나 예외값에서는 어떻게 동작하는가? 오류는 어떻게 처리하는가? 어떤 의존성이 필요한가? 잘못된 결과를 찾아낼 수 있는 테스트는 무엇인가? 계산이 정확하더라도 기존 파일을 덮어쓴다면 안전하지 않을 수 있으므로 출력 방식도 함께 확인해야 합니다.
다음과 같은 합성 파일 orders.csv가 있다고 가정합니다. 열은 order_id, quantity, unit_price 세 개이고 데이터는 A001,2,10.00, A002,3,5.50, A003,1,8.00 세 행입니다. 예상 매출은 손으로 쉽게 계산할 수 있습니다. 2 × 10.00 = 20.00, 3 × 5.50 = 16.50, 1 × 8.00 = 8.00이므로 총수량은 6개, 총매출은 44.50이어야 합니다.
첫 검증 데이터를 이렇게 작게 만드는 데에는 이유가 있습니다. AI가 작성한 스크립트가 44.50을 출력한다면 직접 계산한 값과 비교할 수 있습니다. 처음부터 50,000행짜리 실제 업무 파일을 사용하면 그럴듯한 결과가 나와도 파싱이나 계산 오류를 발견하기 어려울 수 있습니다.
| order_id | quantity | unit_price | 예상 매출 |
|---|---|---|---|
| A001 | 2 | 10.00 | 20.00 |
| A002 | 3 | 5.50 | 16.50 |
| A003 | 1 | 8.00 | 8.00 |
| 합계 | 6 | 44.50 |
단순히 매출을 요약하는 스크립트를 작성해 달라고 하기보다 파일 형식, 계산 방법, 오류 발생 시 동작, 출력 규칙을 구체적으로 지정하는 것이 좋습니다.
일반적인 답변에서는 csv.DictReader로 CSV를 읽고, 금액 계산에는 Decimal을 사용하며, 경로 처리는 pathlib로 수행하고 입력값을 명시적으로 검증할 수 있습니다. 코드가 깔끔해 보여도 요청사항을 제대로 구현했는지 각 분기와 조건을 직접 확인해야 합니다.
from csv import DictReader
from decimal import Decimal, InvalidOperation
from pathlib import Path
INPUT_FILE = Path("orders.csv")
OUTPUT_DIR = Path("outputs")
OUTPUT_FILE = OUTPUT_DIR / "order_summary.txt"
REQUIRED_COLUMNS = {"order_id", "quantity", "unit_price"}
def main():
if not INPUT_FILE.is_file():
raise SystemExit(f"Input file not found: {INPUT_FILE}")
if OUTPUT_FILE.exists():
raise SystemExit(f"Output already exists: {OUTPUT_FILE}")
total_quantity = 0
total_revenue = Decimal("0")
with INPUT_FILE.open("r", encoding="utf-8", newline="") as file:
reader = DictReader(file)
if reader.fieldnames is None:
raise SystemExit("Input file has no header row.")
missing_columns = REQUIRED_COLUMNS - set(reader.fieldnames)
if missing_columns:
names = ", ".join(sorted(missing_columns))
raise SystemExit(f"Missing required columns: {names}")
for line_number, row in enumerate(reader, start=2):
order_id = row["order_id"].strip()
quantity_text = row["quantity"].strip()
price_text = row["unit_price"].strip()
if not order_id or not quantity_text or not price_text:
raise SystemExit(f"Missing value on line {line_number}.")
try:
quantity = int(quantity_text)
unit_price = Decimal(price_text)
except (ValueError, InvalidOperation):
raise SystemExit(f"Invalid numeric value on line {line_number}.")
if quantity < 0 or unit_price < 0:
raise SystemExit(f"Negative value on line {line_number}.")
total_quantity += quantity
total_revenue += quantity * unit_price
OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
result = (
f"total_quantity={total_quantity}\n"
f"total_revenue={total_revenue:.2f}\n"
)
OUTPUT_FILE.write_text(result, encoding="utf-8")
print(f"Wrote: {OUTPUT_FILE}")
if __name__ == "__main__":
main()
| 검토 항목 | 확인할 질문 | 이 예제의 동작 |
|---|---|---|
| 입력값 | 파일명, 열 이름, 인코딩, 데이터 형식이 명확한가? | orders.csv와 세 개의 지정된 열을 요구하고 UTF-8 CSV로 엽니다. |
| 예외 상황 | 헤더 누락, 빈 값, 0, 음수가 들어오면 어떻게 되는가? | 필수값 누락과 음수는 거부하고 0은 허용합니다. |
| 오류 처리 | 잘못된 입력을 만났을 때 잘못된 결과를 계속 계산하지 않고 명확하게 중단하는가? | 값이 누락되거나 숫자가 잘못된 경우 해당 행 번호를 포함한 메시지와 함께 중단합니다. |
| 의존성 | 설명하지 않은 외부 패키지나 특정 버전을 요구하는가? | Python 3.12 표준 라이브러리만 사용합니다. |
| 출력 안전성 | 기존 결과 파일을 덮어쓸 가능성이 있는가? | outputs/order_summary.txt가 이미 있으면 중단합니다. |
| 테스트 | 작은 예제의 결과를 미리 계산할 수 있는가? | 합성 예제에서는 총수량 6, 총매출 44.50이 예상됩니다. |
문법만 보고는 드러나지 않는 가정도 확인해야 합니다. 예를 들어 이 스크립트는 quantity와 unit_price가 음수인 경우만 거부하므로 0은 허용합니다. 수량이나 가격이 0이어도 되는지는 Python의 문제가 아니라 업무 규칙의 문제입니다. 실제 데이터에 적용하기 전에 이 규칙이 의도와 맞는지 사용자가 판단해야 합니다.
정상 데이터만 테스트해서는 충분하지 않습니다. 서로 다른 상황을 의도적으로 만든 소수의 테스트 입력을 사용하면 스크립트의 실제 동작을 훨씬 잘 확인할 수 있습니다.
이 체크리스트는 일반적인 구현 오류를 찾는 데 도움이 되지만 업무 요구사항 자체가 올바른지는 증명하지 못합니다. 환불 금액을 음수로 표시해야 하는지, 수량 0을 허용할지, 가격에 세금이 포함되는지, 같은 order_id가 여러 번 등장해도 되는지는 해당 규칙을 따로 정의하지 않는 한 스크립트가 스스로 판단할 수 없습니다.
규모가 크거나 위험도가 높은 스크립트라면 보안, 권한, 개인정보, 동시 실행, 수치 정밀도, 성능, 로그, 자동화 테스트까지 검토 범위를 넓혀야 합니다. 특히 경로 조작, 셸 명령, 네트워크 요청, 인증정보, 파일 삭제나 덮어쓰기 같은 작업을 수행하는 코드는 단순한 로컬 CSV 계산보다 더 엄격하게 검토해야 합니다.
실무에서는 입력 조건을 정의하고, 작은 예제를 직접 계산하고, 오류 발생 경로를 확인하고, 의존성을 확인하고, 출력 파일을 보호하고, 경계값을 테스트하는 순서로 검토할 수 있습니다. AI는 구현 초안을 만드는 데 활용할 수 있지만 실제 요구사항과 코드가 일치하는지는 사용자가 확인해야 합니다.
2026-09-21 · hand-checked example · Python 3.12
설명과 예제는 직접 작성했습니다. 관련 동작과 개념은 아래 공식 자료에서 확인할 수 있습니다.