윈도우 프로젝트 필수 유틸리티 10장 - 백업

저작권 안내
  • 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
  • 책 또는 웹사이트의 내용을 발췌, 요약하여 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.

10장 백업

이재홍 http://www.pyrasis.com 2007.10.27 ~ 2008.04.20

목차

  1. 운영 중인 Trac을 안전하게 백업하기
    1. 운영 중인 Subversion 저장소를 안전하게 백업하기
  2. 원격지의 Subversion 저장소 백업하기

운영 중인 Trac을 안전하게 백업하기

Trac과 Subversion 서버를 구축해서 사용을 하다 보면 서버의 장애가 발생할 수가 있습니다. 이런 사고에 대비하기 위해 백업을 해야 합니다. 백업을 해야 하는 부분은 두 부분으로 나눌 수 있습니다. 티켓 정보와, 첨부 파일이 저장되는 Trac 부분과, 소스 코드가 저장되는 Subversion 저장소입니다. 사람이 일일이 백업할 필요 없이 윈도우의 예약된 작업을 통해서 일정 시간이 되면 백업을 하도록 설정할 수 있습니다.

Apache에서 Trac이 작동 중일 때에도 안전하게 Trac 데이터베이스와 첨부 파일을 백업할 수 있도록 해주는 명령이 바로 trac-admin hotcopy 명령입니다. hotcopy 명령은 아래와 같이 사용합니다. 같은 컴퓨터상의 다른 하드디스크로도 복사할 수 있습니다.

C:\Python25\Scripts\trac-admin.exe C:\trac\example hotcopy D:\backup\trac\example

아래 백업 스크립트를 사용하면 편리하게 백업할 수 있습니다.

  • 다운로드 주소 : https://github.com/pyrasis/windowsprojectbook/blob/master/Scripts/PowerShell/trac-backup.ps1
  • 부록 CD 경로 : Scripts/PowerShell/
trac-backup.ps1
$backup_dir = "C:\Backup"
$trac_dir = "C:\trac"

new-item -path $backup_dir -type directory -force
new-item -path $backup_dir\trac -type directory -force

$today = (Get-Date).tostring('yyyyMMdd')+"."+(Get-date -uformat %j)

new-item -path $backup_dir\trac\$today -type directory -force

foreach ($item in get-childitem $trac_dir)
{
	if (test-path "$trac_dir\$item" -pathtype container)
	{
		C:\Python25\Scripts\trac-admin.exe $trac_dir\$item hotcopy $backup_dir\trac\$today\$item
	}
}

[int] $delete_day = (Get-Date -uformat %j) -30
Remove-Item $backup_dir\trac\*.$delete_day -recurse -force

$backup_dir 부분을 각자 상황에 맞게 수정합니다. 이 스크립트는 백업 디렉터리 아래에 20071216.350(년월일.줄리안 데이트) 형식으로 디렉터리를 만들고 그 아래에 trac-admin hotcopy 명령으로 각 Trac 데이터베이스를 복사합니다. 매일 매일 백업을 하면 백업 데이터가 무한정 늘어날 수 있기 때문에 30일이 지난 백업본은 삭제합니다. [int] $delete_day = (Get-Date -uformat %j) -30 부분에서 30이 날짜입니다. 이 부분도 각자 상황에 맞게 수정합니다.

TIP
쥴리안 데이트(Julian date)란? 1월 1일을 1로, 12월 31일을 365(윤년 366)으로 계산하는 방식입니다. 1년의 날짜를 1부터 순서대로 나열하는 방식을 쥴리안 데이트라고 합니다.

이 스크립트는 사람이 직접 실행하는 것이 아닌 윈도우의 예약된 작업을 통해서 하루에 한번씩 실행되도록 설정하면 됩니다.

  1. 제어판에서 → 예약된 작업 → 예약 작업 추가를 선택합니다. 그런 다음 작업 예약 마법사가 실행되면 다음을 눌러 넘어갑니다.


    그림 10-1 작업 예약 마법사

  2. Windows PowerShell을 선택합니다.


    그림 10-2 실행할 프로그램 선택

  3. 작업 이름은 svn backup으로 지정하고 작업 실행은 매일(D)를 선택합니다.


    그림 10-3 작업 이름 설정, 작업 실행 시기 설정

  4. 시작 시간은 오전 1:0 (새벽 1시, 시간은 각자 상황에 맞게 설정합니다.), 작업 실행은 매일(A), 시작날짜는 기본 설정 그대로 사용합니다.


    그림 10-4 작업을 시작할 시간과 날짜 선택

  5. 작업을 실행할 사용자의 암호를 입력합니다.


    그림 10-5 작업을 실행할 사용자 및 암호 입력

  6. [마침]을 클릭하면 이 작업의 고급 속성 열기(A)를 체크하고 마침을 누릅니다.


    그림 10-6 작업 예약 완료

  7. 실행(R) 부분의 맨 마지막에 c:\tools\trac-backup.ps1을 추가합니다.


    그림 10-7 trac-backup.ps1 설정

운영 중인 Subversion 저장소를 안전하게 백업하기

Apache에서 Subversion이 작동 중일 때에도 안전하게 저장소를 백업할 수 있도록 해주는 명령이 바로 svnadmin hotcopy 명령입니다. hotcopy 명령은 아래와 같이 사용합니다. 같은 컴퓨터상의 다른 하드디스크로도 복사할 수 있습니다.

svnadmin.exe hotcopy C:\Repos\example D:\backup\Repos\example

아래 백업 스크립트를 사용하면 편리하게 백업할 수 있습니다.

  • 다운로드 주소 : https://github.com/pyrasis/windowsprojectbook/blob/master/Scripts/PowerShell/svn-backup.ps1
  • 부록 CD 경로 : Scripts/PowerShell/
svn-backup.ps1
$backup_dir = "C:\Backup"
$repos_dir = "C:\Repos"

new-item -path $backup_dir -type directory -force
new-item -path $backup_dir\Repos -type directory -force

$today = (Get-Date).tostring('yyyyMMdd')+"."+(Get-date -uformat %j)

new-item -path $backup_dir\Repos\$today -type directory -force

foreach ($item in get-childitem $repos_dir)
{
	if (test-path "$repos_dir\$item" -pathtype container)
	{
		svnadmin hotcopy $repos_dir\$item $backup_dir\Repos\$today\$item
	}
}

copy $repos_dir\htpasswd $backup_dir\Repos\$today
copy $repos_dir\authz $backup_dir\Repos\$today

[int] $delete_day = (Get-Date -uformat %j) -30
Remove-Item $backup_dir\Repos\*.$delete_day -recurse -force

이 스크립트를 C:\tools 디렉터리로 복사한 다음, $backup_dir 부분을 각자 상황에 맞게 수정합니다. 이 스크립트는 백업 디렉터리 아래에 20071216.350(년월일.줄리안 데이트) 형식으로 디렉터리를 만들고 그 아래에 svnadmin hotcopy 명령으로 각 저장소를 복사합니다. 그리고 사용자 계정과 접근 권한을 저장하고 있는 htpasswd 파일과 authz 파일도 복사합니다. 매일 매일 백업을 하면 백업 데이터가 무한정 늘어날 수 있기 때문에 30일이 지난 백업본은 삭제합니다. [int] $delete_day = (Get-Date -uformat %j) -30 부분에서 30이 날짜입니다. 이 부분도 각자 상황에 맞게 수정합니다.

이 스크립트는 사람이 직접 실행하는 것이 아닌 윈도우의 예약된 작업을 통해서 하루에 한번씩 실행되도록 설정하면 됩니다. 예약된 작업을 설정하는 것은 trac-backup.ps1과 동일합니다. 작업 이름은 svn backup, 시작 시간은 오전 1:00, 실행 부분은 c:\tools\svn-backup.ps1로 지정해주면 됩니다.

원격지의 Subversion 저장소 백업하기

Subversion 1.4 부터 svnsync라는 명령이 추가되었습니다. 이 명령은 원격지의 Subversion 저장소를 그대로 가져오는 명령입니다. 처음 실행을 하면 저장소의 모든 내용을 가져오고, 그 다음 실행할 때 부터는 증가된 리비전만 가져옵니다. 그래서 시간을 절약할 수 있는 장점이 있습니다.

svnsync 명령을 이용하려면 먼저 빈 저장소를 만들어야 합니다. 백업 디렉터리는 C:\Backup이라고 가정합니다.

svnadmin create C:\Backup\example

여기서 중요한 것은 C:\Backup\example\hooks에 pre-revprop-change.cmd라는 빈 파일을 만들어주어야 합니다. 빈 파일을 만드는 것은 새로 만들기(W) → 텍스트 문서로 만들면 됩니다. 이 빈 파일이 있어야 svnsync 명령을 사용할 수 있습니다.


그림 10-8 빈 파일 생성 방법

저장소를 초기화 합니다. file:///c:/Backup/example은 방금 만든 저장소이며, http://192.168.1.100/svn/example는 가져올 저장소의 URL입니다.

svnsync init file:///c:/Backup/example http://192.168.1.100/svn/example


그림 10-9 저장소 초기화

이제 원격에 있는 저장소를 가져옵니다. 처음 실행하면 리비전 1부터 가져오며, 그 이후부터는 증가된 리비전을 가져오게 됩니다.

svnsync sync file:///c:/Backup/example


그림 10-10 저장소 동기화

원격 Subversion 서버에 프로젝트가 추가될 때마다, 백업을 하는 쪽도 그에 맞춰서 추가된 프로젝트 이름과 똑같은 저장소를 만든 뒤, pre-revprop-change.cmd 빈 파일을 만들어주고, svnsync init 명령으로 초기화 해주어야 합니다.

  • 다운로드 주소 : https://github.com/pyrasis/windowsprojectbook/blob/master/Scripts/PowerShell/svn-sync.ps1
  • 부록 CD 경로 : Scripts/PowerShell/
svn-sync.ps1
$backup_dir = "C:\Backup"
$url = "file:///" + $backup_dir.Replace("\","/")

new-item -path $backup_dir -type directory -force

foreach ($item in get-childitem $backup_dir)
{
	if (test-path "$backup_dir\$item" -pathtype container)
	{
		svnsync sync $url/$item
	}
}

이 스크립트는 윈도우의 예약된 작업에 설정하여 사용하면 됩니다. C:\Backup 아래에 있는 모든 저장소에 대해 svnsync sync 명령을 실행합니다. 원격지 서버에 새로 추가된 프로젝트는 이 스크립트로는 가져오지 못하므로, 꼭 추가된 프로젝트에 해당하는 저장소를 만들어주어야 합니다.

이로써 통합 개발 환경 구축이 끝났습니다. 실제 활용 방법은 "통합 개발 환경의 실제 활용"에서 설명하도록 하겠습니다.


저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.