컴퓨터에서 원격 서버로 파일을 실시간으로 동기화한다는 것은 파일이 생성, 업데이트 또는 삭제될 때마다 즉시 원격 서버에 업로드되거나 원격 서버에서 삭제된다는 것을 의미합니다. 이는 사진 및 비디오의 원격 간 복사본 저장, 지속적인 통합 및 배포 프로세스의 일부로 애플리케이션 변경 사항 배포, 타사와의 자동 파일 공유 등 여러 사례들을 통해 이득이 높은 것으로 입증되었습니다.

Dropbox, Box, Egnyte는 이러한 프로세스를 엔드투엔드 방식으로 처리하는 많은 제품 중 일부에 불과합니다. 이들은 파일 시스템 변경 사항을 추적하는 클라이언트, 필요한 원격 저장소, 원격 저장소의 파일에 액세스하고 공유할 수 있는 수단을 제공합니다.

SFTP 서버에 파일을 동기화하는 방법은 범용적이고 자동화하기 쉬우며, 간단한 GUI나 명령줄 클라이언트를 통해서도 쉽고 안전하게 파일에 액세스할 수 있기 때문에 많은 기업에서 선호하는 솔루션입니다. 이 글에서는 Windows 컴퓨터 또는 서버에 있는 파일을 원격 SFTP 서버와 동기화하는 방법을 소개하고자 합니다.

Syncplify.me AFT!

필자가 Syncplify.me AFT!를 만나게 된 계기는 공통의 고객이 서버의 파일을 SFTP To Go에 동기화할 때 문제가 발생했을 때였는데, Syncplify의 문제 해결 방식에 감탄하여 우리도 시도해보기로 했습니다.

AFT(Automated File Transfer: 자동 파일 전송)는 파일 전송을 자동화하는 것을 목적으로 자바스크립트의 확장 버전인 aftJS 언어를 사용하여 파일 시스템 변경 모니터링, 원격 서버 연결, 파일 업로드, 다운로드, 삭제하는 등의 간단한 스크립트를 작성할 수 있습니다. 미리 패키지화된 스크립트가 제공되기 때문에 바로 사용할 수 있으며, 스크립팅 언어는 프로세스를 완전히 제어하는 데 매우 강력합니다. 예를 들어, 파일을 변경할 때마다 원격 서버에 새로운 파일을 만든다거나, 로컬에서 삭제된 파일이 있을 때마다 이전 버전을 덮어쓰는게 아니라 원격 서버로 파일을 옮기는 것도 가능합니다.

또한 윈도우즈와 리눅스 모두에서 사용할 수 있는 크로스 플랫폼이라는 점도 매력 중 하나이죠.

삭제된 파일을 원격 서버에 그대로 남기는 동기화 스크립트의 예는 다음과 같습니다:

{
  // Let's enable console feedback, in case we're running this script via the shell
  ConsoleFeedback = true;

  // First, let's create the file-system watcher
  watcher = new FsWatcher();
  // Then we elect to delay notification by *at least* 300 seconds (5 minutes)
  // (useful to allow the file system to finish whatever operation is ongoing)
  watcher.DelayBySeconds = 300;
  // We may choose *not* to be notified of certain events
  watcher.NotifyRename = false;
  watcher.NotifyRemove = false;
  watcher.NotifyChmod = false;
  // We can specify inclusion and exclusion filters (optional, not mandatory)
  watcher.InclusionFilter = ['*.*'];
  watcher.ExclusionFilter = ['notes.txt', 'budget.xlsx'];
  // Almost ready, let's tell the object what folder we want to monitor
  watcher.WatchDir('C:\\TestFolder', false);
  // And then start the watcher
  watcher.Start();

  // We need to keep checking events indefinitely, an endless cycle is what we need
  while (true) {
    // Let's sleep for 500 milliseconds at each cycle, to keep CPU usage low
    Sleep(500);
    // When inside an endless cycle, it's always safe to check if we received a Halt signal at every cycle
    if (HaltSignalReceived()) {
      break;
    }
    // No Halt signal? Good, then let's acquire the list of pending event that we need to process
    evt = watcher.Events()
    // Do we have at least 1 event to process?
    if (evt.length > 0) {
      // We only connect to the server IF there are events to be processes
      var scli = new SftpClient();
      scli.Host = 'sftphost.com:22';
      scli.User = 'your_username';
      scli.Pass = 'your_password';
      scli.Options.UploadPolicy = AlwaysOverwrite;
      if (scli.Connect()) {
        // Cycle over all pending events...
        for (var i = 0; i < evt.length; i++) {
          if (evt[i].Event == 'WRITE') {
            // If it is a WRITE event (new or modified file) let's upload it to the server
            scli.UploadWithPath(evt[i].Object, '/DestinationPath', 1);
          }
        }
        // Do not forget to close the connection
        scli.Close();
      }
      // Set the client object to null to save memory
      scli = null;
    }
  }

원본 스크립트는 여기에서 보실 수 있습니다.

Syncplify.me AFT를 다운로드 받거나 가격플랜에 대해 궁금하시면 여기에서 확인하세요.

보안성과 안정성을 극대화한 SFTP To Go
SFTP To Go는 관리형 SFTP/FTPS/S3를 서비스 형태로 제공하며, 최고의 안정성, 보안, 가용성, 1분 만에 설치가 가능하며 모든 규모의 기업에 적합합니다.
지금 바로 SFTP To Go를 사용해 보세요!

WinSCP

WinSCP는 Windows용 무료 SFTP 클라이언트로 잘 알려져 있습니다. 다양한 CLI(명령줄 인터페이스) 옵션과 PowerShell 및 다양한 .NET 언어에서 사용할 수 있는 .Net 어셈블리 라이브러리를 통해 프로세스 자동화에도 사용할 수 있습니다.

Syncplify.me AFT와 달리 WinSCP는 어느 플랫폼에서 이용하지 못하고 Windows에서만 작동합니다. 이는 아마도 원래 리눅스의 보안 복사 명령어인 `scp`의 포트이기 때문일 것입니다. 또한, 동기화 과정을 완전히 제어할 수는 없지만, 명령줄 인수인 keepuptodate는 다양한 옵션이 있기 때문에 대부분의 활용사례를 커버할 수 있을 것입니다.

SFTP 세션을 열고 디렉터리를 동기화하기 위한 명령줄 예제는 다음과 같습니다:

C:\path_to_winscp\WinSCP.exe /console /ini=C:\path_to_config\WinSCP.ini /command "option batch continue" "open sftp://your_username:your_password@sftphost.com:22" "keepuptodate C:\Test_Folder /DestinationPath' -filemask=|notes.txt;*.tmp"

WinSCP는 여기에서 다운 받으실 수 있으며, keepuptodate의 옵션에 대해서는 이 내용을 참조하세요.

보안성과 안정성을 극대화한 SFTP To Go
SFTP To Go는 관리형 SFTP/FTPS/S3를 서비스 형태로 제공하며, 최고의 안정성, 보안, 가용성, 1분 만에 설치가 가능하며 모든 규모의 기업에 적합합니다.
지금 바로 SFTP To Go를 사용해 보세요!

Post photo by Vincent Branciforti on Unsplash