· reAPI Team
stream disconnected before completion: stream closed before response.completed
Codex가 완료 이벤트를 받아들이지 못한 채 응답 스트림 끝에 도달한 상태입니다. 재시도 전에 전체 오류, 종료 이벤트, 시간 초과와 엔드포인트 프로토콜을 확인하세요.

“stream disconnected before completion: stream closed before response.completed”는 Codex가 완료 이벤트를 정상적으로 받아들이지 못한 상태에서 응답 스트림의 끝에 도달했다는 뜻입니다. 처리가 어디서 멈췄는지는 알려 주지만, 어느 장비가 원인인지는 특정하지 못합니다. 2026년 10월 22일 확인한 Codex SSE 코드에서 이 메시지는 스트림 종료 시 사용하는 기본 오류입니다. 전송 실패, 유휴 시간 초과, 먼저 수신한 서버 오류에는 각각 별도 처리 경로가 있습니다.[1]
설정을 바꾸기 전에 오류의 마지막 부분까지 읽으세요. 조기 종료에는 이벤트 기록, 유휴 시간 초과에는 시간 간격, 속도 제한에는 제한 대상 정보가 필요합니다. reAPI를 검토한다면 GPT-6 Astra 요청 문서를 먼저 확인하세요. 이 문서는 Chat Completions를 설명합니다. 해당 요청의 성공만으로 Codex의 Responses 프로토콜과 호환된다고 판단할 수 없습니다.[2][3]
먼저 확인할 사항
- 재시도 전에 전체 오류, 클라이언트 버전, 시간, 요청 ID를 저장합니다. 공유 보고서에는 인증 정보나 비공개 프롬프트를 포함하지 마세요.
- 조기 종료라면 수신한 SSE 데이터에 유효하며 실제로 받아들여진 종료 이벤트가 있는지 확인합니다. HTTP 성공이나 화면에 표시된 문장만으로는 부족합니다.[1]
idle timeout waiting for SSE가 나오면 이벤트 사이의 간격을 측정합니다. 유휴 대기 설정은 요청 및 스트림 재시도 횟수와 별개입니다.[2]- 일시적인 속도 제한이라면 서비스의 재시도 지시에 따르고 해당 부하를 줄입니다. 할당량이나 결제 문제는 계정 측 조치가 필요합니다.[4]
stream disconnected before completion: stream closed before response.completed
소스 코드가 알려 주는 내용은 “인터넷 문제”보다 구체적이면서도 범위가 좁습니다. SSE 루프는 이벤트를 읽고 JSON을 역직렬화한 다음 Responses 처리기에 전달합니다. 처리기가 완료 응답을 반환하면 정상 종료합니다. 입력이 먼저 끝나면 이전에 저장한 응답 오류를 우선 반환하고, 그런 오류가 없을 때 closed-stream 메시지를 내보냅니다.[1]
기록을 살펴볼 때 다음 구분이 유용합니다.
| 관찰한 내용 | 확인할 수 있는 사실 | 다음 확인 사항 |
|---|---|---|
| 텍스트가 도착한 뒤 스트림 종료 | 일부 출력이 클라이언트에 도착함 | 종료 이벤트와 해당 JSON 본문 확인 |
| HTTP 성공, 하지만 완료 이벤트는 수락되지 않음 | HTTP 계층에서는 요청 성공 | 작업 완료로 판단하지 말고 이벤트 순서 확인 |
| 완료처럼 보이는 페이로드가 있음 | 완료 이벤트와 유사한 바이트가 도착함 | 이벤트 유형, 필수 응답 필드, 설치 버전의 파서 확인 |
| EOF 전에 서버 실패 기록이 있음 | 서비스가 오류를 제공함 | 종료를 별도의 네트워크 장애로 판단하기 전에 해당 오류 진단 |
이는 파서를 검토해 얻은 해석이며 reAPI 실호출 결과가 아닙니다. 본문은 변경되지 않는 소스 리비전 c2d5ea52를 기준으로 합니다. 설치한 클라이언트와 비교하기 위한 것이며, 모든 Codex 버전이 동일하게 동작한다고 가정하지 않습니다.[1]
형식이 잘못된 데이터는 따로 확인해야 합니다. 이 리비전은 최초 JSON 역직렬화에 실패한 이벤트를 기록한 뒤 건너뜁니다. 완료 이벤트로 인식했더라도 내부 응답 객체가 잘못되면 다른 오류 경로를 사용합니다. 따라서 로그에서 response.completed 문자열을 찾았다고 해서 Codex가 그 이벤트를 받아들였다는 뜻은 아닙니다. 반대로 스트림이 닫혔다는 사실만으로 서버가 이벤트를 보내지 않았다고 단정할 수도 없습니다. 서버 송신 기록과 클라이언트 수신 기록을 비교하세요.[1]
사용자 지정 엔드포인트에서는 재시도 횟수보다 지원 프로토콜을 먼저 확인합니다. 현재 설정 문서는 responses를 지원하는 wire_api 값으로 명시하며 WebSocket 지원을 별도의 provider 기능으로 구분합니다. OpenAI 형식의 Chat Completions JSON을 받는 것만으로 정상적인 Responses 엔드포인트가 되는 것은 아닙니다.[2]
재현 범위는 작게 시작하는 편이 좋습니다. 먼저 텍스트 전용 요청, 다음으로 같은 내용의 스트리밍 요청, 마지막으로 원래 실패했던 도구 상호작용을 확인합니다. 엔드포인트, 키, 모델을 고정하고 각 단계의 변화를 기록하세요. 이는 진단 방법이며 모든 서비스가 세 가지 테스트를 지원한다는 보장은 아닙니다. 사용 요금이 발생한다면 해당 계정에서 승인된 테스트만 실행합니다.
stream disconnected before completion: transport error: network error: error decoding response body
이 검색어는 전송 또는 응답 본문 읽기 실패를 나타냅니다. Codex SSE 리더는 다음 유효 이벤트를 받기 전에 입력 이벤트 스트림의 오류를 전달받을 수 있습니다. 이는 앞에서 설명한 정상적인 스트림 끝 도달과 다른 분기입니다.[1]
각 구성 요소는 조사 대상이지 확인된 원인 목록이 아닙니다. 최종 엔드포인트 호스트, 클라이언트 버전, 확인 가능한 HTTP 상태, 경과 시간, 응답 이벤트 수신 여부를 기록합니다. 그다음 승인된 다른 네트워크 경로나 해당 클라이언트 밖에서의 동일 엔드포인트 테스트 등 조건 하나씩만 바꿉니다. 브라우저에서 웹사이트가 열린다고 해서 실패했던 인증 스트리밍 요청을 검증한 것은 아닙니다.
OpenAI의 연결 오류 안내는 네트워크 설정, 프록시 구성, SSL 인증서, 방화벽 규칙을 확인하도록 권합니다. 이는 점검 항목을 제공할 뿐, 현재 환경의 오류 원인을 직접 진단하지는 않습니다.[5] 인증서 검증은 켜 둡니다. 조직이 관리하는 네트워크라면 관련 없는 우회 방법을 적용하지 말고 승인된 구성을 사용하세요.
게이트웨이 운영자에게 보고할 때는 민감 정보를 제거한 요청 구조와 마지막으로 받은 이벤트 유형을 포함합니다. “disconnected”만 보이는 화면은 필요한 차이를 지워 버립니다. 원본 기록은 로컬에 보관하고 공유본에서 인증 헤더, 비공개 입력, 도구 출력을 제거하세요.
stream disconnected before completion: idle timeout waiting for sse
유휴 시간 초과는 다음 SSE 이벤트를 기다리는 시간이 설정된 간격을 넘었다는 뜻입니다. 응답 전체가 오래 걸리는 것과는 다릅니다. 이벤트를 계속 보내는 긴 응답과 아무 이벤트도 없는 스트림은 시간 패턴이 다릅니다.[1]
2026년 10월 22일 확인한 설정 문서는 다음 세 항목을 구분합니다.[2]
| Provider 설정 | 문서상 범위 |
|---|---|
stream_idle_timeout_ms | SSE 이벤트 유휴 대기 시간. 단위는 밀리초 |
stream_max_retries | SSE 스트리밍 중단에 대한 재시도 횟수 |
request_max_retries | provider에 보내는 HTTP 요청 재시도 횟수 |
유휴 간격을 늘리면 클라이언트가 더 오래 기다립니다. 호환되지 않는 엔드포인트가 Responses 이벤트를 생성하게 만들거나 잃어버린 바이트를 복구하지는 못합니다. 재시도 횟수를 늘려도 첫 실패의 원인은 달라지지 않습니다.
변경 전에 응답 시작 시각, 각 이벤트 도착 시각, 오류 보고 시각을 기록하세요. 실제 경계가 클라이언트 타임아웃이라면 서비스 문서와 함께 검토합니다. 연결이 더 일찍 닫힌다면 그 종료를 조사해야 합니다. 한 번의 실패를 기준으로 모든 모델, 네트워크, 게이트웨이에 공통 타임아웃을 적용하지 마세요.
rate limit exceeded: upstream rate limit exceeded, please retry later
이 메시지는 요청 경로 어딘가에서 제한이 발생했음을 알립니다. 문구만으로는 계정, 제한 기준, 초기화 시각을 알 수 없습니다. “upstream”으로 특정 공급자를 추정하거나, 크레딧을 더 구매하면 모든 속도 제한 오류가 해결된다고 생각하지 마세요.
OpenAI의 직접 API 문서는 요청 수 및 토큰 속도 제한, 일시적인 과부하, 할당량 및 지출 제한을 구분합니다. 제한 관련 응답 헤더를 설명하며, 일시적 상황에 제공되는 Retry-After는 최소 대기 시간이라고 명시합니다. 계정 조치가 필요한 문제는 재시도로 해결되지 않습니다.[4] 이는 OpenAI의 문서상 의미입니다. 실제 호출 대상의 문서와 헤더를 사용해야 합니다.
| 실제 엔드포인트가 제공한 증거 | 대응 |
|---|---|
| 재시도 지시가 있는 일시적 제한 | 지정 시간 이상 기다린 뒤 상한이 있는 정책으로 재시도 |
| 요청 속도 한도 소진 | 같은 제한을 공유하는 worker 전체의 요청 속도 감소 |
| 토큰 속도 한도 소진 | 요청 수와 함께 토큰 수요 검토 |
| 할당량, 결제 또는 지출 상한 문제 | 작업을 다시 보내기 전에 계정 조건 해결 |
| 제한 기준 없는 일반 메시지 | 요청 ID를 수집하고 운영자에게 해당 제약 확인 |
적절한 대기 지시가 없다면 OpenAI는 무작위 지연을 더한 지수 백오프를 권장하며, 실패한 요청도 제한에 반영된다고 설명합니다. 애플리케이션에 새 재시도 루프를 추가하기 전에 SDK의 재시도를 계산에 포함하세요.[4] 정책에는 종료 조건이 있어야 합니다. 거절된 작업 하나가 끝없는 새 요청을 만들어서는 안 됩니다.
에이전트 작업에서는 이미 수행된 작업도 확인합니다. 중단된 동작을 반복시키기 전에 작업 트리의 diff와 도구 기록을 살펴보세요. 마지막 응답의 실패는 앞서 수행한 모든 도구 동작의 실패를 의미하지 않습니다. 이는 중복 작업을 피하기 위한 운영 조언이지 Codex가 외부 동작을 자동으로 되돌린다는 주장이 아닙니다.
Why does my Codex stream disconnect before completion and the stream closed before the response is completed?
검토한 SSE 경로에서는 완료를 정상 반환하지 못했고, 더 구체적인 저장 오류도 없는 상태에서 입력 끝에 도달한 것입니다. 클라이언트와 서비스 기록을 비교해 종료 이벤트의 누락, 잘못된 형식, 전달 중 손실 중 무엇인지 확인합니다. 메시지 자체로는 어느 설명이 맞는지 선택할 수 없습니다.[1]
Why does Codex keep disconnecting?
반복 가능한 비교가 필요합니다. 클라이언트 버전, 모델, 엔드포인트를 고정하고 전체 오류를 기록한 뒤 한 조건씩 바꿉니다. 먼저 조기 종료, 전송 실패, 유휴 시간 초과, 서비스 거절을 구분하세요. 그 전에 재시도만 늘리면 유용한 증거 없이 같은 실패를 반복할 수 있습니다.
codex request timed out
어느 구성 요소가 시간 초과를 보고했는지 확인합니다. Codex provider 설정에는 SSE 유휴 간격이 있고 API 클라이언트는 요청 시간 초과를 별도로 보고할 수 있습니다. OpenAI는 네트워크와 서버 측 점검 요소를 안내하지만, 타임아웃이 한 가지 원인의 증거라고 하지는 않습니다.[2][5]
resume stream unavailable
응답을 반드시 이어 받을 수 있다는 뜻도, 완료된 모든 작업을 잃었다는 증거도 아닙니다. 버전과 전체 오류를 기록하고 대화를 보존한 뒤 완료된 도구 동작을 확인하세요. 이번에 확인한 자료에는 이 오류에 대한 범용 복구 명령이 없으므로 그런 명령을 제시하지 않습니다.
다음 단계가 모델이나 엔드포인트 변경이라면 GPT-6 Astra 마이그레이션 가이드에서 모델 검색, 프로토콜 변경, 도구 검증을 구분하는 방법을 확인할 수 있습니다. 모델 페이지는 현재 reAPI 제공 내용을 안내합니다. 모델 이름이나 가격 표시는 성공적인 Codex 전체 호환성 테스트를 대신하지 못합니다.
출처 확인일: 2026년 10월 22일
- OpenAI. Codex Responses SSE 구현, 리비전
c2d5ea52e1b7ab11ee2d71dc44ea1ef00f9c8eb3. 소스와 포함된 테스트. - OpenAI. Configuration Reference, provider 프로토콜, 타임아웃, 재시도 설정. 설정 문서.
- reAPI. GPT-6 Astra 요청 문서. 공개 요청 사양. 로컬 구현 문서를 검토했으며 실제 생성 테스트는 하지 않았습니다.
- OpenAI. Rate limits, 응답 헤더와 재시도 안내. API 속도 제한.
- OpenAI. Error codes, API 연결 및 시간 초과 오류. API 오류 안내.