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) 스크립트를 설정하여 커밋 시 자동 코드 검증이나 알림 전송 등의 자동화 작업을 구성할 수 있습니다.