문서의 각 단락이 어느 리비전에서 마지막으로 수정되었는지 확인할 수 있습니다. 왼쪽의 정보 칩을 통해 작성자와 수정 시점을 파악하세요.


서브버전은 아파치 소프트웨어 재단에서 개발 및 유지보수하는 오픈 소스 버전 관리 시스템이다. 정식 명칭은 아파치 서브버전(Apache Subversion)이며, 명령 줄 인터페이스에서 사용하는 명령어를 따서 흔히 SVN이라고 줄여 부른다. 이 시스템은 CVS(Concurrent Versions System)의 여러 제한 사항을 해결하고 개선하기 위해 콜랩넷(CollabNet)에서 2000년부터 개발을 시작했으며, 현재는 활발히 개발이 진행 중이다.
서브버전은 클라이언트-서버 모델을 따르는 중앙 집중식 버전 관리 시스템이다. 소프트웨어 개발 과정에서 소스 코드나 문서 등의 파일 변경 이력을 관리하는 데 주로 사용된다. 리눅스, 윈도우, macOS를 포함한 다양한 운영 체제에서 동작하며, C 언어로 작성되었다.
이 시스템의 주요 목표는 CVS와 유사한 사용 방식을 유지하면서도, CVS가 가지지 못했던 기능을 제공하고 기존의 버그를 수정하는 것이었다. 예를 들어, CVS는 파일의 이름 변경 이력을 제대로 추적하지 못하는 반면, 서브버전은 파일이나 디렉터리의 이름 변경, 이동, 삭제 작업도 버전 이력에 완전히 기록한다.
서브버전은 아파치 라이선스 하에 배포되는 자유 소프트웨어로, 오픈 소스 프로젝트뿐만 아니라 많은 기업의 소프트웨어 형상 관리에도 널리 채택되어 사용되고 있다. 네트워크 프로토콜로는 자체 SVN 프로토콜이나 HTTP, HTTPS를 사용하여 서버와 클라이언트가 통신한다.

서브버전의 개발은 2000년에 시작되었다. 당시 널리 사용되던 버전 관리 시스템인 CVS에는 파일 이름 변경 이력 추적 부재 등의 제한 사항이 있었다. 이를 대체하기 위해 콜랩넷은 CVS와 호환성을 유지하면서도 개선된 기능을 제공하는 새로운 시스템을 구상했고, 이 프로젝트가 서브버전으로 공식 출범하게 되었다.
프로젝트는 2000년 10월 20일에 최초로 공개되었으며, 이후 안정적인 1.0 버전이 2004년 2월에 출시되었다. 서브버전은 빠르게 오픈 소스 커뮤니티에서 인기를 얻어 아파치 소프트웨어 재단, KDE, 파이썬 등 주요 프로젝트의 표준 버전 관리 도구로 채택되었다.
2010년에는 서브버전 프로젝트가 공식적으로 아파치 소프트웨어 재단의 최상위 프로젝트로 승격되었다. 이는 개발이 단일 회사에 국한되지 않고 더 넓은 개발자 커뮤니티에 의해 주도될 수 있는 기반을 마련했다. 현재 서브버전은 아파치 라이선스 하에 개발이 지속되고 있으며, 리눅스, macOS, 윈도우 등 다양한 운영 체제를 지원한다.

서브버전은 클라이언트-서버 모델을 따르는 버전 관리 시스템이다. 서버는 로컬 컴퓨터에 위치할 수도 있고, 네트워크를 통해 접근 가능한 원격 컴퓨터에 위치할 수도 있다. 서버와 클라이언트 간 통신은 HTTP, HTTPS, svn, svn+ssh 프로토콜을 통해 이루어진다.
서브버전은 파일의 이름 변경, 복사, 삭제 작업에 대해서도 완전한 버전 관리 이력을 유지한다는 점이 특징이다. 이는 CVS의 한계를 극복한 부분이다. 또한 디렉터리 전체를 이동하거나 복사할 때도 해당 디렉터리 내 모든 파일의 개정 이력을 그대로 보존할 수 있다. 이진 파일에 대해서는 변경된 부분만 차등 저장하여 저장소 공간을 효율적으로 사용한다.
기술적으로 서브버전은 아파치 HTTP 서버를 네트워크 서버로 사용할 수 있으며, 웹대브와 델타-V를 통신 규약으로 활용한다. 별도의 독립 서버 프로세스인 svnserve도 제공되어 전용 프로토콜을 통해 서비스를 구축할 수 있다. 저장소의 크기에 관계없이 일정한 시간 내에 브랜치 생성이나 태그 지정 작업을 수행할 수 있는 구조를 가지고 있다.

서브버전에서 브랜치와 태그는 저장소 내에서 코드의 특정 상태를 표시하거나 분리된 개발 라인을 생성하는 데 사용되는 핵심 개념이다. 이들은 CVS와 같은 이전 버전 관리 시스템에서와 달리, 서브버전에서는 가볍고 효율적인 카피-온-라이트 방식으로 구현된다. 즉, 브랜치나 태그를 생성할 때 파일과 디렉터리의 전체 복사본을 만들지 않고, 저장소 내부에서는 원본에 대한 참조만을 생성한다. 이로 인해 작업은 거의 즉시 완료되며 저장소 공간을 매우 절약할 수 있다.
기술적으로 브랜치와 태그는 모두 svn copy 명령어를 사용하여 생성된다. 이 명령은 트렁크라고 불리는 메인 개발 라인이나 다른 브랜치의 특정 리비전을 원본으로 하여 새로운 디렉터리를 저장소 내에 만든다. 생성된 브랜치나 태그는 원본의 완전한 역사를 그대로 유지한다. 일반적인 관례에 따라, 프로젝트 루트 디렉터리 아래 /branches, /tags, /trunk라는 표준 디렉터리 구조를 사용하여 이들을 체계적으로 관리한다.
브랜치는 병렬 개발을 위해 사용된다. 예를 들어, 새로운 기능 개발이나 버그 수정을 기존 트렁크에 영향을 주지 않고 진행할 때 브랜치를 생성한다. 개발이 완료되면 해당 브랜치의 변경사항을 트렁크나 다른 브랜치로 머지하여 통합한다. 반면, 태그는 주로 특정 시점의 중요 상태(예: 소프트웨어의 1.0 릴리스 버전)에 이름을 붙여 참조용으로 사용된다. 태그는 일반적으로 변경되지 않는 정적인 스냅샷으로 간주되며, 태그 생성 후 해당 경로에 새로운 커밋을 하는 것은 권장되지 않는다.

서브버전은 다양한 클라이언트와 통합 개발 환경을 위한 도구 및 플러그인을 지원한다. 대표적인 GUI 클라이언트로는 마이크로소프트 윈도우의 탐색기에 통합되어 사용되는 TortoiseSVN이 있다. 이 도구는 팝업 메뉴를 통해 버전 관리 작업을 쉽게 수행할 수 있게 해준다.
다양한 개발 환경과의 통합을 위한 도구들도 활발히 개발되었다. 이클립스 사용자를 위한 Subclipse 플러그인과 마이크로소프트 비주얼 스튜디오와의 통합을 제공하는 AnkhSVN이 대표적이다. 또한 WinCvs와 유사한 멀티 플랫폼 GUI 클라이언트로 RapidSVN이 있다.
서브버전 저장소와 연동하여 프로젝트 관리 기능을 확장하는 소프트웨어도 있다. 버그 추적 시스템이자 이슈 추적 시스템인 Trac은 서브버전 저장소와 직접 연결되어 변경 내역과 이슈를 연동 관리할 수 있는 기능을 제공한다. 이러한 관련 소프트웨어들은 서브버전 생태계를 풍부하게 만들고 사용자 편의성을 크게 높인다.

서브버전은 버전 관리 시스템의 역사에서 중요한 위치를 차지한다. 이 시스템은 CVS의 한계를 극복하고자 개발되었으며, 특히 중앙 집중식 버전 관리 모델의 대표주자로서 오랫동안 널리 사용되었다. 아파치 소프트웨어 재단의 최상위 프로젝트가 된 이후로도 꾸준히 개발이 지속되고 있다.
서브버전의 명령 줄 인터페이스에서 사용하는 주요 명령어를 따서 흔히 SVN이라는 약칭으로 불린다. 이는 깃과 같은 분산 버전 관리 시스템이 등장하기 전까지 수많은 오픈 소스 프로젝트와 기업 환경에서 표준적인 도구로 자리 잡았다. KDE, 그놈, 파이썬과 같은 주요 오픈 소스 프로젝트들이 서브버전을 채택했던 것은 그 안정성과 성숙도를 입증한다.
서브버전의 영향력은 다양한 클라이언트 도구의 생태계를 통해 확인할 수 있다. 마이크로소프트 윈도우 환경의 TortoiseSVN, 이클립스 통합 개발 환경용 Subclipse, 마이크로소프트 비주얼 스튜디오용 AnkhSVN 등 다양한 플랫폼과 도구에 통합되어 개발자들의 작업 흐름을 지원했다. 또한 Trac과 같은 이슈 추적 시스템과의 긴밀한 연동은 프로젝트 관리 측면에서의 유용성을 높였다.
현대 소프트웨어 개발에서 분산 버전 관리가 주류가 되었음에도 불구하고, 서브버전은 여전히 특정 조직이나 레거시 프로젝트에서 사용되며 그 가치를 인정받고 있다. 이는 서브버전이 소프트웨어 형상 관리의 발전 과정에 기여한 중요한 이정표임을 보여준다.
