1  FTP 클라이언트 (FTP Client)

파일 전송 프로토콜(FTP)을 활용하여 파일을 업로드하거나 다운로드할 수 있는 나만의 클라이언트를 만들어 봅시다. 보너스 챌린지로, 보안 파일 전송(SFTP)을 지원하여 데이터를 더욱 안전하게 주고받는 기능을 추가해 보세요.

이 프로젝트는 네트워크 통신의 기초인 FTP 프로토콜을 이해하고, 원격 서버와 데이터를 동기화하거나 관리하는 방법을 익히기에 아주 좋습니다. 단순한 파일 전송을 넘어, 웹, 데스크톱, 또는 명령줄 인터페이스(CLI) 등 다양한 형식으로 앱을 구축할 수 있습니다.

1.1 주요 개발 포인트

  • FTP 프로토콜 구현: ftplib 등을 사용하여 원격 서버에 접속하고 인증(로그인)을 수행합니다.
  • 파일 송수신: 원격 서버로 파일을 보내거나 서버의 파일을 내 컴퓨터로 가져오는 기능을 구현합니다.
  • 원격 디렉토리 관리: 서버의 파일 목록 조회, 폴더 생성, 삭제, 이름 변경 등의 작업을 지원합니다.
  • SFTP 및 보안 전송: paramiko와 같은 라이브러리를 활용하여 암호화된 전송(SSH 기반)을 지원합니다.
  • 사용자 인터페이스 (GUI): 드래그 앤 드롭으로 파일을 전송하거나 진행 상황을 바(Progress Bar)로 보여주는 UI를 제작합니다.

1.2 Python 구현 예시 (ftplib을 활용한 파일 목록 조회)

import os
from ftplib import FTP

def connect_and_list_ftp(host, user, passwd):
    """
    지정된 FTP 서버에 접속하여 루트 디렉토리의 파일 목록을 출력합니다.
    """
    print(f"'{host}' 서버에 접속 시도 중...")
    
    try:
        # FTP 서버 접속
        ftp = FTP(host)
        ftp.login(user=user, passwd=passwd)
        
        print(f"로그인 성공! ({user})")
        
        # 파일 목록 가져오기
        files = []
        ftp.retrlines('LIST', files.append)
        
        print("\n--- 원격 서버 파일 목록 ---")
        for f in files:
            print(f)
            
        # 접속 종료
        ftp.quit()
        print("\n접속이 안전하게 종료되었습니다.")
        
    except Exception as e:
        print(f"오류 발생: {e}")

if __name__ == "__main__":
    # 테스트를 위한 가상 데이터 (실제 서버 정보가 필요합니다)
    ftp_host = "ftp.dlptest.com" # 공개 테스트용 FTP (주의해서 사용)
    ftp_user = os.environ.get("FTP_USER", "your_ftp_user")
    ftp_pass = os.environ.get("FTP_PASSWORD", "your_ftp_password")
    
    # 실제 실행 시 주석 해제
    # connect_and_list_ftp(ftp_host, ftp_user, ftp_pass)
    print("실제 서버에 접속하려면 구현된 함수를 호출하세요.")