[Subversion] 다양한 방법의 SVN 저장소 서비스 운영

SVN은 매우 추천할만한 Version Control 시스템입니다. 실제로 학교에서 프로젝트를 운영할때도 사용했었고 실무에서도 많이 접해오게 된 다방면으로 쓰이는 녀석입니다. 우선 SVN을 사용할때는 통합적으로 소스의 버젼관리를 위해 저장소(Repository)를 운영하게 되는데 24시간 운영되는 서버에서 데몬형식으로 서비스 되는 것이 일반적입니다. 가장 많이 쓰이게 되는 3가지 방법에 대해 알아보도록 하겠습니다.

* 일반 단일 데몬 형태

[code]/usr/bin/svnserve -d -r [저장소경로][/code]
일반적으로 가장 단순한 방법입니다. -d는 daemon의 약자로 데몬형태로 작동시키라는 말이됩니다. 곧바로 하나의 백그라운드 프로세스가 실행되어 svn:// 프로토콜로 접근할 수 있게 됩니다.

* inetd 형태

일반적으로 슈퍼데몬이라고 불리는 inetd(xinetd)에 얹혀 작동하게 되는 방식입니다. 서비스 운영을 슈퍼데몬에 위임하게 되므로 어찌보면 가장 간단하고 깔끔한 방식입니다.

[code]vi /etc/xinetd.d/svn[/code]
위와 같이 svn이라는 서비스를 추가해 줍니다. 파일안에는 다음의 내용을 작성하면 됩니다.

[code]service svn
{
        disable = no
        port = 3690
        socket_type = stream
        protocol = tcp
        wait = no
        user = root
        server = /usr/bin/svnserve
        server_args = -i -r [저장소경로]
}[/code]
user에는 적절히 원하는 사용자를 넣어주시면 됩니다. 보안상 root는 피하시는것이 좋습니다.
xinetd 데몬을 재시작해주시면 바로 사용이 가능해 집니다.

[code]service xinetd restart[/code]
* Apache(mod_dav_svn) 모듈 형태

어찌보면 가장 추천할만한 좋은 방법입니다. 그리고 가장 설정하기가 번거롭습니다. 이 작업은 아파치 웹서버를 직접 컴파일하여 사용하지 않고 기본 패키지에 들어있는 httpd-*.rpm을 사용하는 시스템으로 가정하겠습니다.

우선 httpd가 정상적으로 설치가 되어있는지 확인해 봅시다. 저의 테스트 머신은 엔터프라이즈리눅스 4입니다.
[code]rpm -qa | grep httpd
httpd-manual-2.0.52-41.ent.4
httpd-suexec-2.0.52-41.ent.4
httpd-devel-2.0.52-41.ent.4
httpd-2.0.52-41.ent.4[/code]
[이곳]에 접속하셔서 자신의 머신에 가장 적절한 버젼을 받도록 합니다. 될수 있는한 제공되는 rpm패키지들을 모두 다 설치하는게 좋습니다. subversion뿐만 아니라 mod_dav_svn 패키지를 설치하는 것이 이 작업의 키포인트 입니다.

/etc/httpd/conf.d 위치에 subversion.conf 파일이 생성됩니다. 해당 파일을 설정해 줍시다.
[code]LoadModule dav_svn_module     modules/mod_dav_svn.so

<Location /svn>
   DAV svn
   SVNPath [저장소경로]


   # Limit write permission to list of valid users.
   <LimitExcept GET PROPFIND OPTIONS REPORT>
      # Require SSL connection for password protection.
      # SSLRequireSSL


      AuthType Basic
      AuthName “Authorization Realm”
      AuthUserFile /home/.htpasswd
      Require valid-user
   </LimitExcept>
</Location>[/code]
위에서 참고하실점은 AuthUserFile옵션입니다. htpasswd파일은 아파치 패키지에 포함되어있는 htpasswd명령으로 만들 수 있습니다. (자세한건 구글링 해보시길)

이제 해당 서버에 http://[호스트아이피]/svn 으로 웹브라우저로 접속해 보시면 바로 탐색이 가능하다는 것을 알 수 있습니다. 또한 같은 주소로 SVN 체크아웃을 할 수 있습니다.

– 여러개의 저장소를 묶어서 사용할 시
다음의 두개의 저장소가 있다고 가정해 봅시다. 둘 다 /svn 하위에 존재하고 있습니다.


/svn/repo1

/svn/repo2
이경우 다음과 같은 설정을 사용하여 모두 묶어서 서비스 할 수 있습니다.

[code]<Location /svn>
   DAV svn
   SVNParentPath /svn
   SVNListParentPath on
</Location>[/code]