· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Subversion Book/Introduction

도입

1Chapter. 도입


1.1.

버전 관리는 정보에 대한 변경 사항을 관리하는 기법입니다. 소프트웨어에 작은 수정을 한 뒤, 다음 날에 그 수정된 것을 취소하는 일을 일상적으로 하는 프로그래머에게 버전 관리는 오랫동안 매우 중요한 도구였습니다. 이 프로그래머들이 팀을 이루어 동시에 작업한다고 생각해 보면, 일어날 수 있는 혼란을 막기 위해 좋은 시스템이 필요하다는 사실을 알 수 있을 것입니다.


1.1. Subversion은 무엇인가?

Subversion은, 공개(Free)/Open source 버전 관리 시스템으로, 시간과 함께 변화하는 파일이나 디렉토리를 관리합니다. 파일의 계층 구조 전체는, 저장소(repository)로 불리는 장소에 보관됩니다. 저장소는 일반적인 파일 서버와 비슷하지만, 사용자가 파일이나 디렉토리를 변경한 것을 모두 기록하고 있습니다. 이로 인해 사용자는 옛 버전의 데이터로 되돌리거나 변경된 이력을 확인할 수 있습니다. 이런 의미로 버전 관리 시스템을 "타임 머신"의 일종이라고 생각하는 사람도 있습니다.

몇몇 버전 관리 시스템은 소프트웨어 구성 관리 시스템(SCM)이기도 합니다. 그러한 시스템은 소스 코드의 트리를 관리하기 위해서 특별히 제작되었으며, 소프트웨어 개발에 관한 많은 특수 기능을 가지고 있습니다. 예를 들어 프로그래밍 언어를 직접 이해한다거나 소프트웨어를 만드는데 필요한 도구들을 제공합니다. 그러나 Subversion은 그러한 종류의 시스템은 아닙니다. Subversion은 소스 코드는 물론, 어떠한 종류의 파일의 집합도 관리할 수 있는 일반적인 시스템입니다.


1.2. Subversion의 역사

1995년에 Karl Fogel과 Jim Blandy는 Cyclic Software 사를 창설했습니다. 이 회사는 Concurrent Versions System (CVS)를 상업적으로 개량하고 기술지원을 하는 기업이었습니다. Cyclic 사는 (Cygnus Software 사의 도움을 받아) 네트워크 상에서 사용할 수 있는 최초의 CVS를 공개했습니다. 1999년에, Karl Fogel은, CVS와 이로 인해 가능하게 된 Open Source 개발 모델에 대한 책을 출판했습니다. Karl과 Jim은 CVS의 대체 소프트웨어에 대하여 오랫동안 이야기했습니다. Jim은 새로운 이론적인 저장소 디자인에 대한 초안을 만들었고, 좋은 프로젝트 명칭을 생각해 냈습니다. 최종적으로 2000년의 2월, CollabNet 사 (http://www.collab.net)의 Brian Behlendorf는 Karl에게 CVS의 대체 소프트웨어를 개발하는 데 전념해 달라고 제의했습니다. Karl은 함께 일할 팀을 만들어 5월부터 작업에 들어갔습니다. Subversion은 라이센스 없이 공개된 형태로 개발되었으므로, 얼마 후 오픈 소스 개발자 커뮤니티의 주목을 받게 되었습니다.

최초의 설계 팀은 몇 개의 간단한 목표를 정했습니다. Subversion은, CVS의 기능을 대체할 수 있어야 한다고 결정했습니다. 즉, CVS의 기능을 그대로 보존하고 개발 모델을 계승하는 반면, 분명히 드러나는 결점을 보완해야 한다는 것입니다. CVS 사용자가 큰 무리 없이 이용할 수 있도록 Subversion은 CVS와 비슷해야 한다고 했습니다.

14개월의 코딩 뒤 Subversion은 2001/8/31에 "스스로 자신의 소스 코드 관리"를 할 수 있게 되었습니다. 즉, Subversion 개발자는 CVS 사용을 그만 두고, Subversion으로 소스 코드 관리를 할 수 있게 되었습니다.

CollabNet 사가 개발 자체를 시작했고 풀 타임으로 일하는 Subversion 개발자 몇몇의 임금을 지불하는 등 대부분의 작업에 자금을 대긴 했지만, 이 프로젝트는 실력 중심주의에 따르는 전형적인 Open Source 프로젝트입니다. CollabNet 사가 코드의 저작권을 가지고 있지만, Apache/BSD 스타일의 라이센스를 따르고 있고 이는 Debian Free Software 가이드라인을 준수합니다. 바꾸어 말하면 누구라도 원한다면 자유롭게 Subversion을 다운로드해 수정하고 재배포할 수 있으며, CollabNet 사나 다른 누군가의 허가를 얻을 필요는 없습니다.


1.3. Subversion의 특징

Subversion은 CVS의 디자인을 어떻게 개량했을까? 당신의 호기심을 자극하는 작은 이유들을 나열해보겠습니다. CVS에 익숙하지 않다면 이 기능들을 전부 이해할 수 없을 지도 모르지만 괜찮습니다, >에 좀 더 평이한 소개글이 있습니다.

디렉토리의 버전화

CVS에서는 개별 파일만의 변경 사항을 추적할 수 있지만, Subversion에는 시간에 따라 디렉토리 트리 전체의 변화도 추적할 수 있는 "가상" 버전화 파일 시스템이 있습니다. 파일과 디렉토리에도 버전을 붙입니다. 결과적으로 파일과 디렉토리에 대한, 진정한 클라이언트 측 movecopy 커맨드(명령)이 있습니다.

원자적 커밋(Atomic commits)

커밋은 저장소에 대해서 완전하게 실행되든지 전혀 실행되지 않든지 둘 중 하나 입니다. 이 때문에 개발자는 논리적인 한 묶음을 만들어 커밋할 수가 있습니다.

버전화 된 메타데이타

파일과 디렉토리에는 보이지 않는 "속성"이 결합되어 있습니다. 임의의 키/값을 만들어 저장할 수 있습니다. 속성은 파일의 내용과 마찬가지로 시간 순서에 따라 버전화 됩니다.

네트워크 계층의 선택

Subversion은 저장소 접근에 대한 추상적인 인터페이스를 갖고 있으므로 개발자는 새 네트워크 기능을 쉽게 구현할 수가 있습니다. Subversion의 "진보된" 네트워크 서버는 Apache 웹 서버의 모듈로서, WebDAV/DeltaV로 불리는 HTTP의 변종으로 통신합니다. 이는 Subversion에 큰 안정성과 협조성을 주어, 인증, 허가, 데이터 압축, 저장소 열람 등과 같은 이로운 기능을 자유롭게 사용할 수 있게 합니다. 더 작고 독립적인 Subversion 서버를 이용할 수도 있습니다. 이 서버는 ssh 안을 간단하게 터널링할 수 있는 독자적 프로토콜을 이용합니다.

데이터 처리의 일관성

Subversion은 binary differencing 알고리즘을 사용해 파일의 차이점을 표현합니다. 이것은 텍스트(사람이 읽을 수 있는 데이터)와 바이너리(사람이 읽을 수 없는 데이터)를 같은 방법으로 처리합니다. 어떤 형식의 데이터라도 저장소에 똑같이 압축된 상태로 저장되며, 차이점은 네트워크를 통해서 양방향으로 전송됩니다.

효율적인 브랜치(branch), 태그(tag)의 작성

브랜치와 태그를 작성하는 비용이 프로젝트의 크기에 따라 꼭 커지지는 않습니다. Subversion은 하드 링크와 비슷한 방법으로 프로젝트를 그냥 복사하여 브랜치와 태그를 만듭니다. 그 때문에 브랜치와 태그를 만드는 데 매우 짧은 시간 밖에 걸리지 않습니다.

쉬운 확장성

Subversion은 잘 설계된 API를 가진 C의 공유 라이브러리로서 구현되었습니다. 그래서 Subversion은 보수하기 쉽고, 다른 어플리케이션이나 언어에서 이용하기 쉽습니다.


1.4. Subversion의 인스톨

Subversion은 APR(the Apache Portable Runtime library)로 불리는 인터페이스 위에 개발되고 있습니다. 이 때문에 Subversion은 Apache의 httpd 서버를 사용할 수 있는 운영체제라면 어디에서도 실행될 수 있습니다: Windows, Linux, 모든 BSD의 변종, Mac OX X, Netware 등입니다.

Subversion을 손에 넣는 가장 간단한 방법은 자신의 운영체제용 바이너리 패키지를 다운로드하는 것입니다. Subversion 웹 사이트(http://subversion.tigris.org)에는 자원봉사에 의해 만들어진 다운로드 가능한 바이너리가 많이 있습니다. 이 사이트에는 보통 Microsoft Windows를 위한 그래픽 인스톨러 패키지도 있습니다. Unix 계열의 운영체제를 사용하고 있다면 (rpm, deb, ports tree 등의) 시스템 고유 패키지 배포 시스템을 사용할 수도 있습니다.

혹은 직접 소스 코드로부터 Subversion을 컴파일할 수도 있습니다. 웹 사이트에서 최신 소스 코드 릴리즈를 받을 수 있습니다. 압축을 해제한 뒤 INSTALL 파일의 설명에 따라 컴파일 하십시오. 소스 패키지에는 (apr, apr-util, neon 라이브러리 등의) 원격의 저장소에 접근하기 위한 커맨드 라인 클라이언트를 만드는데 필요한 것은 모두 갖추어져 있습니다. Subversion은 Berkeley DB나 잠재적으로는 Apache httpd 등 다른 여러 가지 소프트웨어에 의존하고 있다는 것을 주의해 주십시오. 만약 "완전하게" 빌드하려고 한다면 INSTALL 파일에 쓰여진 모든 패키지가 설치되어 있는 것을 확인해 주십시오. Subversion 자체에 대해 작업할 계획이라면 클라이언트 프로그램을 사용해 가장 최신의 소스 코드를 받을 수 있습니다. 사용 방법은 >에 나와 있습니다.


1.5. Subversion의 구성요소

인스톨 뒤의 Subversion은 작은 프로그램들로 이루어져 있습니다. 간단한 개요를 아래에 씁니다.


1.5.1. 클라이언트 구성요소(사용자전용)

svn

커맨드 라인 클라이언트 프로그램입니다. 데이터를 관리하는데 사용하는 가장 중요한 툴입니다. 제2, 3, 4장, 6장에서 사용법이 설명되어 있습니다.

svnversion

작업 복사본의 혼합 리비전 상태에 대한 보고를 하는 프로그램입니다. (혼합 리비전에 있는 작업 복사에 대해서는 >을 참조해 주세요.)


1.5.2. 서버 구성요소(관리자전용)

이것들은 모두 >에 논의됩니다.

svnlook

Subversion의 저장소를 조사하기 위한 툴입니다.

svnadmin

Subversion의 저장소를 만들거나 수정, 복구하기 위한 프로그램입니다.

mod_dav_svn

Apache-2.X 웹 서버용의 플러그 인 모듈입니다. 저장소를 네트워크 상의 다른 사용자가 이용할 수 있도록 해줍니다.

svnserve

daemon으로서 SSH로부터 작동되는 독립형 서버 프로그램입니다. 네트워크에서 저장소를 사용할 수 있도록 하는 다른 방법입니다.

Subversion이 올바르게 인스톨 되었다면 이제 Subversion을 사용할 수 있습니다. 다음 두 개의 장에서는 커맨드 라인 클라이언트 프로그램 svn의 사용법을 설명합니다.


ID
Password
Join
Recent investments will yield a slight profit.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2004-01-16 11:14:11
Processing time 0.0030 sec