FTP 클라이언트는 서버가 파일을 받기 훨씬 전에 put 명령을 받아들일 수 있으며, 이 두 사건 사이의 간격에 대부분의 업로드 미스터리가 자리합니다. 네 단계가 모두 끝나야 합니다. 로컬 파일을 읽고, 서버가 저장 요청을 받아들이고, 데이터 연결이 바이트를 나르고, 전송이 최종 긍정 응답에 이르는 것입니다. 클라이언트를 비교하는 것보다 단계를 비교하는 편이 더 유용합니다. 로그인이 되고 파일 이름이 보이는 것만으로는 결승선에 닿지 못하기 때문입니다.

예비 응답과 최종 응답

STOR의 경우 125나 150 응답은 예비 응답입니다. 서버가 시도할 의사가 있고 데이터 연결이 열린다는 뜻이며, 객체가 최종 형태로 존재한다는 뜻은 아닙니다. 작업은 그 작업의 맥락에서 전송이 긍정 완료 응답, 보통 226이나 250에 이를 때만 끝납니다.

426은 전송이 중단되었다는 뜻이며, 다른 명령이 출력한 숫자는 이 업로드의 결과가 아닙니다. 화면의 마지막 숫자가 아니라 STOR에 속한 응답을 읽어야 합니다. 그 응답이 도착하기 전에 클라이언트가 종료되면 완료에 대한 증거가 전혀 없습니다.

제어 연결과 데이터 연결

인증과 디렉터리 목록은 제어 연결을 씁니다. 바이트는 별도의 데이터 연결을 쓰며, 그 끝점은 전송마다 협상됩니다. 로그인 성공은 제어 경로를 증명할 뿐 데이터 주소가 클라이언트에서 도달 가능한지는 말해 주지 않습니다.

서버가 데이터 연결을 열 수 없을 때는 협상된 끝점과 허용된 경로를 살펴보세요. 수동 모드도 여전히 쓸 수 있는 데이터 주소와 포트가 필요하며, 클라이언트와 서버 사이의 방화벽이나 NAT 장비가 제어 세션은 허용하면서 데이터 범위를 막을 수 있습니다. 서버가 저장 요청을 거부하는 경우에는 원격 경로 이름, 권한, 저장 한도를 보세요. 두 갈래 모두 제어 연결이 인증되었다는 사실로 설명되지 않습니다.

TLS 위의 FTP와 SFTP

TLS 위의 FTP는 여전히 FTP입니다. 연결 두 개, FTP 응답, 각각의 TLS 업그레이드가 있습니다. SFTP는 연결 하나와 전혀 다른 명령 집합을 가진 SSH 하위 시스템입니다. 목적만 공유하고 거의 다른 것은 공유하지 않으므로, 둘 사이를 오가는 진단은 보통 잘못된 로그를 비교하는 데서 시작합니다.

중간 도우미가 세션을 들여다보게 하려고 TLS를 끄지 말고, SFTP 실패를 FTP 응답 문제로 다루지 마세요. curl 설명서는 스크립트 테스트가 필요할 때 명시적 TLS, 수동 모드, 업로드 옵션을 문서화하며, 각 플래그가 실제로 무엇을 바꾸는지에 대한 기준입니다.

디버깅하기 전에 서비스가 실제로 제공하는 프로토콜을 고르세요. SFTP만 말하는 서버는 클라이언트를 어떻게 설정하든 226 응답을 내지 않습니다.

보이는 파일 이름과 저장된 객체

보이는 파일 이름은 불완전한 객체를 나타낼 수 있습니다. 특히 중단된 전송이나 너무 일찍 종료된 클라이언트 뒤에서 그렇습니다. 바이트 보존이 기대될 때는 서비스 소유자에게 의도한 시험 파일의 크기와 신뢰할 수 있는 내용 해시를 저장된 객체와 비교해 달라고 요청하세요.

바이너리 모드와 ASCII 모드는 결과를 바꾸는 또 다른 비교입니다. ASCII 모드는 줄 끝을 변환할 수 있어 전송이 성공했더라도 저장된 바이트가 로컬 파일과 다릅니다. 바이트 단위 확인에는 바이너리 모드를 유지하고, 실패한 전송을 다르게 보이게 하려고 변환 옵션을 더하지 마세요.

일반적인 STOR은 기존 파일을 대체할 수 있으며, 로그인이나 디렉터리 목록 권한이 그 안에 객체를 만들거나 대체할 권한을 세우지는 않습니다. 시험에는 이전에 쓰지 않은 원격 이름을 쓰세요.

다시 시도하기 전에 무엇을 비교할까

불확실한 부분 파일 위에 업로드를 무작정 덧붙이거나 이어 하거나 반복하지 마세요. 새 이름으로 다시 시작할지, 서비스가 지원하는 복구 절차를 쓸지, 실패한 시험 객체를 지울지를 소유자와 합의하세요.

결과를 네 가지 진술 중 하나로 쓰세요. 로컬 읽기가 실패했거나, 저장이 거부되었거나, 데이터 전송이 중단되었거나, 전송이 끝나고 저장된 바이트가 일치했습니다. 그 기록은 셸과 VPN과 FTP 설정을 한꺼번에 바꾸며 파일 이름이 보이기만 기다리는 것보다 강한 결과이며, 다음 사람에게 어느 단계를 살필지 알려 줍니다. 정리된 응답 텍스트를 그 진술과 함께 보관하세요. 그러면 재시도는 반사가 아니라 결정이 됩니다.

관련 글