Apache Subversion 1.9.7 버전 관리 시스템 구축 및 활용 가이드

Apache Subversion 1.9.7 개요 및 주요 기능

Apache Subversion(SVN) 은 파일 및 디렉터리의 변경 이력을 체계적으로 관리하기 위해 설계된 오픈 소스 버전 관리 시스템입니다. 2000 년 초반 출시된 이후 소프트웨어 개발 및 콘텐츠 관리 분야에서 표준 도구로 자리 잡았습니다. 특히 1.9.7 버전은 안정성이 검증된 릴리스로, 혼합_branch_지원 강화, 파일 전송 프로토콜 최적화, 디렉터리 속성 관리 기능 향상 등의 개선 사항이 포함되었습니다.

이 버전은 단순한 소스 코드 관리뿐만 아니라 문서 버전 관리, 프로젝트 자산 추적 등 다양한 환경에서 활용 가능합니다. 대규모 팀 협업 시 데이터 무결성을 유지하면서도 유연한 워크플로우를 지원하므로 중견 이상의 조직에서 선호하는 도구입니다.

서버 설치 및 환경 설정

필수 의존성 및 설치 절차

Subversion 서버를 구축하기 전에 운영체제에 필요한 라이브러리가 준비되어 있어야 합니다. Linux 기반 환경에서는 APR(Apache Portable Runtime) 라이브러리 및 관련 유틸리티가 필수적입니다.

Debian 계열 (Ubuntu 등) 시스템에서는 다음 명령어로 의존성 패키지를 설치할 수 있습니다.

sudo apt install subversion libapache2-mod-svn libapr1 libaprutil1 libdb5.3 libserf-1-1

Red Hat 계열 (CentOS, Fedora 등) 을 사용하는 경우 yum 또는 dnf 패키지를 이용합니다.

sudo yum install subversion mod_dav_svn

설치 완료 후 버전 정보를 확인하여 정상적으로 도입되었는지 검증합니다.

svn --version
apr-1-config --version

저장소 생성 및 서비스起動

패키지 설치가 끝났다면 실제 버전 관리 저장소 (Repository) 를 생성해야 합니다. 다음 명령어는 지정된 경로에 새로운 저장소를 초기화합니다.

svnadmin create /var/svn/repos/project_alpha

Apache HTTP 서버를 통해 저장소를 노출하려면 웹 서버 데몬을 시작합니다.

sudo systemctl start apache2

저장소 접근 여부를 확인하기 위해 목록을 조회해 봅니다.

svn list file:///var/svn/repos/project_alpha

만약 svnserve 데몬을 직접 사용할 경우 다음과 같이 백그라운드 모드로 실행합니다.

svnserve -d -r /var/svn/repos/

서버 구성 및 접근 제어

설정 파일 구조 분석

Subversion 서버의 주요 설정은 일반적으로 /etc/apache2/mods-available/dav_svn.conf 또는 배포판에 따른 유사 경로에 위치합니다. 이 파일은 저장소 경로, 인증 방식, 접근 권한 등을 정의합니다.

<Location /svn-repo>
    DAV svn
    SVNPath /var/svn/repos/project_alpha
    AuthType Basic
    AuthName "Project Alpha Repository"
    AuthUserFile /etc/svn/passwd_file
    Require valid-user
</Location>

위 설정에서 Location 은 웹 접근 경로를, SVNPath 는 실제 저장소 물리 경로를 의미합니다. 인증 파일 경로는 AuthUserFile 에 명시합니다.

사용자 인증 및 권한 관리

기본 인증 (Basic Authentication) 을 설정하려면 htpasswd 유틸리티를 사용하여 사용자 계정 파일을 생성합니다.

htpasswd -cb /etc/svn/passwd_file admin_user

권한 세분화를 위해서는 authz 파일을 편집하여 사용자 그룹별读写权限을 부여합니다.

[groups]
developers = dev_kim, dev_lee
managers = lead_park

[/]
@developers = r
@managers = rw

[/trunk]
@developers = rw

이 예시는 개발자 그룹은 루트 directory 에서 읽기만 가능하지만, trunk 경로에서는 쓰기 권한을 가지도록 제한합니다. 조직의 보안 정책에 따라 경로별 권한을 세밀하게 조정할 수 있습니다.

저장소 구조 및 작업 복사본 관리

표준 저장소 레이아웃

효율적인 버전 관리를 위해 저장소 내부 구조는 일반적으로 trunk, branches, tags 세 가지 디렉터리로 구성하는 것이 권장됩니다.

  • trunk: 주 개발 라인이 위치하는 곳으로 항상 안정적인 상태를 유지해야 합니다.
  • branches:新功能 개발이나 버그 수정을 위한 분기된 작업 공간입니다.
  • tags: 특정 릴리스 시점의 스냅샷을 저장하여 변경되지 않도록 합니다.

작업 복사본 (Working Copy) 초기화

개발자는 서버의 저장소를 로컬 환경으로 가져와야 합니다. 이를 체크아웃 (Checkout) 이라고 합니다.

svn checkout file:///var/svn/repos/project_alpha/trunk ./local_project

로컬에서 파일을 수정한 후 변경 사항을 서버에 반영하려면 커밋 명령을 사용합니다. 제출 전에는 항상 최신 상태를 유지하기 위해 업데이트를 수행하는 것이 좋습니다.

svn update
svn commit -m "로그인 모듈 기능 추가"

특정 파일을 독점적으로 편집해야 할 경우.lock_기능을 활용할 수 있습니다.

svn lock config/database.yml
svn unlock config/database.yml

브랜치 전략 및 병합 워크플로우

브랜치 생성 및 활용 목적

브랜치는 주 개발 라인에 영향을 주지 않고 독립적인 작업을 수행할 수 있게 합니다. 주요 사용 사례로는 새 기능 개발, 긴급 핫픽스, 장기적인 리팩토링 등이 있습니다.

명령어를 통해 trunk 에서 새로운 브랜치를 복사하여 생성합니다.

svn copy http://svn.server/repos/project_alpha/trunk \
         http://svn.server/repos/project_alpha/branches/feat-user-login \
         -m "사용자 로그인 기능 개발을 위한 브랜치 생성"

생성된 브랜치로 전환하여 작업을 진행하며, 주기적으로 trunk 의 변경 사항을 병합하여 충돌 가능성을 줄여야 합니다.

병합 (Merge) 및 충돌 해결

개발이 완료된 브랜치의 내용을 trunk 로 통합하는 과정을 병합이라고 합니다. 먼저 작업 복사본을 최신 상태로 업데이트한 후 병합 명령을 실행합니다.

svn merge http://svn.server/repos/project_alpha/branches/feat-user-login

병합 과정에서 동일한 파일의 같은 줄이 수정된 경우 충돌이 발생합니다. 이 경우 편집기를 통해 수동으로 코드를 수정한 후, 해결 완료 표시를 합니다.

svn resolve --accept=working src/auth/login.py
svn commit -m "브랜치 병합 및 충돌 해결"

병합 후에는 반드시 테스트 스위트를 실행하여 기존 기능이 손상되지 않았는지 검증해야 합니다.

고급 도구 및 클라이언트 활용

로그 분석 및 이력 추적

변경 이력을 상세히 조회하려면 로그 명령어를 사용합니다. -v 옵션을 추가하면 변경된 파일 목록까지 확인할 수 있습니다.

svn log -v

특정 라인이 누가 언제 수정했는지 확인하려면 blame 명령어를 활용합니다.

svn blame src/main.c

그래픽 클라이언트 도구

명령어 인터페이스 외에 TortoiseSVN 과 같은 그래픽 기반 클라이언트를 사용하면 파일 탐색기에서 직관적으로 버전 관리 작업을 수행할 수 있습니다. 설치 후 폴더 우클릭 메뉴를 통해 체크아웃, 커밋, 로그 조회等功能을 쉽게 이용할 수 있습니다. 또한, 훅 (Hook) 스크립트를 설정하여 커밋 시 자동 코드 검증이나 알림 전송 등의 자동화 작업을 구성할 수 있습니다.

태그: apache-subversion svn-configuration repository-management svn-branching tortoisesvn

8월 20일 17:01에 게시됨