오늘은 간단하게 FTP 에 특정 폴더가 업데이트되면 바뀐 부분을 로컬 폴더에 자동으로 내려 받는 스크립트를 작성해봅니다. 서비스 운영을 하다 보면 FTP 를 쓸 일이 많습니다.
해외 퍼블리셔에 새 릴리즈를 전달할 때 아주 유용합니다. 웹 하드라던가 대체 서비스가 많지만 자동화하기 좋다는 점에서 FTP만한 게 없습니다. 특히 인터넷 환경이 좋지 않은 해외에 대용량 파일을 전달할 때는 자동화가 필수입니다. 업로드하는데 2시간 정도 걸린다 치면, “퇴근할 때 업로드를 걸어놓고 다음 날 와서 보면 되겠지”가 안 됩니다. 출근하자 마자 파일을 여기저기 배포하느라 정신 없습니다. 이럴 때는 FTP 에 새로운 파일이 올라왔는지 자동으로 확인해서 각 서버에 파일을 자동으로 배포하는 스크립트를 짜두면 편합니다.
이런 작업이 꽤 어려워 보일지 모르지만 사실 적당한 도구만 알면 매우 쉽습니다. 윈도우 환경이라면 WinSCP 가 딱입니다. 왜냐하면,
- 스크립팅을 통한 자동화를 지원합니다.
- FTP, SFTP, FTPS 등을 모두 지원합니다.
- GPL 라이선스 하에 무료로 사용가능합니다.
스크립팅
이제 WinSCP의 명령어를 텍스트 파일에 적어봅시다.
option echo on option batch abort option confirm off open ftp://username:pasword@hostname:21 synchronize local -mirror "D:\LocalDownloads" "/RemoteFolder" close exit
첫 세 줄에는 중간에 명령이 실패하면 바로 작업을 종료할 건지 여부 등을 지정합니다. 자세한 건 WinSCP 문서를 꼼꼼히 읽어봅시다. 개발자라면 문서 정도는 항상 펼쳐놓고 확인하는 법입니다.
open 명령어로 FTP 에 접속합니다. SFTP 등의 프로토콜에서는 호스트 키가 필요할 때도 있지만 복잡한 기능은 문서에서 살펴보기로 하고 여기선 간단한 FTP 프로토콜만 다룹시다.
이제 동기화 명령을 내립니다. local은 FTP 서버를 기준으로 로컬 폴더를 동기화한다는 뜻입니다. 로컬 폴더에 누가 새 파일을 복사해 넣더라도 이 파일이 FTP 서버로 가는 일이 없게 말입니다. –mirror 는 말이지요. A.zip 이란 파일이 일주일에 올라와서 동기화가 된 상태입니다. 그런데 어제 A.zip 파일의 새 버전이 올라왔습니다. 그러니까 파일의 경로는 같은데 파일의 내용물이 바뀐 겁니다. 이때 –mirror가 있어야 이 새 파일이 로컬 폴더에 다운로드됩니다. 제가 처한 상황에서는 이런 옵션이 필요하더군요. 사람마다 다르겠지요.
실행하기
이제 스크립트를 실행시켜 봅시다.
WinSCP.com /console /script="aboveTextFile.txt"
이게 끝입니다. 어떤가요? 꽤 쉽죠? 물론 기능이 막강한 만큼 복잡한 스크립트도 작성 가능합니다. 하지만 그만큼 문서를 잘 읽고 적절히 사용해야겠지요.
이제 이 스크립트를 주기적으로 실행해주기만 하면 됩니다. 그런데 어떻게 하냐구요? 윈도우에는 예약(Scheduled tasks 또는 작업 스케줄러) 기능이 있지 않습니까? 그 기능을 이용해서 WinSCP.com 을 때마다 실행시켜 주면 되지요.
이제 정말로 안녕~~~
[…] WinSCP 를 이용한 FTP 동기화 https://andromedarabbit.net/winscp-%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-ftp-%EB%8F%99%EA%B8%B0%ED… 참고 […]