Watch at Ease세상을 읽고, 일상의 답을 찾다.

기술 · 실용 가이드

curl 오류 28: 제한을 늘리기 전에 DNS·연결·TLS·첫 바이트 시간을 측정하세요

오류 28은 시간 초과 조건에 도달했다는 뜻일 뿐 어느 계층이 기다렸는지는 말하지 않습니다. 단계 시간을 기록하고 한 변수만 비교한 뒤 제한을 조정하세요.

원본 기술 일러스트: curl 시간 초과 증거를 DNS, TCP, TLS, 첫 바이트, 본문 단계에 대응합니다.
원본 일러스트: 오류 28은 예산 경보이므로 예산 변경 전에 단계를 측정합니다. Watch at Ease

curl 28은 시간 예산 경보다. TCP 연결 전, TLS 핸드셰이크 중, 첫 응답 바이트 대기 중 또는 데이터 전송 후에도 발생할 수 있습니다. 같은 종료 코드라도 해결책은 다릅니다. 실패 명령과 환경을 보존하고 누적 단계를 측정한 뒤 한 번에 하나만 바꾸세요.

제한을 바꾸기 전에 재현 조건을 고정한다

비밀을 뺀 정확한 URL, HTTP 메서드, 호스트나 CI, 프록시, DNS 경로, IP 계열, curl -V를 기록합니다. 실패 환경에서 같은 요청을 실행하고 종료 코드를 보존합니다. 한 환경의 성공과 다른 환경의 실패는 경계의 증거이지 모든 호출자에서 원격 서비스가 정상이라는 증거가 아닙니다.

--write-out으로 단계 장부를 만든다

부작용 없는 요청에 time_namelookup, time_connect, time_appconnect, time_starttransfer, time_total을 출력합니다. 모두 시작부터의 누적 시간이므로 인접 값을 빼 DNS, TCP, TLS, 첫 바이트 대기와 본문 전송을 분리합니다.

처음 완료되지 않은 단계를 분류한다

이름 확인 지연은 DNS, TCP 지연은 경로·주소 계열·방화벽·프록시·리스너를 점검합니다. TCP 뒤 TLS 지연은 핸드셰이크와 신뢰 경로, TLS 뒤 첫 바이트 지연은 서버와 업스트림, 수신 후 전체 시간 초과는 처리량이나 본문 정지를 의심합니다.

통제 변수 하나만 시험한다

메서드와 대상을 고정하고 정상 호스트와 비교합니다. 정책이 허용할 때만 IPv4/IPv6, 구성된 프록시, --resolve를 하나씩 시험합니다. 대체 호스트에 운영 자격 증명을 보내지 마세요. 각 비교는 한 질문에 답하고 전후 시간을 남겨야 합니다.

연결·전체 전송·재시도 예산을 나눈다

--connect-timeout은 연결 단계를, --max-time은 각 전체 전송을 제한합니다. 재시도는 시도별 타이머를 다시 시작하며 --retry-max-time이 재시도 창을 제한합니다. 느린 단계가 예상 가능하고 작업이 안전하게 기다릴 수 있을 때만 제한을 늘립니다.

수정을 재측정하고 되돌리기 쉽게 한다

원래 명령을 반복해 우연한 성공과 구분합니다. 단계 시간, 유효 URL, 응답 코드, 가능하면 원격 IP, 종료 코드와 단일 변경을 보존합니다. 대기가 설명되지 않으면 원래 설정으로 되돌리고 장부와 함께 에스컬레이션하며 인증서 검증이나 네트워크 통제를 끄지 마세요.

원본 기술 일러스트: 재현, 측정, 비교, 한 계층 변경, 증명 장부.
원본 일러스트: 전후 기록을 보존하고 더 큰 제한으로 장애를 숨기지 않습니다. Watch at Ease