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("실제 서버에 접속하려면 구현된 함수를 호출하세요.")