[FTP] FTP 전송 시 파일 끝부분이 잘리는 오류

2025. 5. 4. 14:54·삽질
반응형
반응형

이번 글에서는 Python에서 ftplib을 사용해 FTP 파일 업로드를 구현할 때, 파일 끝부분이 잘리는 이슈를 겪고 그 원인을 해결한 과정을 정리해보려 합니다.

 

🔍  문제 현상

Python으로 작성한 FTP 업로드 코드에서 동일하게 파일의 마지막 130줄이 누락되는 문제가 반복적으로 발생했습니다.

또한, 아래 코드처럼 로컬과 원격 파일 사이즈를 로그로 확인한 결과 사이즈조차 같아 확인하기가 어려웠습니다.

# 로컬 파일 크기 확인
local_size = os.path.getsize(local_file_path)
log_info(f"[정보] 로컬 파일 크기: {local_file_path}, 크기: {local_size} bytes")

# 파일 업로드
with open(local_file_path, 'rb') as file:
    ftp.storbinary(f'STOR {filename}', file)

# 원격 파일 크기 확인
remote_size = ftp.size(filename)
log_info(f"[정보] 원격 파일 크기: {remote_dir}{filename}, 크기: {remote_size} bytes")

사이즈도 같고 오류도 나지 않는데, 왜 잘리는 걸까?라는 생각으로 아래 해결책들을 시도해봤습니다.

 


 

⛏️ 시도한 해결책들

1. ftp.voidcmd('NOOP')로 서버 연결 확인

with open(local_file_path, 'rb') as file:
	ftp.storbinary(f'STOR {filename}', file)
	ftp.voidcmd('NOOP') # ftp 서버 연결 확인

→ ftp 서버와는 정상적으로 연결되어 있었음

 

2. 업로드 후 sleep()

with open(local_file_path, 'rb') as file:
	ftp.storbinary(f'STOR {filename}', file)
    
time.sleep(1)

→ 서버가 파일을 전부 받지 못했는데, 연결이 종료되었을 경우를 대비하여 시도했지만 도움 안 됨

 


 

💡 최종 원인

현재 저의 코드는 아래와 같은 순서로 동작했었습니다.

1. 로컬 폴더에 파일 저장 → 로컬 파일 핸들러 open(닫지 않음)
2. 로컬 폴더에서 닫히지 않은 파일을 읽어서 원격 폴더에 전송

즉, 로컬 파일 핸들이 여전히 열려있는 상태에서, FTP로 전송이 진행되면서 로컬 파일이 완전히 flush 되지 않았거나, OS 버퍼가 제대로 전송되지 않은 채 FTP 전송이 종료된 겁니다.

로컬 파일이 닫히지 않으면 OS 레벨에서 아직 디스크에 반영되지 않은 내용이 존재할 수 있으며,이 상태에서 파일을 읽고 전송하면 마지막 일부 내용이 누락될 수 있습니다.

 


 

✅  해결 방법

# 1. 로컬 파일 핸들러 엶
local_fd = file_open()		# file open 함수

# 2. 로컬에 파일 저장
local_fd.write()

# 3. 로컬 파일 핸들러 닫기
local_fd.close()

# 4. 저장된 로컬 파일을 읽어 ftp 서버에 저장
with open(local_file_path, 'rb') as file:
	ftp.storbinary(f'STOR {filename}', file)

로컬 파일을 저장한 뒤 확실하게 close한 뒤 ftp 서버에서 로컬 파일을 불러오는 식으로 진행하니 정상적으로 저장이 되었다.

 

🔚 마무리

  • 파일을 쓸 때는 닫기 전에 절대 읽지 말 것
  • 특히 FTP나 네트워크 전송 시에는, 전송 대상 파일이 닫혀 있어야 OS가 flush를 완료함
  • 디버깅할 땐 "파일 닫힘 여부"부터 점검하자
반응형

'삽질' 카테고리의 다른 글

[Crontab] Crontab에서 Python 스크립트 실행 시 모듈 오류 해결  (0) 2025.05.04
[Database Navigator] IntelliJ Community 버전에서 DB 도구 사용하기  (0) 2025.04.30
'삽질' 카테고리의 다른 글
  • [Crontab] Crontab에서 Python 스크립트 실행 시 모듈 오류 해결
  • [Database Navigator] IntelliJ Community 버전에서 DB 도구 사용하기
함상진
함상진
  • 함상진
    개발Log
    함상진
  • 전체
    오늘
    어제
    • 분류 전체보기 (7)
      • 삽질 (3)
      • 프로젝트 (0)
      • 정보 (3)
      • 후기 (0)
      • Computer Science (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    DB Navigator
    의존성 주입
    파일 처리
    python
    database navigator
    인텔리제이
    intellij community
    DIP
    python ftp
    ModuleNotFoundError
    ftplib
    인텔리제이 커뮤니티
    code 명령어
    신규채용자교육
    vscode
    SQLD
    의존관계 역전원칙
    파일 전송
    파일 누락
    안전 law드맵
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.3
함상진
[FTP] FTP 전송 시 파일 끝부분이 잘리는 오류
상단으로

티스토리툴바