목표는 단순합니다. 원격 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분마다 서버를 확인하고 새 파일을 내려받습니다.
하지만 실제로 쓰다 보면 문제가 생깁니다:
- 알림이 없습니다. 파일이 폴더에 도착해도, 직접 확인하기 전에는 알 방법이 없습니다.
- 오류가 조용히 묻힙니다. 비밀번호가 바뀌거나 서버가 이전되거나 네트워크가 잠깐 끊기면 스크립트는 소리 없이 실패합니다. 파일이 왜 안 왔냐는 질문을 받고서야 알게 됩니다.
- UI가 없습니다. 디버깅하려면 로그 파일을 직접 읽어야 합니다. 상태를 확인하려면 명령어를 실행해야 합니다.
- 지속적인 관리가 필요합니다. macOS 업데이트 후 cron이나 launchd 설정이 꼬이는 경우가 있습니다. 자격증명을 바꾸면 셸 스크립트나 설정 파일도 일일이 수정해야 합니다.
- 오류 처리가 없습니다. 다운로드가 중간에 끊기거나 서버 타임아웃이 발생하면 그냥 로그에 오류 한 줄 남기고 끝납니다 - 누군가 읽고 있다면 말이죠.
터미널이 편하고 GUI 도구보다 코드를 선호하는 개발자라면 이 방식도 괜찮습니다. 하지만 그 외의 경우, 특히 안정성과 피드백이 중요한 워크플로에서는 맞지 않는 도구입니다.
쉬운 방법: FTPull
FTPull은 원격 FTP 폴더를 모니터링하고 새 파일을 자동으로 다운로드하는 macOS 앱입니다. 주기적으로 서버를 폴링하는 기본 원리는 같지만, 셸 스크립트 방식의 문제들을 모두 해결했습니다.
FTP 폴더 모니터링을 시작하는 방법:
- FTPull을 설치하고 응용 프로그램 폴더에서 실행합니다. 메뉴 바에 아이콘이 추가됩니다.
- 설정을 열고 새 연결을 추가합니다: 호스트명, 포트, 사용자명, 비밀번호, 프로토콜(FTP/SFTP/FTPS).
- 원격 폴더 경로를 설정합니다 - 서버에서 감시할 디렉터리입니다.
- 로컬 폴더를 설정합니다 - 다운로드한 파일이 저장될 Mac의 위치입니다.
- 폴링 간격을 설정합니다 - FTPull이 서버를 확인하는 주기입니다. 빠른 모니터링은 1분마다, 네트워크 부하를 줄이려면 5분마다.
- 연결을 활성화합니다. FTPull이 즉시 폴링을 시작합니다.
설정은 이게 전부입니다. 이제부터는 FTPull이 모든 것을 자동으로 처리합니다. 서버에 새 파일이 올라오면 다음 폴링 때 감지하고, 다운로드한 뒤 macOS 알림을 보내줍니다.
FTPull이 모니터링하는 것들
FTPull은 원격 폴더의 현재 파일 목록을 이전 폴링 결과와 비교해 상태를 추적합니다. 새로운 것이 있으면 다운로드합니다. 구체적으로:
- 새 파일 - 이전 목록에 없던 파일
- 수정된 파일 (선택) - 크기나 수정 시각이 변경된 파일
- 하위 폴더 - FTPull은 하위 폴더도 재귀적으로 모니터링하므로, 하위 폴더마다 별도의 연결을 추가할 필요가 없습니다
확장자 필터
특정 파일 형식만 필요한 경우 - 데이터 피드의 .csv 파일이나 처리 시스템의 .pdf 파일만 받고 싶다면 - 확장자 필터를 설정하면 됩니다. 나머지 파일은 FTPull이 조용히 건너뜁니다. 원격 폴더에 필요 없는 파일 형식도 함께 올라오는 경우에 유용합니다.
여러 폴더, 여러 서버
셸 스크립트 방식과 비교했을 때 실질적인 장점 중 하나는 여러 연결을 한 번에 관리할 수 있다는 점입니다. 클라이언트 서버, 내부 서버, 협력업체 피드, 지역별 서버 두 곳까지 다섯 곳을 동시에 모니터링해야 한다면? FTPull에 연결 다섯 개를 추가하면 됩니다. 하나의 메뉴 바 아이콘에서 각각 독립적으로 동작하며, 폴링 간격과 설정도 따로 지정할 수 있습니다.
cron으로 같은 일을 하려면 스크립트 다섯 개, cron 항목 다섯 개, 안 읽을 로그 파일 다섯 개가 필요합니다.
스케줄링
FTPull에는 특정 시간대와 요일에만 모니터링하도록 제한하는 스케줄링 기능이 있습니다. 파일이 오전 9시~오후 5시에만 올라오는 시스템이라면 토요일 새벽 3시에 폴링할 필요가 없습니다. 스케줄을 설정(예: 오전 8시~오후 8시, 월~금)하면 FTPull이 해당 시간 외에는 자동으로 일시 중지합니다.
불필요한 네트워크 트래픽과 서버 부하도 줄일 수 있어, 연결 수 제한이나 속도 제한이 있는 서버를 사용할 때 특히 유용합니다.
오류가 발생했을 때
이 부분이 FTPull과 스크립트 방식의 차이가 가장 두드러지는 지점입니다. 다운로드가 실패하면:
- 해당 파일에 빨간 Finder 태그가 붙습니다 - 앱을 열지 않아도 다운로드 폴더에서 바로 확인 가능합니다
- macOS 알림 센터를 통해 오류 알림이 전송됩니다
- FTPull의 로그 뷰에 구체적인 실패 원인과 함께 기록됩니다
- 다음 폴링 주기에 자동으로 재시도합니다
cron 스크립트와 비교하면: 오류가 로그 파일 한 줄로 남고 끝납니다 - 읽고 있지 않으면 아무것도 모릅니다. 파일은 누군가 이상함을 눈치채기 전까지 내려오지 않습니다.
스크립트는 계속 관리해야 합니다
셸 스크립트와 cron 작업에는 UI도, 알림도, 오류 복구도 없습니다. 비밀번호가 바뀌거나 서버가 이전되거나 네트워크 문제가 생기면 조용히 멈춰버립니다 - 파일이 왜 안 왔냐는 연락을 받고서야 알게 됩니다.
FTPull은 이 모든 것을 대신 처리합니다. 한 번 설정하면 백그라운드에서 묵묵히 실행되고, 주의가 필요한 상황이 생기면 바로 알려줍니다.
