본문 바로가기
서버구축 (WEB,DB)

서브버전(Subversion 1.2.2)의 개략적인 소개와 사용법

by 날으는물고기 2009. 7. 10.

서브버전(Subversion 1.2.2)의 개략적인 소개와 사용법

서브버전(Subversion)의 개략적인 소개와 사용법에 대해서 정리한다.

소개

서브버전의 기본적인 개요는 What is Subversion?(번역본: Subversion을 이용한 버전 컨트롤: Part 1. 소개)를 참고하도록 한다. 또한 오라일리의 온라인 출판물인 Online Versions of the Book를 참고하여 서브버전의 자세한 내용을 참고할 수 있다. 여기서는 간략하게 기술한다.

서브버전(Subversion)은 CVS를 대체하기 위해 만들어진 자유 소프트웨어 버전 관리(제어) 시스템이다. 명령행 인터페이스에서는 사용하는 명령어를 따서 svn이라고 줄여서 부르기도 한다. 서브버전은 버전 지정으로 변경되는 이름, 디렉토리 및 메타데이터 그리고 원자적 커밋1)(atomic commit) 및 HTTP/HTTPS를 통한 원격 액세스와 같이 CVS에서 제공하지 않은 여러 가지 중요한 기능을 지원한다. 또한 CVS에 비해 효율적인 브랜치(branch), 태그(tag)의 작성으로 응답시간이 많이 향상되었다.

반가운 것은 서브버전의 사용법이 CVS와 매유 유사2)하므로 CVS를 사용해봤다면 쉽게 접근할 수 있다는 것이다.

CVS와 상대적으로 좋아진 기능

  • 원자적 커밋(여러 파일을 커밋 중 하나라도 실패하면 전체를 롤백).
  • 이진 파일을 보다 효율적으로 컨트롤(space-efficient binary-diff storage 사용).
  • 소스 저장소의 크기에 상관없이 일정한 시간안에 branching이나 tagging.
  • 파일 이름 변경, 이동, 삭제해도 revision history를 유지.
  • 디렉토리도 버전 관리 가능(디렉토리 전체를 빠르게 옮기거나 복사할 수 있으며, revision history도 그대로 유지).
  • HTTP 기반 프로토콜.
  • 양방향 데이터 전송으로 네트워크 소통량 최소화.
  • 트리별, 파일별 접근 제어 리스트(ACL).
  • 저장소 및 프로젝트별 환경 설정 가능.
  • 커밋 통지 메일 스크립트를 기본으로 제공.

서브버전의 아키텍처

서브버전의 주요 컴포넌트 요소

  • svn: 명령줄 클라이언트 프로그램.
  • svnversion: 작업 사본의 상태를 보기 위한 프로그램.
  • svnlook: Subversion의 저장소를 조회하기 위한 도구.
  • svnadmin: Subversion의 저장소를 만들거나 수정, 복구하기 위한 프로그램.
  • svndumpfilter: Subversion 저장소 덤프파일 포맷 스트림을 필터링하기 위한 프로그램.
  • mod_dav_svn: 아파치 HTTP 서버를 위한 플러그인 모듈. 네트워크에서 리파지터리를 다른 사람들도 사용할 수 있게 해준다.
  • svnserve: 독립실행 서버 프로그램으로 데몬 프로세스로 실행하거나 SSH에 의해 호출되는 형태로 이용가능하다. 리파지터리를 네트워크상의 다른 사람들이 이용할 수 있게 해준다.

Subversion 설치

Window에 Subversion 설치

Subversion Packages에서 대상 시스템에 따라 적절한 패키지를 다운로드 할 수 있다. 글을 작성하고 있는 현재 시점의 Subversion 최신 버전은 1.4.4이다. 여기서는 윈도우(Windows NT, 2000, XP and 2003) 기반의 IIS를 전제로 하여 설치할 것이므로 Windows binaries를 다운로드 하도록 한다(Apache를 사용할 경우 Win32 packages built against Apache 2.2를 다운로드 한다. 단, Apache 2.2.4 이상이 필요하다).

별 의미는 없지만 설치 과정 전체를 편집하여 붙여본다(좌→우, 위→아래 순). ;-)

 

환경 설정

환경 변수
  • installer를 사용하지 않고 zip 파일로 설치한 경우라면 시스템 path에 %programfiles%\subversion\bin\, 경로를 추가할 필요가 있다.
  • 시스템 환경 변수에 SVN_EDITOR를 추가한다. 값은 C:\windows\notepad.exe 등이 될 수 있다.
Windows Service Support for svnserve

Subversion 1.4 이후 버전 부터 Windows Service로 사용 가능하다. 1.4 이전 버전이라면 하단에 설명할 유용한 도구가 필요할 수 있다.

svnserve can now be run as a native Windows service. This means that the
service can be started at system boot, or at any other time, without the
need for any wrapper code to start the service.

서비스를 생성하기 위해서는 SC.EXE를 사용하면 된다.

 sc create <name>
    binpath= "c:\svn\bin\svnserve.exe --service <svn-args>"
    displayname= "Subversion Repository"
    depend= Tcpip

예를 들면 다음과 같이 사용할 수 있다(자세한 설명은 이것을 참고한다).

sc create svn.local 
   binpath= "\"c:\program files\subversion\bin\svnserve.exe\" --service --root D:\svnrepo" 
   displayname= "Subversion Repository" 
   depend= Tcpip 
프로토콜

다음 프로토콜 중 하나를 사용하도록 Subversion 서버를 구성할 수 있다.

  • svn프로토콜은 독립 실행형 Subversion 서버(svnserve)에서 사용하는 상태 유지형 경량 프로토콜이며 안전한 버전인 이 svn+ssh는 ssh기반 터널링을 사용한다.
  • http프로토콜은 WebDAV확장에 기반을 두고 있으며 주로 Apache HTTP 서버에 모듈로 배포된다. 이 안전한 버전은 https를 사용하며 dev2dev CodeShare에서 Subclipse를 설치할 때 사용하는 프로토콜이다.
  • 파일 프로토콜은 로컬로 제공되는 Subversion 리포지토리(예: 공유 드라이브상의 레포지토리 등)에 액세스하는 데 사용되며 가장 비효율적인 방법이라 할 수 있다.

유용한 도구

SVN1-Click Setup

제목 그대로 SVN을 한번 클릭하여 설치할 수 있는 프로그램이다. SVN1-Click Setup에서 다운로드 받을 수 있으며, 프로그램을 실행하면 Subversion을 설치하고 저장소 및 사용자 설정, 윈도우즈 서비스 등록, TortoiseSVN 까지 한번에 설치할 수 있다. 현재 이글을 쓰는 시점의 최신 버전은 1.4.2(이 버전에 포함된 Subversion 및 TortoiseSVN는 가장 최신 버전은 아님을 참고)이다.

SVNSERVER Manager

Windows용 Subversion의 svnserve.exe 매니져이다. svnserve.exe는 Subversion의 svn:/ / 프로토콜 서버로 SVNSERVER Manager를 사용하여 svnserve.exe를 편리하게 사용할 수 있도록 도와준다. SVNSERVE Manager는 여기에서 다운로드 할 수 있다.

SVN Service Wrapper for Windows

SVN Service Wrapper for Windows은 서브버전을 Win32 서비스로 관리할 수 있게 해준다. SVN Manager는 윈도우 세션 로그인을 해야지만, Subversion을 자동으로 띄워줄 수 있다. 반면 Subversion을 Win32 서비스로 등록해 놓으면 세션 로그인 여부와 상관없이 자동으로 실행된다. SVN Service Wrapper for Windows는 여기에서 다운로드 할 수 있다.

SVNService

SVN Service Wrapper for Windows와 마찬가지로 SVNService를 사용하여 서브버전을 Win32 서비스로 등록할 수 있다. 다음 사이트를 참고한다.

Client 설치

서브버전 클라이언트를 통해 보다 쉬운 방법으로 버전 관리 대상을 Checkout 할 수 있다. 단, 프로젝트의 Subversion 저장소에 본인의 작업 내용을 반영하고 싶다면, 반드시 프로젝트의 참여자로써 “쓰기” 권한을 가지고 있어야 한다.

서브버전 클라이언트는 기본적인 서브버전 명령줄 클라이언트(svn)외에 TortoiseSVN, RapidSVN, <oXygen/> SVN Client 등이 있다. 그리고 이클립스 플러그인 모듈로는 Subclipse, RadRails, Subversive 등이 있다. WebSVN은 웹을 통한 쉬운 서브버전 뷰를 제공한다. WebSVN의 최신 버전은 여기에서 다운로드 할 수 있다. 참고로 이외의 웹 클라이언트로는 ViewCVS, ViewSVN, SubView 등이 있다.

코드를 공유하기 위해서 명령줄 SVN 클라이언트와 Tortiose SVN for Windows를 설치하는 방법에 대해서도 간단히 설명하겠지만, IDE에서 바로 서브버전 저장소와 연동하도록 하는 것도 좋은 방법이다. :!:

Subclipse 설치

Eclipse IDE 내에서 서브버전, 버전 제어 시스템과 상호 작용할 수 있도록 Subclipse를 설치, 구성 및 사용하는 방법에 대해 설명한다. Subclipse 플러그인을 사용하여 Eclipse 플랫폼에 대한 오픈 소스 확장을 통해 개발자 생산성을 높이고 실수의 여지를 없애며 개발 팀 내의 의사소통을 향상시킬 수 있다.

설치는 Installation Instructions을 참고하였다. 이 글을 쓰는 시점에서 Subclipse의 최신 버전은 1.2.2이다(Eclipse 3.2 버전에서는 이 버전을 사용하여야 한다). 또한 설명에 붙인 그림의 경우 Eclipse 한글 언어팩을 설치한 화면임을 덧붙인다.

  • Eclipse 도움말(Help) 메뉴 아이템에서 Eclipse Update Manager 다이얼로그를 열어 설치를 시작한다.

 

  • 설치할 새 기능에 대해 검색을 선택하고 다음 버튼을 클릭한다.

 

  • 새 원격 사이트 버튼을 클릭한다.

 

 

  • 방문할 갱신 사이트 다이얼로그에서 방금 등록한 Subclipse를 선택한 후 완료를 클릭한다.

 

  • 갱신 사항 다이얼로그가 팝업되면, Subclipse 1.2.2를 선택하고 다음 버튼을 클릭한다.

 

  • 라이선스에 동의한다.

 

  • 설치 위치를 선택한 후 완료 버튼을 클릭한다.

 

  • subclipse가 다운로드 된다.

 

  • 기능 검증 다이얼로그에서 경고를 무시하고 설치 또는 모두 설치 버튼을 클릭한다.

 

  • 변경 사항을 적용하기 위해 eclipse를 다시 시작한다.

 

  • 이제 eclipse를 재시작하면 Subclipse Repository perspective를 로드할 수 있다.

 

  • 또한 창 → 보기 표시 → 기타(Window → Show View → Other) 메뉴를 통해 SVN Repository 뷰를 Quick Views에 추가할 수 있다.

 

  • 창 → 환경 설정 → 팀 → SVN 다이얼로그(Window → Preferences → Team → SVN dialog)에서 플러그인 속성을 변경할 수 있다.

 

  • SVN Interface
    • JavaHL: JavaHL은 고유 Subclipse API를 둘러싼 씬 래퍼(thin wrapper)이며 기본적으로 사용 가능하도록 설정되어 있다. 이 어댑터는 Win32 플랫폼용으로 사전에 구축되었지만 그 외의 경우에는 (Unix 배포에 포함되지 않는 한) 수동으로 구축해야 한다.
    • SVNKit: JavaSVN은 전적으로 Java에 기반을 둔 유일한 Subclipse 클라이언트이다. 이 어댑터는 file:/ / / 프로토콜은 지원하지 않는다.

TortoiseSVN 설치

TortoiseSVN은 윈도우 탐색를 확장한 도구이다. 일반적인 바탕화면을 포함한 윈도우 탐색기에서 오른쪽 버튼 클릭을 통해 호출되는 메뉴로 이용할 수 있다.

TortoiseSVN은 현재 시점 가장 최신 버전은 1.4.4이다. 이것은 여기에서 다운로드 받을 수 있다. 또한 언어팩을 설치할 수 있는데, 한국어는 여기에서 다운로드 받으면 된다. 설치는 다이얼로그를 따라 지시하는데로 따라가면 되는데 주의할 것은 설치 후 시스템을 재시작해야 변경 사항이 반영된다(사실, 책임질 순 없지만 재시작하지 않아도 사용 가능하다 ;-)).

아래 그림들은 간단한 예제를 위해 DasBlog에서 호스팅되는 프로젝트를 체크아웃 하는 과정을 보여준다(DasBlog를 광고하는 것은 아니며, 최근 작업 내역이라 가장 먼저 떠올랐을 뿐이다 8-)). 참고로 닷넷의 경우 SVN_ASP_DOT_NET_HACK이 필요하다.

set SVN_ASP_DOT_NET_HACK=1
  • 새 폴더를 생성한 후 컨텍스트 메뉴의 “SVN Checkout” 선택

 

 

  • 대상 파일들을 다운로드 받는다.

 

  • 다운로드 후, Subversion과 관련한 주요 액션 표시되는 것을 컨텍스트 메뉴에서 확인 할 수 있다.

 

WebSVN 설치

사용

선행 작업

  • 상위 기술한 Subversion 설치를 참고하여 서버브전을 설치한다.
  • 상위 기술한 Subclipse 설치를 참고하여 Subclipse를 설치한다.
  • 상위 기술한 TortoiseSVN 설치를 참고하여 TortoiseSVN를 설치한다.

저장소 생성

1. command prompt를 열고 다음과 같이 타이핑한다.

svnadmin create "d:\svnrepo"

다음과 같은 디렉토리 구조 및 관련 파일이 자동으로 생성된다.

 

2. 생성한 디렉토리로 이동한 후 /conf/svnserve.conf 파일에서 해당 라인의 주석을 해제하여 다음 라인과 같이 편집한다.

[general]
anon-access = read
auth-access = write
password-db = passwd

3. /conf/passwd 파일에서 해당 라인의 주석을 해제하여 다음 라인과 같이 편집한다.

[users]
bookcity = 1234
kyungseo = qwer

검증

1. command prompt에 다음과 같이 타이핑 하여 서브버전 서버를 시작한다.

svnserve --daemon --root "d:\svnrepo"

또는 설치본이 서브버전 1.4 이후 버전이라면, 상위 기술한 바와 같이 윈도우 서비스로 시작한다(주의 아래 코드는 한 라인으로 입력해야 한다 :!:).

sc create svn.local 
   binpath= "\"c:\program files\subversion\bin\svnserve.exe\" --service --root D:\svnrepo" 
   displayname= "Subversion Repository" 
   depend= Tcpip 

 

 

반면 서브버전 1.4 이전 버전인 경우, 상위 기술한 SVNService를 사용하여 서비스로 등록할 수 있다. 다운로드 받은 SVNService.exeSubversion/bin 디렉토리로 카피한 후 다음과 같이 서비스를 설치한다.

svnservice -install --daemon --root "D:\svnrepo"
sc config svnservice start= auto
net start svnservice

2. 또 다른 command prompt를 열고 프로젝트를 생성한다(윈도우 서비스를 생성하여 Subversion 서버를 시작한 경우라면 동일한 커맨트 프롬프트를 사용해도 상관없다).

svn mkdir svn://localhost/bookcity

3. 이때, 자동으로 메모장이 실행되는데 여기에 원하는 코멘트를 달고 저장 후 종료하도록 한다.

 

4. 자격 증명을 묻는 프롬프트가 뜨게된다. 아래 화면의 경우 Administrator에 대한 자격 증명을 묻는 프롬프트이다. 비밀번호를 입력한다. 그리고 이전 단계에서 작성한 사용자로 로그인한다.

 

여기까지 진행했다면, 이제 서브버전에 프로젝트가 생성된 것이다! ;-) 저장소의 전체 파일 목록을 조회해본다.

svn ls svn://localhost/

 

TortoiseSVN 사용 예제

1. 새로운 디렉토리를 생성한 후 컨텍스트 메뉴에서 SVN Checkout을 선택한다.

 

2. 저장소 URL로 svn:/ /localhost/bookcity를 입력한다.

 

3. 체크아웃 진행

 

4. 테스트를 위한 파일을 신규 작성한 후 컨텍스트 메뉴에서 Add를 선택한다.

 

5. 여러 파일인 경우 선택적으로 Add할 수 있다.

 

6. Add 확인창

 

7. 아직 저장소에 추가된 것이 아니다. 최종적으로 커밋해주어야 한다. 컨텍스트 메뉴의 SVN Commit을 선택한다.

 

Subclipse 사용 예제

아래 사항들은 간단한 테스트 후 실제 동작 여부를 확인한 후 정리하였다. 이클립스에 Subclipse 플러그인을 사용하는 예제에 대해서는 충분한 사용을 거쳐 추후 다시 업데이트 하겠다.

1. SVN Repository 뷰를 퀵뷰(Quick Views)에 추가한다.

2. SVN 다이얼로그에서 현재 서브버전에 적합한 어댑터를 선택한다.

3. SVN Repository 뷰에서 Add SVN Repository 버튼을 클릭(또는 컨텍스트 메뉴의 new → repository location)하여 새로운 저장소를 추가한다. Url은 svn:/ /kyungseo/bookcity으로 설정한다.

4. eclipse에 로드된 프로젝트를 저장소에 추가하기 위해서 컨텍스트 메뉴 중 팀 하위의 프로젝트 공유(Share Project)를 선택하면 된다.

이후 프로젝트가 SVN 리포지토리에 연결되면 패키지 탐색기(Package Explorer) 및 Navigator 뷰의 Team 팝업 메뉴에 서브버전과 관련한 모든 액션 표시된다. 이것을 통해 동기화를 수행하고 변경 사항을 반영하는 등의 기본 작업을 수행할 수 있다. 또한 서브버전에서 프로젝트와의 연결을 끊거나 재설정할 수도 있다.

참고 링크

1) 커밋은 저장소에 대해서 완전하게 실행되든지 전혀 실행되지 않든지 둘 중 하나 이다. 이 때문에 개발자는 논리적인 한 묶음을 만들어 커밋할 수가 있다.
2) 서브버전 개발자들은 대부분 CVS의 개발자들이라고 한다.


출처 : http://kyungseo.pe.kr/wiki/
728x90

댓글