본문 바로가기
Skills/SVN

SVN(Subversion)이란? 버전 관리 시스템의 역사, Git과의 차이

by Hoseok 2023. 8. 6.
728x90
반응형

 

 

SVN이 무엇인지 알아보기 전에 버전 관리 시스템이 어떤 식으로 발전했는지 알아보자.

 

버전 관리 시스템의 역사

 

소프트웨어 개발 협업에서 필수적인 버전 관리 시스템은 다음 단계를 거쳐서 발전해왔다.

1. 로컬 버전 관리 시스템 (Local VCS)

초기에는 개발자 개개인이 자신의 로컬 환경에서 버전 관리를 수행하는 방식이었다. 파일 복사와 같은 간단한 방법을 사용해서 버전을 관리해왔는데, 이러한 방식은 누가 변경을 했는지에 대한 이력 관리나, 파일이 소실될 수 있다는 단점이 존재했다.

2. 중앙 집중형 버전 관리 시스템 (Centralized VCS)

그렇게 해서 나온 것이 중앙 집중형 시스템으로, 여러 개발자가 하나의 중앙 서버에서 파일과 변경 내용을 관리하는 방식이다. 개발자들은 중앙 서버로부터 최신 파일을 받아와 작업하고, 변경 사항을 커밋하여 중앙 서버에 반영한다. 중앙 집중형 시스템의 대표적인 예로 CVSSubversion (SVN)가 있다.

3. 분산 버전 관리 시스템 (Distributed VCS):
2005년에 Git이 등장하면서 혁신이 시작되었다. 분산 VCS에서는 각 개발자가 자신의 로컬 환경에서 전체 프로젝트의 복사본을 가지고 작업한다. 변경 사항을 로컬에서 커밋하고, 다른 개발자들과 변경 사항을 공유하기 위해 원격 저장소로 푸시한다. 이를 통해 병렬 개발과 브랜치 관리가 용이해졌다.

4. 클라우드 기반 협업 플랫폼:
Git을 기반으로 한 협업은 GitHub, GitLab, Bitbucket과 같은 클라우드 기반 플랫폼의 등장으로 더욱 발전하게 된다. 이러한 플랫폼은 개발자들이 원격 저장소에서 협업하고, 이슈 관리, 코드 리뷰, 자동화된 빌드 및 배포 등의 기능이 가능해졌다. 그렇게 오픈 소스 프로젝트 및 팀 기반의 소프트웨어 개발을 혁신적으로 변화시키게 된다.

 

그렇다면 SVN은 무엇인가?

 

SVN은 CollabNet사의 개발자인 Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato가 개발한 오픈 소스 버전 관리 시스템이다. 초기 개발은 2000년대 초반에 시작되었으며, 2000년대 중반에 공개 소스로 릴리스되었다.

SVN은 CVS (Concurrent Versions System)라는 기존의 버전 관리 시스템을 대체하고 개선하기 위해 만들어졌다. 

 

SVN은 git이 등장하기 전에 사용률 1위였던 버전 관리 시스템이다. 하지만 git이 등장하고, 2010년대 중반부터는 git의 점유율이 SVN을 넘어서게 되며, 이후로는 거의 사용되지 않는 편이다.

 

버전 관리 시스템은 CVS -> SVN -> GIT의 순으로 점유율이 넘어갔다고 보면 된다.

 

SVN의 기본 원리

 

SVN에는 중앙 저장소라는 프로젝트의 파일, 폴더, 버전 이력 등을 저장하고 관리하는 저장소가 존재한다. 사용자들은 중앙 저장소에 접근하여 코드를 업로드, 다운로드하고 변경 사항을 공유하고 협업하게 된다.

 

사용자의 컴퓨터에는 작업 디렉토리가 존재한다. 작업 디렉토리는 중앙 저장소의 특정 버전을 로컬 환경으로 복제한 것이며, 여기에서 코드 수정 및 개발 작업을 수행한다. 작업 디렉토리에서 변경된 내용은 중앙 저장소로 커밋하여 프로젝트의 버전 이력에 추가된다.

 

중앙 저장소는 사용자들이 직접 서버 컴퓨터를 설정하거나, 호스팅 업체를 통해 서버를 구축하는 방식으로 만들어진다.

사용자는 서버를 구축하고 관리하기 위해 SVN 소프트웨어를 설치하고 설정하며, 이렇게 구성한 서버를 통해 사용자들은 중앙 저장소에 접근하고 버전 관리를 수행할 수 있게 된다.

SVN 자체는 무료 오픈 소스이기 때문에, 사용료는 없다.

 

SVN과 Git의 차이

 

SVN과 Git 모두 Commit을 하면 변경 내용이 중앙 저장소 또는 원격 저장소에 업로드된다는 점은 같다.

 

그러나 Git은 분산형 버전관리 시스템이기 때문에 개발자는 로컬 저장소를 가지고 있으며, 로컬에서 commit과 브랜치를 자유롭게 관리할 수 있다. 로컬 저장소의 변경 사항은 원격 저장소로 push하기 전까지는 다른 개발자들에게 영향을 미치지 않는다. 또한 원격 저장소로 push된 코드는 다른 개발자가 pull하기 전까지는 영향을 미치지 않는다.

 

그러나 SVN은 중앙 집중형 버전관리 시스템이기 때문에 코드를 commit하면 모든 개발자들에게 바로 영향을 미치게 된다. 

 

그렇기 때문에 SVN에서 commit을 할 때는 훨씬 신중하게 하도록 하자.

 

 

728x90
반응형