본문 바로가기
OS X App

Unison을 이용한 양방향 데이터 싱크

by 맥쓰는풍경/송호정 2012. 4. 13.
Unison을 이용한 양방향 데이터 싱크



1. 서론


  • 본 문서는 Unison을 이용하여 윈도우-맥 사이의 데이터 싱크 방법을 기술한 문서입니다.
  • 여기서 다룬 Unison 프로그램은 무료로 배포되는 프로그램이며 윈도우, 맥, 리눅스, Solaris, HP/UX, Irix, OSF1의 다양한 플랫폼용 binary를 지원하고 있습니다.
  • Unison 프로그램은 소스도 배포하므로 그 외의 플랫폼에서는 소스를 직접 컴파일 하여 사용할 수 있습니다. 
  • 본 문서에서는 맥을 서버로 사용하고 집과 회사에서 윈도우를 클라이언트로 하여 데이터를 싱크 하는 방법을 기술하였지만, 단지 이에 국한되지 않고 여러 플랫폼에서 다양하게 사용될 수 있습니다.

   

  A. Unison을 사용한 데이터 싱크 구성 방법

 

  • 서버 : 맥
  • 클라이언트 : 윈도우 2대

   

   

2. Unison 사용을 위한 필요 프로그램

 

  A. Unison 2.39 이상 http://www.cis.upenn.edu/~bcpierce/unison/

 

    1) GUI를 사용할 경우

 

    2) Command-line을 사용할 경우

  • 추가 필요한 패키지 없음

 

  B. SSH Client(다음 중 1가지를 사용)

 

    1) OpenSSH for Windows http://sourceforge.net/projects/opensshwindows/?source=recommended

       (단점 : 업그레이드가 자주 되지 않는다(마지막 버전 5.3pl1, 2011.5.11) )

    2) Cygwin http://cygwin.com

(단점 : 무겁다, 인스톨시간이 오래 걸린다)

    3) Cygwin 인스톨 후 ssh 관련 파일만 발췌한 ssh package  ssh_@Cygwin_2.769.zip

(단점 : cygwin이 업그레이드되면 다시 발췌 해야 한다)

 

3. 필요 프로그램 다운로드

 

  A. Unison http://www.cis.upenn.edu/~bcpierce/unison/

 

     

 

     

 

     

  • Unison 2.39 이상을 사용해야 한글파일명도 이상없이 동기가 됩니다.

 

  B. GTK+ for Windows Runtime Environment (http://sourceforge.net/projects/gtk-win/)

 

     

 

  C. VC Redistributable Package(Option)  (http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=29)

 

    

  • VC Redistributable Package는 사용자의 컴퓨터에 설치되어 있을 가능성이 있기 때문에, Unison을 실행시켜본 후 필요 시 추가로 설치하면 됩니다.

 

  D. SSH Client(다음 중 1가지 사용)

 

    1) OpenSSH for Windows (http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=29)

 

    

   

    2) Cygwin (http://cygwin.com)

 

    

 

    3) Cygwin 인스톨 후 ssh 관련 파일만 발췌한 ssh package ssh_@Cygwin_2.769.zip

   

4. 필요 프로그램 설치하기

 

  A. Unison 설치하기

 

    1) 다운받은 Unison-x-xx-xx.zip의 압축을 푼다

 

    

   

    2) Unison-x-xx-xx 폴더로 들어가면 __MACOSX와 Unison-x-xx-xx 폴더가 보이면 Unison-x-xx-xx 폴더를 C:\Program Files 폴더로 이동시킨다.

 

    

 

    

 

    3) Unison-x-xx-xx 폴더 내의 Unison-x.xx.xx Gtk+의 단축아이콘을 바탕화면에 만든다.

 

    

 

  B. GTK+ for Windows Runtime Environment 설치하기

 

  • 다운받은 gtk2-runtime-2.24.8-2011-12-03-ash를 실행시킨다.

 

 

   

 

   

   

  C. VC Redistributable Package 설치하기(Option) (먼저 Unison을 실행시켜보고 실행이 안될 시 설치한다.)

 

  • 다운받은 vcredist_x86을 실행시킨다.

   

   

 

  D. SSH 설치하기

 

    1)    OpenSSH for Windows 설치하기

   

  • 다운받은 OpenSSHWindows53p1-2를 실행시킨다.

   

 

    2)    Cygwin 설치하기 [추후 작성 예정]

 

    3)    Cygwin 인스톨 후 ssh 관련 파일만 발췌한 ssh package 설치하기

 

      a. 첨부한 파일의 압축을 푼다

      b. 압축 푼 폴더명을 ssh 라고 변경한다.

      c. ssh 폴더를 C:\Program Files에 이동시킨다.

 

5. SSH 환경 설정하기

 

  A. [내 컴퓨터]를 선택하고 [마우스 오른쪽 버튼]을 클릭한 후 [속성]을 선택한다.

 

    

 

  B. [고급 시스템 설정]을 선택한다.

 

    

 

  C. [환경 변수] 버튼을 클릭한다.

 

    

 

  D. [새로 만들기] 버튼을 클릭한다.

 

    

 

  E. OpenSSH의 경로를 PATH 환경 변수에 등록한다.

 

    

[변수 이름] PATH

[변수 값] C:\Program Files\OpenSSH for Windows\bin

   

  • 다른 ssh 패키지를 설치한경우 [변수 값]을 다음과 같이 입력하면 된다.
    • Cygwin을 인스톨 한 경우

      [변수 값] C:\Cygwin\bin

    • Cygwin 인스톨 후 ssh 관련 파일만 발췌한 ssh package를 설치하였을 경우

      [변수 값] C:\Program Files\ssh

 

  F. ssh에서 사용할 사용자 홈디렉토리 환경 변수를 설정한다.

  • Cygwin을 설치한 경우 설정할 필요 없음

 

[변수 이름] HOME

[변수 값] C:\Users\userID <- userID는 사용자의 윈도우 로그인 ID

 

  G. 환경변수 설정이 완료된 모습

 

    

   

6. ssh 서버 설정하기

Unison은 ssh를 사용하여 서버에 접속하기 때문에 서버로 사용될 컴퓨터에 sshd가 깔려 있어야 한다.

여기서는 MacOS를 기준으로 설명한다.

하지만, 다른 OS에서도 sshd만 돌아간다면 문제없이 Unison을 사용할 수 있다.

 

  A. 시스템 환경설정/공유 선택

 

    

 

  B. 원격로그인 체크

 

    

 

  C. sshd(Secure Shell Demon) 실행하기

  • 인터넷을 찾아보면, 위와 같이 하기만 하면 sshd가 동작하는 것으로 나와 있다. 하지만, 필자의 경우는 저렇게 해도 동작하지 않기 때문에 터미널에서 sshd를 직접 실행시켰다.

     

    $ sudo /usr/sbin/sshd

    $ ps -ef | grep sshd (sshd가 동작하고 있는지 확인)

   

  • 단, 필자의 경우는 맥을 리붓하면 sshd가 자동으로 동작하지 않기 때문에 VNC를 사용해서 접속한 후 위 명령어를 사용해서 다시 sshd를 실행시켜야 한다.

 

  D. sshd 포트 변경하기

  • 현재 필자의 맥이 설치된 곳에서는 공유기를 사용하고 있고, ssh 기본 포트(22번 포트)를 사용하는 서버가 별도로 존재하고 있기 때문에 필자의 맥에는 ssh 기본 포트를 사용하지 못하고 다른 포트를 사용해야만 한다.
  • 그러므로 맥의 sshd 포트를 변경하는 것이 불가피하였다.

   


a. /etc/sshd_config 파일 수정

 

    $ vi /etc/sshd_config

   

#Port 22 <- #은 주석을 의미.

   

Port 9999 <- #을 삭제하고 포트를 9999 로 변경

   

b. sshd를 종료시킨다.

   

$ ps -ef | grep sshd <- sshd가 동작하고 있는지 확인

$ sudo killall sshd <- sshd를 종료

   

c. Sshd를 재 실행 시킨다.

   

$ sudo /usr/sbin/sshd

$ ps -ef | grep sshd (sshd가 동작하고 있는지 확인)

   

d. Ssh로 접속해 본다.

   

$ ssh userid@host.domain <- 접속 안됨

   

$ ssh -o port=9999 userid@host.domain <- 접속 됨

   

7. Unison 실행하기

 

  A. 바탕화면에 바로가기 만들어놓은 Unison-x-xx-xx-Gtk를 실행하면 다음과 같이 Profile 선택 화면이 뜬다.

 

    

   

  B. Default 프로파일은 삭제한다.

 

    

 

  C. [Add] 버튼을 클릭해서 새 프로파일을 만든다.

 

    

 

  D. 프로파일 이름에 원하는 이름을 적는다.

 

    

 

  E. 연결 방법에 Using SSH를 선택한다. 동기화 할 곳이 같은 컴퓨터내에 있다면 Local을 선택한다.

 

    

 

  F. Configuration에 ssh 서버가 있는 원격지의 host명과 user id를 입력한다.

 

    

 

  G. Local 디렉토리를 선택한다.

주의할 점은 드라이브를 먼저 선택한 후, 콤보박스를 다시 눌러보면 Other를 클릭하여 다른 폴더를 선택할 수 있다.

 

    

 

  H. Remote 디렉토리를 입력한다.

Remote 디렉토리는 ssh 서버의 사용자 홈 디렉토리 아래의 디렉토리명을 적으면 된다.

(여기서는 Work라는 디렉토리를 사용하였다.)

예) Linux, Unix 계열 : /home/userid/Work

예) Mac : /Users/userid/Work

 

    

 

  I. 기본 설정 완료

 

    

 

    

 

  J. 프로파일 수정

프로파일 선택후 [Edit] 버튼 클릭

 

    

 

  K. root를 선택 후 [[Edit] 버튼 클릭

 

    

 

  L. 만약 ssh 포트를 변경했을 경우 host 이름 뒤에 ":port" 를 추가한다.

포트 변경을 하지 않았을 경우는 통과

 

    

   

  M. 입력을 마친 후 그냥 [OK] 버튼을 클릭하면 반영이 안됨(버그인 듯)

다시한번 [Edit] 버튼을 클릭하여 Value에 반영이 되는 것을 확인 한 후 [OK] 버튼 클릭

 

    

 

  N. 선택 옵션 추가

  

    1)    Batch 옵션 : 사용자의 키 입력을 기다리지 않고 자동으로 스캔하고 싱크를 수행한다.

  • 주의 처음에는 이 옵션은 사용하지 않는 것이 좋다.
  • 여러 번 사용해 본 후 이 옵션을 추가하여 자동 싱크를 수행하는 것이 바람직하다.

   

 

 

    2) Confirmbigdel 옵션 : 디렉토리를 통제로 삭제한다던지 많은 양의 데이터가 변경되면 싱크를 하지 않는다. 아마도 안전을 위해서 그런 것 같다. 이 옵션을 켜면 변경 데이터 양에 관계없이 그냥 싱크를 수행 한다.

 

    

 

    

   

    3) Fastcheck 옵션 : 빠른 스캔을 수행한다.

 

    

 

    

 

    4) Ignore 옵션 : 원하지 않는 파일이나 디렉토리를 제외시킨다.

  • 필자의 경우는 맥의 시스템 파일이나 윈도우의 시스템파일들을 싱크에서 제외 시켰다.
  • 마찬가지로 [Add]를 누른 후 입력하고 [Edit]를 눌러 반영된 것을 확인해야 한다.

 

 

    5) Times 옵션 : 파일의 날짜를 동일하게 맞춘다

  • 필자가 Unison을 처음 사용하였을 때 이 옵션에 대하여 몰랐기 때문에, 데이터 싱크 후 파일을 보면 원본 날짜와는 다르게 현재 날짜로 되어 있었다.
  • 날짜가 동일하지 않더라도 Unison에서는 동일한 파일로 인식한다.
  • 하지만, 날짜가 동일하게 되어있지 않으면 추후 확인 과정에서 문제가 많기 때문에 Unison의 사용 여부 자체까지도 다시 생각하게 되었지만, 한참을 검색하여 times라는 옵션을 알게 되었다.

 

   

    

 

    6)    전체 설정 완료 모습

   

    

 

O. 프로파일명을 더블클릭 하거나 [Open] 버튼을 클릭하면 동기화를 시작한다.

 

    

 

  P. RSA 인증키 생성

처음 ssh 접속을 하게되면 RSA 인증키가 생성되어 있지 않기 때문에, 인증키를 생성하는 과정을 거쳐야 한다.

인증키를 생성하겠냐는 물음에 yes를 입력한다.

 

    

 

  Q. 서버 비밀번호 입력

ssh로 서버에 접속을 하게되면 해당 userid에 대한 비밀번호를 입력해야 한다.

 

    

   

  R. 스캔 시작

비밀번호 입력을 마치면 Unison은 두 곳의 데이터를 스캔하게 된다.

 

    

 

    

 

  S. 데이터의 추가

Local 폴더에 데이터를 추가한다.

여기서는 실험적으로 이미지파일 몇 장을 추가하였다.

 

    

 

  T. 데이터 스캔

데이터 스캔 결과 새로운 파일이 로컬에 생성되어 원격지로 보낸다는 표시이다.

 

    

 

  U. 데이터의 싱크

[Go] 버튼을 클릭하면 싱크가 수행되며 완료된 파일은 Status에 체크표시가 된다.

 

    

 

    

   

  V. 원격지 맥에 가서 확인해보면 데이터가 추가된 것을 볼 수 있다.

 

    

   

8. 암호 입력 없이 로그인하기

   

  • Unison을 이용하여 양방향 데이터 싱크가 가능하게 되었지만, Unison을 실행할 때 마다 비밀번호를 입력해야 하는 번거로움이 있다. 이를 생략하기 위해서는 다음과 같이 DSA 인증을 사용하면 비밀번호 입력없이 로그인 할 수 있다.

   

  A. DSA 키 생성하기

클라이언트에서 DSA 키를 생성한다.

   

코멘드창을 띄운 후

   

C:\Users\userID> ssh-keygen -t dsa (여러 번 엔터)

   

  • 생성된 DSA 키는 사용자 홈디렉토리 밑의 .ssh 디렉토리에 생성된다.
    • id_dsa (비밀키, 열쇠)
    • id_dsa.pub (공개키, 자물쇠)

 

   

  B. 서버에 공개키 설치하기

서버에서 Public Key를 인식할 수 있게 한다. 즉, 서버에 자물쇠를 설치한다.

   

  • 서버로 id_dsa.pub 파일을 보낸 후, 공개키를 설치한다.(필자의 경우는 dropbox를 사용하여 보냄)

   

$ mkdir -p ~/.ssh

$ chmod 700 ~/.ssh

$ cat id_dsa.pub >> ~/.ssh/authorized_keys

$ chmod 600 ~/.ssh/authorized_keys

   

  • 클라이언트가 여러 개 있을 경우 authorized_keys2 등으로 번호를 붙이면 됨.

   

  C. 클라이언트에서 접속해보기

클라이언트에서 열쇠를 사용하여 자물쇠를 연다

   

$ ssh user@host.domain:9999

   

  • 패스워드를 묻지 않고 자동 로그인 된다.


9. Command-Line Unison 사용하기

   

  • Unison 사용하여 데이터를 싱크할 정해진 시간에 자동으로 실행 하거나 여러 개의 프로파일을 일괄 실행시키고 싶을 때는 Command-Line Unison 사용해야 한다.
  • 이때에는 batch 옵션을 켜서 사용자의 입력을 받지않고 동작되게 하면 일괄적으로 여러 개의 프로파일을 실행시킬 있다. (, 장시간 사용해 보고 싱크가 정확하게 되는 확인하여 신뢰성을 확보한 사용하는 것이 바람직하다)

   

  A. Unison-x-xx-xx폴더의 Unison-2.40.63 Text.exe 파일의 파일명을 Unison.exe 변경한다.

  B. Unison-x-xx-xx 폴더를 PATH 환경변수에 추가한다.


[변수 이름] PATH

[변수 ]    C:\Program Files\OpenSSH for Windows\bin;C:\Program Files\Unison-x-xx-xx


  C. Command창에서 다음과 같이 입력한다.

 

C:\Users\userID> D:\Work ssh://foo@host.domain:9999/Work -batch -confirmbigdel -fastcheck -ignore "Name .DS_Store" -ignore "Name Thumbs.db" -ignore "Name Desktop.ini" -times > null

 

또는 앞에서 앞에서 GUI Unison 사용하여 만든 프로파일명을 사용하면 된다.


C:\Users\userID> unison Work                <- 프로파일명

C:\Users\userID> unison Work > null        <- 스캔 과정을 화면에 보이지 않는다.


  D. 또한, 프로파일은 메모장을 사용하여 다음과 같이 간단하게 만들수 있다.

 

# My Unison preferences

batch = true

confirmbigdel = true

fastcheck = true

ignore = Name .DS_Store

ignore = Name Thumbs.db

ignore = Name Desktop.ini

root = D:\Work

root = ssh://foo@host.domain:9999/Work

sshargs = -C

times = true

 

만든 프로파일은 C:\Users\userID/.unison/프로파일명.prf 저장한다.


  E. 배치파일을 사용하여 동작시킬 경우


다음과 같은 배치파일을 만들어서 바탕화면에 놓고 실행시키면, Work라는 폴더를 싱크 시킨 Image라는 폴더를 싱크 시킨다.

 

Sync.bat

 

C:\Users\userID> D:\Work ssh://foo@host.domain:9999/Work -batch -confirmbigdel -fastcheck -ignore "Name .DS_Store" -ignore "Name Thumbs.db" -ignore "Name Desktop.ini" -times

C:\Users\userID> D:\Image ssh://foo@host.domain:9999/Image -batch -confirmbigdel -fastcheck -ignore "Name .DS_Store" -ignore "Name Thumbs.db" -ignore "Name Desktop.ini" -times

 

또는 프로파일을 사용할 있다.

 

Work라는 프로파일과 Image라는 프로파일이 존재한다고 가정하면…

다음과 같은 배치파일을 만들어서 바탕화면에 놓고 실행시키면, Work라는 프로파일을 싱크한 Image라는 프로파일을 싱크한다.(자동으로 싱크하기 위해서는 반드시 batch옵션을 true 해줘야 한다.

 

Sync.bat

 

Unison Work

Unison Image



10. Unison의 주기적인 자동 실행


 OS 맞는 자동 실행 방법을 사용하면 정해진 시간에 자동 싱크가 가능하다.

출근시간  퇴근시간에 맞춰 등록해놓으면 자동으로 싱크 완료 됨.

반드시 장시간 사용해 보고 싱크가 정확하게 되는  확인하여 신뢰성을 확보한  사용하는 것이 바람직하다.

 

  A. Windows 예약 작업 사용

     윈도우에서는 예약작업을 사용하여 정해진 시간에 자동으로 프로그램을 실행시킬 수 있다.

(Windows7 기준)

  1. [ 제어판 / 시스템 보안 / 관리도구 / 예약작업 ] 실행
  2. 기본작업 만들기 클릭
  3. 주기, 시간, 실행 등을 차례대로 입력하면 정해진 시간에 프로그램을 동작시킬 있다.


  B. Mac, Linux crontab 사용

 

맥이나 리눅스에서는 crontab 사용하여 정해진 시간에 자동으로 프로그램을 실행시킬 있다.

 

$ vi ~/unison_sync.sh

 

Unison ~/Work ssh://foo@host.domain/Work -batch -confirmbigdel -fastcheck -times > /dev/null 2>&1

 

$ chmod 755 ~/unison_sync.sh

$ crontab -e

 

00 18 * * * /Users/(계정명)/unison_sync.sh > /dev/null 2>&1     <- 매일 18:00 주기적으로 싱크 실행


11. 결론

   

  • 데이터 백업은 필수적이면서도 쉽게 하지 못하는 작업입니다. 하지만 꼭 해야만 하는 작업이기도 합니다. 한 순간의 실수로 많은 데이터를 날릴 수 있기 때문입니다.
  • 필자는 오래전 부터 플로피 디스크, CD등에 정기적으로 백업을 하다가 최근에는 용량이 많아져서 USB 하드에 매일 싱크를 하였고 현재는 Unison으로 세팅을 마친 후 Unison을 사용하여 네트워크로 싱크하고 있습니다.
  • 싱크의 장점은 집과 회사에서 항상 같은 자료를 유지할 수 있다는 것 입니다.
  • Unison을 사용하기 전에는 약 50G의 데이터를 Beyond Sync라는 유료 윈도우 프로그램을 구입하여 USB 하드와 싱크 하였습니다.
  • Beyond Sync를 사용하였을 경우 스캔시간만 약 5~10분 정도가 소요되었습니다. (그 후 싱크 시간은 파일 용량에 따라 다르게 소요)
  • 하지만, Unison을 사용했을 경우에는 초기 스캔 시간이 약 5분 정도, 그 후 부터 다시 스캔 할 경우에는 1~2분 정도만 소요되고 있습니다(fastcheck 옵션 사용), 당연히 싱크 시간은 파일의 용량에 따라 다름. (느낌상 더 빨리 싱크되는 느낌…!!)
  • 또한 큰 파일들이 변화가 생겨 싱크 시간이 오래 걸릴 경우에도 로컬의 USB 하드와 싱크하는 것이 아니라 원격지의 서버와 싱크를 하므로 실행시켜놓고 퇴근하거나 다른 일을 하면 되기 때문에 무척 편리하게 사용하고 있습니다.
  • 참고로, 초기 싱크는 네트워크로 할 경우는 시간이 상당히 많이 걸릴것을 고려하여 USB 하드로 복사하여 전부 3대의 컴퓨터의 데이터를 같게 만든다음 시작하였습니다.

     

참고자료

   


반응형

댓글