Codex에 오류 재현 맡기기: 최소 재현 사례와 환경 정보 정리
Codex에 “오류를 고쳐 줘”라고만 요청하면 서로 다른 실패를 같은 문제로 다룰 수 있습니다. 프로그램이 시작되지 않는 것인지, 특정 입력에서 계산이 틀리는 것인지, 화면에서만 표시가 다른 것인지부터 정리해야 합니다. 좋은 재현 자료는 설명의 길이가 아니라 다른 실행에서도 같은 실패를 확인할 수 있는 조건을 담습니다.
이 글은 버그를 재현한 뒤 수정하고 검증하는 요청 방법을 안내합니다. 특정 모델이나 요금제를 전제로 하지 않으며, 아래 코드와 로그 형식은 설명용으로 만든 사례입니다. 실제 프로젝트를 실행한 결과나 이 블로그 독자의 오류 기록이 아닙니다. Codex가 변경을 제안한 상태와 오류가 실제로 해결됐다는 상태를 구분합니다.
버그 재현부터 수정 검증까지
1 → 입력·절차·기대·관찰을 구분
2 → 같은 코드와 실행 환경에서 재현
3 → 실패 조건을 유지하는 작은 사례 작성
4 → 관련 입력을 확인하는 최소 수정
5 → 같은 실패 입력과 정상 입력 다시 대조
1. 오류 보고를 네 칸으로 나누기
먼저 입력, 실행 절차, 기대 결과, 관찰 결과를 적습니다. 입력은 파일이나 함수 인수처럼 문제를 일으키는 자료이고 절차는 그 자료를 처리한 순서입니다. 기대 결과는 의도한 규칙이며 관찰 결과는 실제 화면이나 출력입니다. 기대 결과를 적지 않으면 예외를 없앤 변경이 올바른 동작인지 판단하기 어렵습니다.
| 칸 | 설명용 작성 예 | 피할 표현 |
| 입력 | 수량 칸에 공백 한 글자 | 이상한 값을 넣었다 |
| 절차 | 예시 함수를 해당 문자열로 호출 | 그냥 실행했다 |
| 기대 | 비어 있는 수량으로 처리 | 정상이어야 한다 |
| 관찰 | 해당 실행에서 나온 예외와 위치 | 아마 변환 오류다 |
여기서 관찰 칸은 자신의 실제 실행으로 채워야 합니다. 확인하지 않은 오류 문구를 인터넷에서 복사해 붙이면 다른 실패를 재현하게 될 수 있습니다. 로그가 없다면 관찰을 미확인으로 남기고 먼저 짧은 재현을 요청하세요. 원인 후보는 별도 칸에 적어 확정된 관찰처럼 전달하지 않습니다.
2. 실행 환경은 결과를 바꿀 수 있는 항목부터
작업 폴더, 운영체제, 언어 런타임, 의존성 잠금 파일, 실행 명령과 현재 코드 버전을 준비합니다. 웹 화면 문제라면 브라우저와 화면 크기처럼 관련 조건을 더할 수 있습니다. 모든 장치 정보를 길게 나열하기보다 실패를 다시 만들 때 필요한 조건을 선택하세요. 버전은 설치 안내의 숫자보다 현재 환경에서 확인한 값을 사용합니다.

“내 PC에서는 된다”는 상황에는 성공한 환경과 실패한 환경을 같은 칸으로 비교합니다. 코드 버전이 같은지, 실행 폴더가 같은지, 입력 파일이 같은지부터 확인하면 차이를 좁힐 수 있습니다. 다른 환경의 명령을 그대로 복사하지 말고 해당 프로젝트가 안내하는 실행 절차를 기준으로 합니다.
재현에 계정 정보가 필요하다면 실제 비밀번호나 토큰을 원고처럼 붙여 넣기보다 실패 조건을 유지하는 예시 자료를 만들 수 있는지 살펴봅니다. 예를 들어 고객 식별자는 가상 값으로 바꾸되 문자열 길이나 공백 같은 오류 조건은 유지합니다. 이런 치환이 결과에 영향을 줄 수 있다면 그 사실도 재현 설명에 남깁니다.
3. 최소 사례는 파일 수보다 실패 조건을 보존해야 한다
아래는 수량 문자열을 다루는 설명용 Python 함수입니다. 빈 문자열은 비어 있는 값으로 취급하지만 공백만 있는 문자열은 다른 경로로 들어갑니다. 이것을 실제 제품의 오류라고 가정하지 않습니다. 어떤 입력을 같은 종류로 처리해야 하는지 규칙을 정리하는 사례입니다.
def parse_quantity(text):
if text == "":
return None
return int(text)
요구 사항을 “빈 문자열과 공백만 있는 문자열은 모두 None, 숫자 문자열은 정수, 문자 입력은 오류”라고 정하면 재현과 검증 범위가 명확해집니다. 이제 공백 입력만 고쳤다는 주장과 숫자 입력의 기존 동작까지 유지했다는 주장을 나누어 확인할 수 있습니다. 빈칸 규칙이 실제 제품과 다르면 먼저 규칙부터 수정해야 합니다.
큰 프로젝트에서 사례를 줄일 때에는 관련 없는 화면이나 데이터부터 제거하고 그때마다 같은 실패가 남는지 확인합니다. 줄인 뒤 오류가 사라지면 제거한 조건 중 관련 요소가 있을 수 있습니다. 가장 짧은 코드가 목표라기보다 실패와 기대 동작을 함께 유지하는 작은 자료가 목표입니다. 줄이는 과정 자체도 기록하면 원래 프로젝트로 돌아갈 근거가 됩니다.
4. 수정 전에 재현 결과부터 요청하는 프롬프트
첫 요청에는 작업 순서와 완료 기준을 함께 넣습니다. 아래는 위 함수 사례를 위해 직접 만든 요청 형식입니다. 파일 경로와 명령은 실제 프로젝트의 값으로 채워야 하며, 예시 문장을 제출했다는 사실만으로 Codex가 해당 환경에 접근하거나 명령을 실행한 것은 아닙니다.
먼저 관련 코드를 읽고 제공한 입력과 절차로 오류를 재현해 주세요. 수정 전 기대 결과와 관찰 결과를 나누어 기록하고 실제 실행 명령, 종료 상태, 핵심 출력도 남겨 주세요. 재현되지 않으면 코드를 변경하기 전에 빠진 환경 조건을 설명해 주세요. 재현되면 그 실패를 확인하는 작은 검사와 최소한의 수정안을 만들고 같은 입력으로 다시 확인해 주세요.
이 요청은 모든 버그에 무조건 새 테스트 파일을 만드는 규칙이 아닙니다. 계산이나 입력 처리의 회귀를 반복해서 확인해야 한다면 자동 검사가 유용합니다. 일시적인 환경 설정 문제라면 해당 조건의 관찰과 복구 확인이 더 적절할 수 있습니다. 문제가 생긴 경로를 확인하는 증거를 선택하고 검사 파일 수를 성과로 세지 않습니다.

OpenAI의 코드 현대화 예제는 같은 입력으로 출력과 동작을 비교하고 차이가 있으면 작은 수정으로 다시 검증하는 흐름을 제시합니다. 프롬프트 안내도 변경 후 실제 검사를 강조합니다. 이 글의 요청 양식은 그 원칙을 작은 버그에 적용한 작성 예이며 공식 제품 메뉴나 정해진 필수 프롬프트는 아닙니다.
5. 실패 입력과 정상 입력을 함께 검증하기
수량 사례에서는 빈 문자열, 공백, 숫자, 숫자가 아닌 문자를 나누어 확인할 수 있습니다. 공백을 처리하려고 모든 변환 예외를 None으로 바꾸면 문자 입력까지 조용히 비워질 수 있습니다. 실제 요구가 문자 입력 오류라면 이런 수정은 예외가 줄었어도 규칙을 바꾼 것입니다.
| 설명용 입력 | 정한 기대 결과 | 확인 목적 |
| 빈 문자열 | None | 기존 빈칸 규칙 보존 |
| 공백만 있는 문자열 | None | 실패 조건의 처리 |
| 문자열 12 | 정수 12 | 정상 변환 유지 |
| 문자열 abc | 변환 오류 | 잘못된 입력을 숨기지 않음 |
각 검사에는 수정 전 결과와 수정 후 결과를 따로 적습니다. 수정 전 공백 입력만 확인하고 수정 후에는 숫자만 확인하면 같은 실패를 고쳤는지 대조할 수 없습니다. 두 실행의 코드와 입력도 동일한 기준으로 맞추세요. 결과가 달라진 이유를 확인하지 않은 채 실패 검사를 삭제하면 회귀 확인 자료가 사라질 수 있습니다.
6. 재현하지 못했을 때 멈출 지점 정하기
재현되지 않으면 성공을 선언하는 대신 차이를 확인합니다. 실행 폴더, 입력 파일 인코딩, 의존성, 현재 설정과 코드 버전 중 결과를 바꿀 후보를 하나씩 대조합니다. 원래 실패가 간헐적이라면 실행 횟수와 성공·실패 조건을 기록할 수 있지만 임의의 성공 한 번으로 문제가 없다고 결론 내리지는 않습니다.
Codex가 명령을 실행하지 못했다면 실행 제한과 코드 분석 결과를 분리해 읽습니다. 코드에서 원인 후보를 찾은 것은 도움이 되지만 재현 증거를 대신하지 않습니다. 최종 답변에는 “정적 분석으로 찾은 후보”, “실제로 재현”, “수정 후 확인”, “확인하지 못한 조건”을 나누어 달라고 요청할 수 있습니다.
데이터를 줄여서는 재현되지만 원래 서비스에서만 추가 실패가 있다면 두 문제의 연결을 확인합니다. 작은 사례의 성공을 전체 서비스의 성공으로 확대하지 않습니다. 최소 사례는 원인을 이해할 수 있는 도구이고, 실제 문제를 해결했다는 판단에는 원래 실패 경로의 확인도 필요합니다.
7. 결과 파일과 변경 내용을 읽는 순서
작업이 끝나면 먼저 재현 기록을 읽고 변경한 파일을 확인합니다. 그다음 같은 실패 입력의 수정 후 결과와 정상 입력의 결과를 대조하세요. 마지막으로 실행하지 못한 검사와 남은 불확실성을 읽습니다. 답변이 길어도 이 네 가지 증거가 없다면 필요한 결과를 다시 요청할 수 있습니다.
예를 들어 보고서에 “모든 검사 통과”라고 쓰였지만 실제 명령이나 검사 대상이 없다면 어떤 조건을 확인했는지 질문해야 합니다. 반대로 작은 검사 하나만 실행했더라도 실제 오류 경로를 명확히 확인했다면 그 범위 안에서는 유용한 증거가 됩니다. 확인 범위를 넓히려면 그 필요를 설명하고 추가 조건을 지정합니다.
재현 기록의 파일명에는 코드 버전이나 실행 순번을 붙일 수 있습니다. 수정 전 출력과 수정 후 출력을 같은 파일에 덮어쓰면 비교 근거가 없어지므로 각각 보관하세요. 예외가 발생한 줄은 코드가 바뀌면 이동할 수 있어 줄 번호와 해당 함수 이름을 함께 남기는 편이 좋습니다.
변경을 되돌릴 때에는 작업 전 상태와 이번 변경을 구분합니다. 사용자가 이미 수정한 파일과 Codex의 수정이 섞여 있다면 통째로 복구하기보다 변경 내용을 먼저 대조하세요. 수정안을 검토하는 단계와 실제 서비스에 반영하는 단계도 나누어야 합니다. 버그 재현 요청은 원인과 수정의 근거를 만드는 출발점입니다.
공식 출처와 작성 기준
자료 확인일: 2026-10-06. 실제로 연 공식 자료를 바탕으로 AI가 작성한 설명입니다. 별도 표시한 계산·코드·점검 사례는 설명용이며 사용자 환경을 직접 시험하거나 실측한 결과가 아닙니다. 발행 준비 단계에서 기능과 공식 자료의 변경 여부를 다시 확인했습니다.
본문의 이해를 돕기 위해 제작한 설명용 삽화입니다.
티스토리 원문 ↗