SVN SubVersion 설치 및 활용 (시리즈 강좌 - 02)

황제낙엽 2008.06.06 06:57 조회 수 : 300 추천:108

sitelink1 http://www.delmadang.com/community/bbs_v...amp;page=2 
sitelink2  
sitelink3  

개발환경 구축하기 - 9 : SVN 1

 
 그동안 이런저런 프로그램만 잔뜩 설치만 해댔습니다. 원활하게 설치가 완료돼셨는지 궁금하군요 뜻대로 되질 않으니 마음만 앞서 잘 알지도 못하는것을 괜스레 시작했다는 맘도 벌써부터 드는군요 ^^;;
 
8편에서 말씀 드렸다시피 SubVersion 부터 시작할랍니다. Serversion, TortoiseSVN, SVNManager 다들 설치 하셨죠? 일단 TortoiseSVN 이나 SVNManager 을 사용하기 앞서서 SerVersion 이 제공하는 유틸리티의 사용법 간단히 설명하고난 다음에 TortoiseSVN 을 사용하도록 하겟습니다.
 
아무래도 좋은 툴이 있다하더라도 기본적으로 제공하는 것들을 조금은 알아야 하지 않나 싶습니다. 비록 커맨드 라인 툴들이 사용하기는 불편해도 배포본에 들어있는것이니 어디가서나 사용할수 있느니 한번쯤은 사용해봐도 나쁘지 않다고 봅니다.
 
(아놔 글쓰는데 자꾸 폰트 설정해놓은게 초기화 되어버리네요 -.ㅡ;; 뭐 이래..)
 
우선 시작하기 앞서서 SubVersion 의 아키텍쳐를 한번 살펴볼까요? 어떻게 디자인되었는지 한번 봅시다.
 
subversion-rchitecture.gif

 

 
(후훗 그림파일을 업로드할수가 있군요...링크만 걸수 있는줄 알았는데...흠 한번에 업로드 할수 있는게 500k 인가?)

위와 같은 구조를 가지고 있습니다. 클라이언트 에서 저장소 에 접근하기 위해서 여러가지 프로토콜을 지원한다고 했는데 local 에서는
file:/// 프로토콜로 바로 접근할수가 있네요 svn:// 으로는 svnserve 를 통해야 하구요...

SubVersion 이 제공하는 툴들..(콤포넌트 라고 부르더군요) 을 살펴보면...

 
svn.exe
svnversion.exe
svnlook.exe
svnadmin.exe
svndumpfilter
mod_dav_svn.so
svnserve.exe

와 같은 콤포넌트들이 /bin 디렉토리에 들어 있습니다.

svn.exe 는 명령줄 클라이언트 툴입니다. 저장소를 확인할수도 있고 체크아웃, 임포트 기타등등의 작업을 합니다.
svnversion.exe 는 작업 사본(워킹 디렉토리에 체크 아웃된) 의 상태를 보기 위한 툴입니다.
svnlook.exe 는 저장소를 조회하기 위한 툴입니다.
조회하기 위한 툴입니다.
svnadmin.exe 는 저장소를  생성하고 관리하는 툴입니다.

svndumpfilter.exe 저장소의 덤프파일 포맷 스트림을 필터링하기 위한 툴입니다.
mod_dav_svn.so 는 아파치 서버의 확장모듈로서 . 아파치 웹서버를 통해서 저장소에 접근을 할수 있게 해줍니다
svnserve.exe 는 여러가지 네트워크를 통해서 다른 프로토콜 (예: svn://) 로 저장소에 접근할수 있도록 해주는 서버 프로그램 입니다.

모두 help 나 --help 인자를 주면 도움말이 출력되어 각종 옵션들의 사용법을 알수 있습니다.

일단 저장소 를 하나 만들어봅시다. 저장소란 소스파일이 저장되는곳으로 소스파일은 물론 변경사항들도 같이 저장됩니다. SubVersion 은 현재 두가지의 포맷을 지원하는데요 하나는 파일시스템이고 또 하나는 버클리디비(BDB) 를 사용합니다. 흠 둘의 장단점은 잘 모르겟고 전 BDB 포맷으로만 사용해봤습니다. 파일시스템이 좀더 안전하다고는 하는데 BDB에 비해서 속도가 약간 느리며 용량도 많이 차지 한다고 하더군요.

저장소를 만들기위해선 svnadmin.exe 를 사용합니다.

c:> svnadmin help

많은 옵션들이 있습니다. svnadmin help 옵션 하면 해당 옵션에 대한 정보를 얻으실수 있습니다. 목록을 보니 저장소를 생성하고 덤프하고 복구하고 뭐 그러는군요.

c:> svnadmin create d:worksvnreposdelmadang --fs-type bdb

아무런 메세지가 안나오고 프롬프트가 떨어진다면 성공입니다. d:worksvnreposdelmdang 이라는 저장소를 생성했습니다. 파일시스템은 bdb 를 사용하였구요 --fs-type 옵션을 빼고 하면 걍 일반 파일시스템 ( fsfs ) 을 사용한답니다. 흠 저장소의 루트 디렉토리 즉 d:worksvnrespos 디렉토리는 생성되어 있어야 합니다.

c: svn info file:///d:/work/svnrepos/delmadang

해보셔요...@@ 어쩌구 저쩌구 저장소의 정보 출력됩니까?

d:worksvnreposdelmdang 디렉토리에 가면 conf 를 비롯하여 몇개의 디렉토리 와 파일들이 생성되어 있는데요 data 디렉토리에 소스와 변경정보들이 담김니다. 그리고 conf 디렉토리에 보면 다음과 같은 파일이 있는데 authz, passwd, svnserve.conf 파일명을 보면 눈치 채셨겟지만 해당 저장소에 접근할때 인증을 받고 싶을때 사용합니다.

디폴트는 누구나 다 접근가능하며 읽고 쓰기가 가능합니다.

svnserve.conf 에서 익명과 등록된 사용자의 권한을 사용할지 사용한다면 어떤 권한을 줄지 그리고 사용자 목록파일과 비밀번호의 파일을 지정합니다.

authz 는 사용자 목록 파일로 해당사용자의 권한과 그룹을 지어줄수 있습니다.

passwd 는 사용자의 비밀번호가 담긴 파일이고요.

일단 저장소를 생성했는데... SubVersion 이 가지는 기본적인 저장소이 구조를 알 필요가 있을것 같군요 물론 그냥 써도 상관은없는데 보편적으로 다음과 같은 구조를 가지고 있습니다.

--trunk
--tags
--branchs

이렇게 세개의 디렉토리(전 이렇게 부릅니다. -.ㅡ)가 존재하는데 trunk 는 메인이 되는 디렉토리 입니다. 현재 작업하는 소스들을 저장한다고 보면 되겟죠.

tag 는 우리가 개발을 할때 버전업을 할때가 있죠? 마이너 버전업를 하든 메이저 버전업을 하든 이럴때 tag 로 분리를 시킵니다.

--tags
 --0.1
 --0.3
 --1.0

이런식으로요 물론 어떤 룰은 없습니다. 어떤 계기로 인해서 현재 작업하는것을 특별하게 분기할때 적절히 사용하면 되겟죠.

branchs 는...흠...하나의 프로젝트를 하다보면 자잘한것들이 따로 서브로 뺄 일이 생길수 있습니다. 예를 들어 특정 모듈을 따로 관리할 필요가 생긴다든가 할때요 그럴때 사용한답니다.

물론 각 디렉토리엔 서브디렉토리를 둘수 있습니다. 저런 큰 분류는 그냥 SubVersion(또는 버전관리 스스템) 에서 권장하는 관리 구조일뿐이고 꼭 따라할필요는 없습니다.

흠 일단 우리도 세개의 분류를 만들어 볼까요?


저장소에 디렉토리를 생성할때는 svn.exe 를 사용합니다.
 
c:> svn mkdir file:///d:/work/svnrepos/delmadang
 
(아 환경변수에 SVN_EDITIOR 을 설정해놨지요? 커밋로그를 작성할때 써야 합니다. ^^)
 
위와 같이 하면 SVN_EDITIOR 에서 설정한 에디터가 뜰껍니다. 대충 머라 써봅시다. 그리고 저장하시고 에디터를 종료하면 돼겟습니다. 저장안하면 로그 메세지가 저장되지 않았다면서 어쩔꺼냐고 물어봅니다. 로그를 반드시 저장해야 되는것은 아니지만 버전관리 시스템을 쓰는 이유를 생각한다면 로그를 작성하도록 합니다.
 

로그를 저장했다면 다음과 같은 메세지가 나옵니다.

커밋된 리비전 1

리비전은 버전관리시스템에서 커밋을 하면 일정한 규칙에 의해서 번호가 매겨집니다. SubVersion 은 파일하나 하나당 리비전이 붙질않고 파일 하나가 커밋되더라도 전체 리비전이 증가됩니다.

tags 와 brunchs 도 만들어 보아요~~~~

잘 만들어졌는가 확인해볼까요?

c:> svn list
file:///d:/work/svnrepos/delmadang

쫘쫜~~~ 생성했던 디렉토리가 보인다면....참 잘 하셨어요~~ 어때요 참 쉽죠? ( -.ㅡ;;;; 요거 중독이네..)

자 그런데
file:/// 프로토콜은 로컬에서만 된답니다. 원격지에서도 접속하고 싶은데 말이죠...윈도 서비스에 등록해서 데몬을 돌려봅시다. svnserve.exe 를 윈도 서비스에 등록하는 방법은 XP등에서 제공하는 sc.exe 유틸리티 로 등록하는 방법이나 SVNService 라는 유틸리티가 필요합니다.

sc.exe 는 NT Service Controller and services 로...2000 이상에선 기본적으로 들어있답니다. 없다구요? 흠 M$사이트에서 다운로드 받을수가 있는데...흠..다운로드 링크를 찾지 못하겟네요 -.ㅡ (알아서 찾아보세요..)

sc 는 서비스에 관련해서 여러가지 작업을 할수 있습니다. 자세한 사용법은 다음 주소를 참고 하세요


http://support.microsoft.com/kb/251192">>http://support.microsoft.com/kb/251192
 
sc 로 서비스로 등록하는 방법은 다음과 같습니다.
 
c:> sc svn.delmadang binpath= "c:devserverssvnsvnserve.exe --service -r d:worksvnreposdelmdang" displayname= "SVN 개발환경구축하기" depend= Tcpip
 
뭐 이정도만 해도 서비스목록에 추가가 됩니다. 주의하실점은 = 뒤에 공백이 한칸 있어야 합니다.

SVNService 유틸리티를 이용하는 방법은 우선 SVNService 를
http://www.edith.co.kr/source/SVNService.zip">>http://www.edith.co.kr/source/SVNService.zip 을 다운로드 받아 svn/bin 디렉토리에 압축을 해제 합니다.

c:> SVNService -install --daemon --root "d:worksvnreposdelmadang"

일케 하면 된답니다.  (얘는 서비스 목록에 SVNService 라는 이름으로 등록됩니다.)
 
관리도구-서비스 에서 SVN 개발환경구축하기 라고 올라왔는지 확인해보셔요 서비스 실행은 쉘에서 net start svn.delmadang 으로 하셔도 되고 아니면 서비스에서 등록정보에서 시작을 선택하시면 되겟습니다. 부팅될대 자동으로 시작하고 싶다면은 시작유형을 자동으로 해두시면 되고요....
 
서비스가 실행되었다면 file:/// 프로토콜 대신 svn:// 프로토콜로 저장소에 접속하실수 있답니다. 한번 해볼까요?
 
c:> svn info svn://localhost/delmadang
 
쫘잔`` 원하는 메세지가 나오나요?
 
오늘은 여기까지 하고요...다음번 시간에는 계정을 생성하고 권한설정이랑 실제로 소스를 넣고 빼고 지지고 볶구 해봅시다.
 
그럼...