목표는 단순합니다. 원격 FTP 서버에 새 파일이 올라오면 즉시 알고 싶고, 그 파일로 뭔가를 하고 싶은 거죠 - 다운로드하거나, 처리하거나, 다른 작업을 실행하거나. 문제는 FTP 서버가 알림을 보내지 않는다는 겁니다. 그냥 거기 있을 뿐이고, 직접 물어봐야 합니다.

이 문제를 해결하는 방법은 두 가지입니다. 하나는 터미널과 셸 스크립트가 필요하고, 오류가 나도 조용히 실패하는 걸 감수해야 합니다. 다른 하나는 그런 게 전혀 필요 없습니다.

어려운 방법: 셸 스크립트와 cron

시스템 관리자에게 FTP 폴더 모니터링 방법을 물어보면 보통 lftp - 커맨드라인 FTP 클라이언트 - 와 cron 작업이나 launchd 에이전트를 조합하는 방법을 알려줍니다.

일반적인 구성은 이렇습니다. 먼저 lftp로 원격 폴더를 로컬에 동기화하는 셸 스크립트를 작성합니다:

#!/bin/bash
# download-from-ftp.sh
lftp -u username,password ftp.example.com << EOF
mirror --only-newer --no-recursion /remote/folder /Users/you/Downloads/ftp-watch/
quit
EOF

그런 다음 cron 항목(crontab -e)으로 5분마다 실행되도록 예약합니다:

# 5분마다 FTP 동기화 실행
*/5 * * * * /Users/you/scripts/download-from-ftp.sh >> /tmp/ftp-sync.log 2>&1

이 방법이 동작하긴 합니다. 모든 설정이 제대로 되어 있고 유지된다면 5분마다 서버를 확인하고 새 파일을 내려받습니다.

하지만 실제로 쓰다 보면 문제가 생깁니다:

터미널이 편하고 GUI 도구보다 코드를 선호하는 개발자라면 이 방식도 괜찮습니다. 하지만 그 외의 경우, 특히 안정성과 피드백이 중요한 워크플로에서는 맞지 않는 도구입니다.

쉬운 방법: FTPull

FTPull은 원격 FTP 폴더를 모니터링하고 새 파일을 자동으로 다운로드하는 macOS 앱입니다. 주기적으로 서버를 폴링하는 기본 원리는 같지만, 셸 스크립트 방식의 문제들을 모두 해결했습니다.

FTP 폴더 모니터링을 시작하는 방법:

  1. FTPull을 설치하고 응용 프로그램 폴더에서 실행합니다. 메뉴 바에 아이콘이 추가됩니다.
  2. 설정을 열고 새 연결을 추가합니다: 호스트명, 포트, 사용자명, 비밀번호, 프로토콜(FTP/SFTP/FTPS).
  3. 원격 폴더 경로를 설정합니다 - 서버에서 감시할 디렉터리입니다.
  4. 로컬 폴더를 설정합니다 - 다운로드한 파일이 저장될 Mac의 위치입니다.
  5. 폴링 간격을 설정합니다 - FTPull이 서버를 확인하는 주기입니다. 빠른 모니터링은 1분마다, 네트워크 부하를 줄이려면 5분마다.
  6. 연결을 활성화합니다. FTPull이 즉시 폴링을 시작합니다.

설정은 이게 전부입니다. 이제부터는 FTPull이 모든 것을 자동으로 처리합니다. 서버에 새 파일이 올라오면 다음 폴링 때 감지하고, 다운로드한 뒤 macOS 알림을 보내줍니다.

FTPull이 모니터링하는 것들

FTPull은 원격 폴더의 현재 파일 목록을 이전 폴링 결과와 비교해 상태를 추적합니다. 새로운 것이 있으면 다운로드합니다. 구체적으로:

확장자 필터

특정 파일 형식만 필요한 경우 - 데이터 피드의 .csv 파일이나 처리 시스템의 .pdf 파일만 받고 싶다면 - 확장자 필터를 설정하면 됩니다. 나머지 파일은 FTPull이 조용히 건너뜁니다. 원격 폴더에 필요 없는 파일 형식도 함께 올라오는 경우에 유용합니다.

여러 폴더, 여러 서버

셸 스크립트 방식과 비교했을 때 실질적인 장점 중 하나는 여러 연결을 한 번에 관리할 수 있다는 점입니다. 클라이언트 서버, 내부 서버, 협력업체 피드, 지역별 서버 두 곳까지 다섯 곳을 동시에 모니터링해야 한다면? FTPull에 연결 다섯 개를 추가하면 됩니다. 하나의 메뉴 바 아이콘에서 각각 독립적으로 동작하며, 폴링 간격과 설정도 따로 지정할 수 있습니다.

cron으로 같은 일을 하려면 스크립트 다섯 개, cron 항목 다섯 개, 안 읽을 로그 파일 다섯 개가 필요합니다.

스케줄링

FTPull에는 특정 시간대와 요일에만 모니터링하도록 제한하는 스케줄링 기능이 있습니다. 파일이 오전 9시~오후 5시에만 올라오는 시스템이라면 토요일 새벽 3시에 폴링할 필요가 없습니다. 스케줄을 설정(예: 오전 8시~오후 8시, 월~금)하면 FTPull이 해당 시간 외에는 자동으로 일시 중지합니다.

불필요한 네트워크 트래픽과 서버 부하도 줄일 수 있어, 연결 수 제한이나 속도 제한이 있는 서버를 사용할 때 특히 유용합니다.

오류가 발생했을 때

이 부분이 FTPull과 스크립트 방식의 차이가 가장 두드러지는 지점입니다. 다운로드가 실패하면:

cron 스크립트와 비교하면: 오류가 로그 파일 한 줄로 남고 끝납니다 - 읽고 있지 않으면 아무것도 모릅니다. 파일은 누군가 이상함을 눈치채기 전까지 내려오지 않습니다.

스크립트는 계속 관리해야 합니다

셸 스크립트와 cron 작업에는 UI도, 알림도, 오류 복구도 없습니다. 비밀번호가 바뀌거나 서버가 이전되거나 네트워크 문제가 생기면 조용히 멈춰버립니다 - 파일이 왜 안 왔냐는 연락을 받고서야 알게 됩니다.

FTPull은 이 모든 것을 대신 처리합니다. 한 번 설정하면 백그라운드에서 묵묵히 실행되고, 주의가 필요한 상황이 생기면 바로 알려줍니다.