MS Windows에 Subversion을 설치할 일이 생겨서 설치했다. 이 글은 설치하는 방법 및 테스트를 위한 나만의 기록이다. 다른 방법도 얼마든지 있지만 모두 생략한다.

 

 

Subversion 서버 구축하기

 

1. 설치 목표

Http 프로토콜로 SVN 서비스 지원하도록 서버측 환경을 만드는 것을 목적으로 한다. svn 프로토콜이나 https로 하는 방법은 생략한다. 이 목표를 달성하기 위해 다음과 같은 프로그램을 다운로드 받아 설치해야 한다.

 

- Apache 웹서버 2.2.x

- Subversion 1.6.x

- TortoiseSVN 1.6.x

 

2. Apache 웹서버 설치 하기

http://httpd.apache.org/download.cgi 에서 Openssl을 지원하는 Win32 Binary 설치프로그램을 다운로드 받아 설치한다. 현 최신 버전인 apache_2.2.11-win32-x86-openssl-0.9.8i.msi를 받아 설치함

 

3. Subversion 서버 설치

http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=8100 에서 Apache 2.2 모듈을 포함하는 최신 SVN 바이너리 프로그램을 받는다. 현 최신 버전인 Setup-Subversion-1.6.3.msi를 받아 설치함

 

4. TortoiseSVN 설치 하기

이 프로그램은 클라이언트에서 주로 사용한다. 콘솔창에서 svnadmin create와 같은 명령어를 이용해 저장소 만드는 불편함을 없애기 위해 설치한다.

 

http://tortoisesvn.net/downloads 에 가서 다운로드 받아 설치한다. 현 최신 버전인 TortoiseSVN-1.6.3.16613-win32-svn-1.6.3.msi를 설치하면 된다.

 

5. SVN 저장소(Repository)를 생성한다.

저장소를 만들기 위해svnadmin create 명령어를 콘솔창에서 하는 방법도 있지만 방금 설치한 TortoiseSVN을 이용하면 쉽게 만들 수 있다. 먼저 아래 그림처럼 임의의 위치에 저장소 폴더를 만든다. 그리고 오른쪽 마우스 버튼을 눌러 컨텍스트 메뉴에서 TortoiseSVN을 선택한 뒤 Create repository here를 선택하면 된다. 그럼 The repository was successfully created 메시지가 뜨면서 저장소가 만들어진다. 테스트를 위해 저장소를 C:\svn 에 만들었다.

 

 

 

만들어진 저장소에 들어가보면 아래와 같은 내용이 만들어진 것을 확인할 수 있겠다.

 

conf 폴더 안에 있는 authz, passwd, svnserve.conf를 설정하여 이 저장소에 접근할 수 있는 권한 및 운영제반 사항을 설정할 수 있다. http 프로토콜로 서비스를 할 것이므로 authz 설정만 하면 된다. 즉, passwd와 svnserve.conf는 건드릴 필요가 없다. 이들은 svn프로토콜을 이용하면 반드시 설정해야한다.  설정 방법은 다음에 설명한다.

 

6. Apache 서버에 SVN 모듈 등록

 

Subversion의 설치 폴더(C:/Program Files/Subversion)에 bin폴더에 있는 mod_dav_svn.so와 mod_authz_svn.so 파일을 Apache의 modules 폴더에 복사한다.

 

그 다음 Apache 설치 폴더에 conf 폴더에 있는 http.conf를 아래와 같이 편집한다.

 

# 아파치 모듈 설정 부분에서 다음 부분의 주석을 푼다.
LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so

 

# 다음과 같은 SVN 모듈을 추가한다.
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

 

7. Apache 가상 호스트 설정

 

가상호스트는 말그대로 가상적인 호스트를 의미한다. 앞으로 만들 SVN 저장소에 접근할 수 있도록 가상으로 정한 주소를 이용해 Apache에 설정하는 것을 의미한다.

 

여기서 Apache 2.2 버전을 설치했으므로 http.conf에 아래 부분 처럼 가상 호스트 관련 설정파일을 포함하도록 되어 있다. Include 앞에 #을 지워준다.

 

# Virtual hosts
Include conf/extra/httpd-vhosts.conf

Apache 설치폴더에서 conf/extra/httpd-vhosts.conf 를 열어서 다음과 같이 추가한다.

 

############################################
# Sample 테스트용 SVN 가상호스트
############################################
<VirtualHost *:80>
    <Location /svn/test>
        DAV svn
        SVNPath "C:\svn"
        #SVNParentPath "C:\svn"
        #SVNListParentPath On
        AuthType Basic
        AuthName "SVN Test Repository"
        AuthUserFile "c:\svn\htpasswd"
        AuthzSVNAccessFile "c:\svn\conf\authz" 
        Require valid-user
    </Location>
</VirtualHost>

위 설정은 http://주소/svn/test 로 접근하게 되면 C:\svn 을 SVN 저장소 위치로 찾게 해준다는 의미가 내포되어 있다.

 

AuthUserFile은 사용자 목록 위치이며 AuthzSVNAccessFile은 접근권한 파일을 의미한다. 주석 처리된 SVNParentPath는 각 프로젝트의 저장소 디렉토리가 아닌 그 바로 위의 디렉토리를 뜻한다. http://주소/svn/test로 접속하여 C:\svn 뿐 아니라 http://주소/svn/test/other 로 하면  C:\svn\other 로도 접근이 가능해지는 것이다.

 

Require valid-user는 인증된 사용자만 사용할 수 있다. 만약 체크아웃(check-out)은 아무나(Anonymous)가 할 수 있게 하고 커밋(commit)은 지정된 사용자만 할 수 있게 하려면 Require valid-user 대신 아래처럼 사용할 수 있다.

 

############################################
# Sample 테스트용 SVN 가상호스트
############################################
<VirtualHost *:80>
    <Location /svn/test>
        DAV svn
        SVNPath "C:\svn"
        #SVNParentPath "C:\svn"
        #SVNListParentPath On
        AuthType Basic
        AuthName "SVN Test Repository"
        AuthUserFile "c:\svn\htpasswd"
        AuthzSVNAccessFile "c:\svn\conf\authz"  
        <LimitExcept GET PROPFIND OPTIONS REPORT>
            Require valid-user
        </LimitExcept>
    </Location>
</VirtualHost>

 

8. Apache 사용자 인증 파일 생성

 

위에서 AuthUserFile의 경로를 설정할 것을 보았을 것이다. 이제 그 파일을 만들자.

 

http 프로토콜을 사용하여 SVN에 접근하므로 Apache의 htpasswd를 이용해 사용자 인증을 한다.

 

htpasswd 파일을 생성은 다음과 같이 한다.

{아파치 설치 폴더}\bin\htpasswd -c htpasswd 사용자계정

 

htpasswd 파일에 사용자 추가 명령

{아파치 설치 폴더}\bin\htpasswd htpasswd 사용자계정

 

위와 같은 방법으로 사용자 계정을 추가해보자.

C:\svn\conf>C:\Apache\Apache2.2\bin\htpasswd -c htpasswd jidolstar
Automatically using MD5 format.
New password: ********
Re-type new password: ********
Adding password for user user1

만들어진 c:\svn\htpasswd 파일을 보면 아래와 같이 추가 되어 있는 것을 확인할 수 있을 것이다.

 

jidolstar:$apr1$IswHvHiJ$rBcOZc8bs59IUJIC/hWgO.

 

중요한 것은 -c는 한번만 사용한다. 안그러면 이전 내용이 지워져 버린다.

 

9. Subversion 접근 권한 파일 설정

c:\svn\conf 폴더에 보면 authz, passwd, svnserve.conf 파일이 있다. svn 프로토콜로 접근하지 않을 것이므로 authz만 수정하면 된다.

 

다음은 authz 파일 접근 권한 설정의 예이다.

 

[groups]
group1 = user1,user2
group2 = user3,user4,user5

 

[/]
* = r

 

[/project1]
@group1 = rw
@group2 = r

 

[/project2]
@group1 = rw
@group2 = r

무엇을 의미하는가? 2개의 그룹이 있다. 그룹 group1에는 사용자 1,2가 있고 그룹  group2에는 사용자 3,4,5가 있다. 이들은 http://주소/svn/test로 접근했을때 모두 read할 수 있으나 write권한은 없다. http://주소/svn/test/project1 에는 group1은 read/write를 다할 수 있으나 group2는 read만 할 수 있다. project2는 그 반대이다. 이런 식으로 svn에 접근 권한을 설정할 수 있는 것이다. 앞서 설명했지만 이 파일은 앞서 수정했던 가상 호스트 설정에서 Apache가 실행될 때 로드되어 진다.

 

본인은 앞서 jidolstar 아파치 계정을 하나 만들었으므로 다음과 같이 authz를 설정했다.

 

[groups]
group1 = jidolstar

 

[/]
* = rw

 

10. 웹브라우저에서 SVN 서버에 http로 접근하기

아래와 같은 윈도우 맨 우측아래 트레이 아이콘을 두번 클릭해 창이 뜨면 아파치를 구동하자. 미리 구동되어 있는 경우에는 새로운 설정을 로드해야하므로 stop했다가 다시 start한다. 위 설정을 잘 했다면 에러없이 구동이 될 것이다.

 

먼저 아파치가 잘 구동되는지 확인한다. 아래와 같이 창이 뜨면 정상이다. (참고로 이 페이지는 {아파치 설치경로}\htdocs에 있는 index.html 파일이다.)

 

 

이제 http://localhost/svn/test 로 접속해보자. 아래와 같은 인증창이 나오면 등록했던 사용자계정정보를 넣자.

 

인증이 완료되면 아래와 같은 화면이 나왔으면 성공이다.

 

이것으로 SVN 서버 구축을 모두 완료했더 테스트 까지 마쳤다.

 

여기서는 c:\svn에 저장소를 만들었지만 사람마다 다른 곳에 저장소를 만들고 싶을 것이다. 원하는 곳에 저장소를 만들어 테스트를 꼭 해보길 바란다. 가상호스트는 중복으로 만들 수 있으니 여러개의 저장소를 만드는 것도 가능하다.

 

 

Subversion 서버에 HTTP로 접속해 사용해 보기

 

SVN 서버는 모두 구축이 되었다. 이제 개인 소스 관리를 위한 테스트를 해보자. 만약 다른 컴퓨터에서 테스트 해보고 싶다면 그 컴퓨터에 TortoiseSVN 을 설치하길 바란다.

 

1. 체크아웃(check-out)

먼저 SVN 서버에 c:\svn에 있는 자료를 첫번째로 가져오는 일을 해야할 것이다. 이때 하는 일이 check-out이다. 바탕화면에 TestSVN 폴더를 만들어보자. 그런다음 아래 그림처럼 SVN Checkout를 실시한다.

 

그럼 아래처럼 Checkout 창이 뜬다. 우리는 http://localhost/svn/test 로 접속해서 이전에 만들어진 저장소 C:\svn에 있는 내용을 읽어올 수 있다고 했다. 아래처럼 URL of repository에 이 URL을 적고 OK버튼을 누른다.

 

 

브라우져에서 접속할때와 마찬가지로 인정절차가 필요하다. username과 password를 넣자. 다음부터 이 절차를 생략하고 싶다면 Save authentication을 check한다.

 

 

아래와 같이 Completed 가 나오면 완료가 된것이다. 지금은 아무 내용이 없다. ^^;

 

바탕화면에 만든 TestSVN 폴더에 보면 .svn 이 생성된다. .svn은 TestSVN이 접속한 저장소에 대한 정보를 가지고 있다. 앞에 점(.)이 있기 때문에 폴더옵션에서 숨김 파일 및 폴더 표시를 해주어야 보인다. 그렇지 않으면 TestSVN은 빈폴더처럼 보일것이다.

 

 

2. 커밋(commit)

체크아웃 한 소스를 수정, 파일 추가, 삭제 등을 한 뒤 저장소에 저장하여 갱신 하는 것이다. 커밋을 하면 전체 리비전이 1 증가하게 된다.

 

해보자. 앞에서 체크아웃한 TestSVN 폴더 내로 가서 tags, trunk, branches 폴더를 만든다. 또 각각의 폴더안에 tags.txt, trunk.txt, branches.txt를 만들어 본다. ? 표가 표시된 것은 이 파일이 어떤 상태인지 모른다는 것을 의미한다.

 

모두 선택한 뒤 아래처럼 TortoiseSVN > Add를 선택해서 커밋할 목록으로 등록한다.

 

이제 ?표에서 벗어나 + 표시로 바뀌었다. SVN 서버로 커밋할 준비가 된 것이다.

 

모두 선택한 뒤 아래 화면처럼 SVN Commit을 실시한다.

 

아래 그림의 창이 뜨면 SVN으로 전송할 목록이 선택되어 있고 Message를 남길 수 있게 된다. 이런식으로 만들어진 자료를 SVN로 전송할 수 있다. 지금은 추가된 내역만 올라가지만 만약 폴더 이름이 바뀌거나 위치를 옮기거나 삭제 되었거나 했을때는 added가 아니라 deleted, moved 이런 표시가 붙을 것이다.

 

아래 화면처럼 추가했던 + 표시는 없어지고 체크표시가 되었다. 정상적으로 SVN 서버에 올라간 것이다.

 

trunk를 선택하고 오른쪽 마우스 키를 눌러 Tortoise > show log를 보자. 아래처럼 Revision 번호가 1로 되어 있는 것을 확인할 수 있으며 그에 대한 Message와 함께 Commit된 것들도 확인할 수 있다.

 

 

TestSVN/trunk/trunk.txt 파일을 열어 내용을 입력하고 저장해보자. 아래처럼 !(느낌표) 표시가 될 것이다.

 

이것을 커밋해보자. 기존에 있는 것을 수정했으므로 상태는 modified가 되어 있다. 커밋하면 이제 리비전(revision)은 1에서 2로 바뀌게 된다.

 

브라우저에서도 확인해보자. http://localhost/svn/test 로 접속해서 아래와 같은 화면을 확인하자. add, modify 두번 처리해서 커밋했으므로 Revision이 2이다.

 

 

3. 업데이트(Update)

 

체크아웃을 해서 소스를 가져 왔더라도 다른 사람이 커밋(추가, 삭제, 이동, 변경등)을 하였다면 소스가 달라졌을 것이다. 이럴 경우 업데이트를 하여 저장소에 있는 최신 버전의 소스를 가져온다. 물론 바뀐 부분만 가져온다.

 

다른 사람이 변경한 내용이 있더라도 내가 변경한 내용이 따로 있다면 그 파일이나 폴더는 무시한다. 그러므로 항상 작업을 할 때는 먼저 업데이트를 하고 난다음 수정, 추가, 삭제, 이동의 작업을 완료후에 커밋해야 다른 사람 변경내용과 충돌이 일어나지 않는다. SVN은 겹쳐서 작업해서 서로 소스가 달라지는 경우 충돌보고를 해주기 때문에 안심하고 작업할 수 있다.

 

업데이트 방법은 매우 단순하다. 아래 그림처럼 SVN Update만 해주면 된다.

 


정리하며

 

윈도우 환경에서 Subversion 서버를 구축하는 방법과 사용법을 간단히 논했다. 사실 아주 일부분만 설명되어 있는 것이고 실무에서는 더욱 다양하게 쓰이게 된다. 개발자의 경우 TortoiseSVN을 이용한다기 보다 Eclipse나 Flash Builder 등에 SVN 플러그인을 설치하여 개발 코드 관리를 하는 것처럼 사용한다.

 

외부 컴퓨터에서 접속이 가능하게 하려면 반드시 80번 포트의 방화벽을 해제해주어야 한다.

 

쉬운 내용이지만 한번 정도는 정리할 필요가 있다고 생각했다. 막상 작성해보니 내용이 너무 길다. ^^;

 

 

글쓴이 : 지돌스타(http://blog.jidolstar.com/552)

+ Recent posts