프로그래밍

7zip과 배치 파일을 이용한 간편한 소스 백업 방법

채윤아빠 2012. 4. 10. 16:43
728x90
반응형
서론

소스를 압축하여 백업하는 것은 귀찮은 작업중의 하나입니다. 물론 Subversion 등을 통하여 버전 관리를 하고 있겠지만(뭐라구요... Subversion을 모르시겠다구요? ^^;) 그와 별개로 소스만 압축하여 백업할 때는 Export 등을 해서 해야만 하는 불편함이 있습니다. 그렇지 않고 통째로 압축을 하면 불필요한 파일들 까지 압축되고, 용량도 갑절로 커지기도 하죠.

그래서 한번 클릭으로 손쉽게 원하는 소스만 백업할 수 있는 방법을 고민하다가 찾은 것이 배치 파일을 이용한 방법입니다.

배치 파일이란?

스크립트의 일종으로 파일 내의 주어진 명령들을 순차적으로 실행하여 주는 파일이 배치 파일입니다. 옛날 도스 시절을 생각해보면 autoexec.bat이 가장 먼저 떠오르는 군요.

배치 파일에서 사용할 수 있는 명령들은 커맨드(cmd) 창에서 help를 치면 설명들이 나옵니다.

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.

C:\Users\hbesthee>help
특정 명령어에 대한 자세한 내용이 필요하면 HELP 명령어 이름을 입력하십시오.
ASSOC    파일 확장명 연결을 보여주거나 수정합니다.
ATTRIB   파일 속성을 표시하거나 바꿉니다.
BREAK    확장된 CTRL+C 검사를 설정하거나 지웁니다.
BCDEDIT        부팅 로딩을 제어하기 위해 부팅 데이터베이스에서 속성을 설정합니다
.
CACLS    파일의 액세스 컨트롤 목록(ACL)을 표시하거나 수정합니다.
CALL     한 일괄 프로그램에서 다른 일괄 프로그램을 호출합니다.
CD       현재 디렉터리 이름을 보여주거나 바꿉니다.
CHCP     활성화된 코드 페이지의 번호를 표시하거나 설정합니다.
CHDIR    현재 디렉터리 이름을 보여주거나 바꿉니다.
CHKDSK   디스크를 검사하고 상태 보고서를 표시합니다.
CHKNTFS  부팅하는 동안 디스크 확인을 화면에 표시하거나 변경합니다.
CLS      화면을 지웁니다.
CMD      Windows 명령 인터프리터의 새 인스턴스를 시작합니다.
COLOR    콘솔의 기본색과 배경색을 설정합니다.
COMP     두 개 또는 여러 개의 파일을 비교합니다.
COMPACT  NTFS 분할 영역에 있는 파일의 압축을 표시하거나 변경합니다.
CONVERT  FAT 볼륨을 NTFS로 변환합니다. 현재 드라이브는
         변환할 수 없습니다.
COPY     하나 이상의 파일을 다른 위치로 복사합니다.
DATE     날짜를 보여주거나 설정합니다.
DEL      하나 이상의 파일을 지웁니다.
DIR      디렉터리에 있는 파일과 하위 디렉터리 목록을 보여줍니다.
DISKCOMP 두 플로피 디스크의 내용을 비교합니다.
DISKCOPY 플로피 디스크의 내용을 다른 플로피 디스크로 복사합니다.
DISKPART 디스크 파티션 속성을 표시하거나 구성합니다.
DOSKEY   명령줄을 편집하고, Windows 명령을 다시 호출하고, 매크로를 만듭니다.
DRIVERQUERY  현재 장치 드라이버 상태와 속성을 표시합니다.
ECHO     메시지를 표시하거나 ECHO를 사용 또는 사용하지 않습니다.
ENDLOCAL 배치 파일에서 환경 변경의 지역화를 끝냅니다.
ERASE    하나 이상의 파일을 지웁니다.
EXIT     CMD.EXE 프로그램(명령 인터프리터)을 마칩니다.
FC       두 파일 또는 파일의 집합을 비교하여 다른 점을
         표시합니다.
FIND     파일에서 텍스트 문자열을 찾습니다.
FINDSTR  파일에서 문자열을 찾습니다.
FOR      파일 집합에서 각 파일에 대해 지정된 명령을 실행합니다.
FORMAT   Windows에서 사용할 디스크를 포맷합니다.
FSUTIL   파일 시스템 속성을 표시하거나 구성합니다.
FTYPE    파일 확장 연결에 사용되는 파일 형식을 표시하거나 수정합니다.
GOTO     Windows 명령 인터프리터가 일괄 프로그램에서
         이름표가 붙여진 줄로 이동합니다.
GPRESULT 컴퓨터 또는 사용자에 대한 그룹 정책 정보를 표시합니다.
GRAFTABL Windows가 그래픽 모드에서 확장 문자 세트를 표시할
         수 있게 합니다.
HELP     Windows 명령어에 관한 도움말을 제공합니다.
ICACLS         파일과 디렉터리에 대한 ACL을 표시, 수정, 백업 또는
               복원합니다.
IF       일괄 프로그램에서 조건 처리를 수행합니다.
LABEL    디스크의 볼륨 이름을 만들거나, 바꾸거나, 지웁니다.
MD       디렉터리를 만듭니다.
MKDIR    디렉터리를 만듭니다.
MKLINK         기호화된 링크와 하드 링크를 만듭니다.
MODE     시스템 장치를 구성합니다.
MORE     출력을 한번에 한 화면씩 표시합니다.
MOVE     하나 이상의 파일을 한 디렉터리에서 다른 디렉터리로 옮깁니다.
OPENFILES  파일 공유에서 원격 사용자에 의해 열린 파일을 표시합니다.
PATH     실행 파일의 찾기 경로를 보여주거나 설정합니다.
PAUSE    배치 파일의 처리를 보류하고 메시지를 보여줍니다.
POPD     PUSHD 명령으로 저장된 디렉터리로 바꿉니다.
PRINT    텍스트 파일을 인쇄합니다.
PROMPT   Windows 명령 프롬프트를 바꿉니다.
PUSHD    현재 디렉터리를 저장한 후 디렉터리를 바꿉니다.
RD       디렉터리를 지웁니다.
RECOVER  불량이거나 결함이 있는 디스크에서 읽을 수 있는 정보를 복구합니다.
REM      배치 파일 또는 CONFIG.SYS에서 주석을 기록합니다.
REN      파일 이름을 바꿉니다.
RENAME   파일 이름을 바꿉니다.
REPLACE  파일을 대체합니다.
RMDIR    디렉터리를 지웁니다.
ROBOCOPY       파일과 디렉터리 트리를 복사할 수 있는 고급 유틸리티입니다.
SET      Windows 환경 변수를 보여주거나, 설정하거나, 지웁니다.
SETLOCAL 배치 파일에서 환경 변경의 지역화를 시작합니다.
SC       서비스를 표시하거나 구성합니다(백그라운드 작업).
SCHTASKS 컴퓨터에서 실행할 명령과 프로그램을 예약합니다.
SHIFT    배치 파일에서 바꿀 수 있는 매개 변수의 위치를 바꿉니다.
SHUTDOWN 컴퓨터의 로컬 또는 원격 종료를 허용합니다.
SORT     입력을 정렬합니다.
START    지정된 프로그램이나 명령을 별도의 창에서 시작합니다.
SUBST    경로를 드라이브 문자로 지정합니다.
SYSTEMINFO  특정 컴퓨터의 속성과 구성을 표시합니다.
TASKLIST 서비스를 포함한 실행 중인 모든 작업을 표시합니다.
TASKKILL 실행 중인 프로세스나 응용 프로그램을 중지합니다.
TIME     시스템 시간을 보여주거나 설정합니다.
TITLE    CMD.EXE 세션에 대한 창의 창 제목을 설정합니다.
TREE     드라이브 또는 경로의 디렉터리 구조를 그래픽으로 화면에 표시합니다.
TYPE     텍스트 파일의 내용을 보여줍니다.
VER      Windows 버전을 보여줍니다.
VERIFY   파일이 디스크에 올바로 쓰였는지 검증할지
         여부를 지정합니다.
VOL      디스크 볼륨 이름과 일련 번호를 보여줍니다.
XCOPY    파일과 디렉터리 트리를 복사합니다.
WMIC     대화형 명령 셸 내의 WMI 정보를 표시합니다.

도구에 대한 자세한 정보는 온라인 도움말의 명령줄 참조를 확인하십시오.
소스만 압축 백업하는데 필요한 명령들은 몇 가지 없습니다. SET, FOR, DATE 들의 사용법만 알고 있으면 됩니다. 저도 이번에 FOR 명령을 유용하게 사용하게 되었습니다.

먼저 SET 명령은 환경변수에 값을 설정하는 명령입니다.

DATE 명령은 현재의 시스템 시간을 표시하고, 설정하는 명령입니다.

FOR 명령은 어떤 집합에 대하여 집합의 각 항목들을 차례로 끄집어 내어 처리할 수 있는 반복 명령문입니다.

각 명령들에 대한 자세한 설명은 도움말을 참조하시기 바랍니다.


7zip이란?

7zip은 무료로 공개중인 압축 유틸리티로 회사에서도 매우 유용하게 사용할 수 있으나, GUI가 한국 사람의 정서와는 약간 거리가 있는 것 같기는 하죠. 하지만 소스 백업에 있어선 없어선 안될 유틸리티입니다. 왜냐하면, 명령줄 실행 파일(7z.exe)이 있기 때문입니다. 다른 GUI 전용 압축 프로그램에는 명령줄 실행 파일이 없어서 배치 파일로 압축을 하고 싶어도 할 수가 없습니다. 7zip을 대체할 수 있는 압축 프로그램으로는 WinRAR가 있습니다. WinRAR도 명령줄 프로그램(rar.exe)을 제공합니다.

소스 자동 백업

다음은 필요한 소스만 자동으로 압축하여 백업하는 배치 파일의 소스입니다.

@edho off

SET ARCHIVE="C:\Program Files\7-Zip\7z.exe"
SET PARAMETERS=a -r -t7z -mx=9 -x!.svn

REM English OS = MM/DD/YYYY
REM FOR /F "tokens=2-6 delims=/ " %%i IN ('date /t') DO SET BACKUP_FILE=SrcBackup-%%k%%i%%j.7z
REM Korean OS = YYYY-MM-DD
FOR /F "tokens=1-4 delims=- " %%i IN ('date /t') DO SET BACKUP_FILE=SrcBackup-%%i%%j%%k.7z

%ARCHIVE% %PARAMETERS% %BACKUP_FILE% -ir!Bin\need1.dll -ir!Bin\need2.dll *.props
%ARCHIVE% %PARAMETERS% %BACKUP_FILE% -ir!Res\*.rc -ir!Res\app.ico -ir!Res\*h *.bat
%ARCHIVE% %PARAMETERS% %BACKUP_FILE% ReadMe.txt
%ARCHIVE% %PARAMETERS% %BACKUP_FILE% Database\
%ARCHIVE% %PARAMETERS% %BACKUP_FILE% Help\
%ARCHIVE% %PARAMETERS% %BACKUP_FILE% -x!Debug -x!Release -x!ipch -x!*.suo -x!*.sdf -x!*.user Prj\
%ARCHIVE% %PARAMETERS% %BACKUP_FILE% -x!*.exe Setup\
%ARCHIVE% %PARAMETERS% %BACKUP_FILE% -x!*.bak -x!*.old Src\

pause

위 배치 파일 소스에서 FOR 부분에서 날짜에 대한 surfix를 만듭니다. DATE 명령으로 얻은 날짜 정보를 구분하여 년월일을 추출하고, 이를 바탕으로 날짜 문자열을 만들어서 백업할 파일명에 덧붙이게 됩니다.
만약 7zip을 다른 경로에 설치했다면, 첫 번째 줄의 경로를 수정하면 됩니다.
-x! 파라미터는 해당 문자열을 포함한 파일이나 폴더는 압축에서 제외하게 됩니다. -x!.svn 으로 지정하여 Subversion 관련 파일들이 백업할 때 포함되지 않도록 합니다.
-ir! 파라미터는 추가로 압축해야할 파일들을 패턴으로 지정할 수 있습니다. -ir! 파라미터로 추가해야 관련 경로까지 포함하여 압축 백업하게 됩니다.
소스 백업에 필요한 부분에 위와 같은 배치 파일을 작성하고, 배치 파일을 실행하면 필요한 것들만 모아서 압축 백업하게 됩니다.

결론

이제까지 소스를 배치 파일을 이용하여 자동으로 백업 받는 방법을 설명하였습니다. 필요하신 분들은 유용하게 사용하시기 바랍니다. ^^
그 밖에 배치 파일을 이용하면 여러 가지 문제들을 자동화하여 손쉽게 처리할 수 있습니다. 예를 들자면, 불필요한 파일들을 한번에 삭제하고, 프로그램 전체를 새로 빌드하고, 패키징까지도 자동화를 할 수 있을 겁니다. 기회가 된다면 이런 주제로 배치 파일 만드는 방법에 대해서 포스팅 해보겠습니다. ^^


참고자료