Simplify

svnsync를 이용한 svn repository 백업방법 How to backup svn repository using 'svnsync' 본문

Other/Dev. Tips

svnsync를 이용한 svn repository 백업방법 How to backup svn repository using 'svnsync'

Simplify - Jonghun 2019. 12. 30. 14:49

svn 자체가 형상관리, 그리고 공동 작업을 위해서 소스코드를 서버에 보관 한다는 의미도 있는데, 이걸 사용하면서 어쩔 수 없는 사정으로 백업을 해야하는 상황이 생깁니다. 개인적으로 느끼기에는 git 에 비해 덜 안정적이다 라는 느낌이 있어서인지, svn을 제대로 사용하지 못하는 상황이거나, 구성원들 중 잘못된 명령을 실행한 경우, 혹은 svn 작업을 하는 도중에 네트워크 등에 문제가 발생하는 것 등은 repository 에 심각한, 복구 불가능한 문제가 발생하기도 합니다.

 

이유야 어찌 되었든, svn 은 주기적으로 백업 관리해주는 것이 좋다고 판단되며, 특히 업무적으로 이를 이용하는 경우에는 하루 한 번 정도 백업하여 만일의 경우에 대비하는 것이 좋습니다. 

 

svn 을 백업 관리하는 방법에 대해서 찾아보면 다음의 세 가지 방법 정도가 검색되는데, 여기서는 그 중에서 svnsync 에 대해서만 다루고자 한다. 그 이외의 방법은 여기서는 다루지 않고, 앞으로도 필자는 사용하지 않을 생각입니다.

 

svnadmin dump

로컬 repository 에 대해서만 백업이 가능하다는 단점이 있지만, 특정 revision 구간을 지정하여 백업할 수 있다는 장점이 있습니다. 만약 해당 구간을 잘못 지정하여 백업하는 경우, 다시 load 할 때에 오류가 발생하거나, 백업 과정에서도 정상적으로 백업이 되지 않을 수 있다는 점을 주의해야 합니다. 

 

svnadmin hotcopy

그야말로 repository 를 통째로 복사하는 기능을 합니다. 특정 폴더에 백업하거나 smb 폴더 등이 mount 되어 있는 경우에 유용하다고 합니다.

 

svnsync

특정 repository 를 주소로 하여 그대로 백업하기 때문에 완벽하게 동일한 형태로 백업이 가능합니다. (revision graph 유지) 따라서 이 방법을 사용하고 백업한 폴더를 그대로 svnserve 로 respository 로 서비스하면 동일한 하나의 repository 를 구성할 수 있습니다. 만일의 사태에 대비한 백업 svn 을 구성할 때에 유용하며, svn url을 기반으로 하기 때문에 원격지에 대한 백업도 가능합니다. 또한 로컬에 대한 것 역시 localhost 접속으로 구성할 수 있습니다. (이 부분은 작업해 보지 않았으나 되지 않을 이유가 없어 보입니다)

 

 

환경(상황)

svn 사용 환경은 다음과 같이 가정합니다. 192.168.0.10 이 현재 운영중인 svn 서버이고 192.168.0.20에서 svnsync 로 백업을 수행하고 여기서 백업 svn 을 운영하는 것으로 생각하면 됩니다.

svn server 192.168.0.10
backup server 192.168.0.20

 

백업 사용하기 

https://192.168.0.10/repos 저장소를 Backup Server(192.168.0.20)의 /var/backup/svnbackup/repos 에 백업합니다. 백업서버에서 다음 명령어를 수행합니다.

 

1. repository 생성

svnadmin create /var/backup/svnbackup/repos

 

2. pre-revprop-change 파일 수정

vi /var/backup/svnbackup/repos/hooks/pre-revprop-change

다음 내용을 추가하고 저장한다.

#!/bin/sh
exit 0;

Windows 의 경우 pre-revprop-change.bat 의 이름으로 다음 내용을 저장한다.

@ECHO OFF
exit 0

3. 실행 속성 부여

chmod +x /var/backup/svnbackup/repos/hooks/pre-revprop-change

4. svnsync 설정을 초기화 한다.

svnsync init file:///var/backup/svnbackup/repos https://192.168.0.10/repos

Windows의 경우 file URL 뒤에 Drive 명도 주어야 한다.

svnsync init file:///d:\svnbackup\repos https://192.168.0.10/repos

5. svnsync 구동

svnsync sync file:///var/backup/svnbackup/repos

 

위 과정을 거치고 나면 해당 repository 를 sync 하기 시작하고, 마지막 5번 과정만을 crontab 등에 등록하면, 정해진 주기마다 svnsync 를 수행합니다. 어렵지 않은 명령어들이지만, 해당 과정을 (혹시 중간에 원치 않은 진행이 되더라도..) 몇 번 반복하다 보면 어떤 동작을 갖는지 감이 옵니다. 

 

개인적으로는 svn보다는 git 을 선호하는지라..^^ 업무적으로만 사용해봤으니 사용해보시고 잘 안되거나 하는 것들은 comment 남겨주시면 같이 해결해 보면 좋을 것 같습니다.

 

 

출처/참고자료

Comments