1. Background
프로젝트 개발 과정에서 중요한 몇 가지 요구사항이 있다.
- 하나의 프로젝트를 여러 명의 개발자가 동시에 개발을 할 수 있어야 한다.
- 개발 중 문제가 발생하면, 문제의 전후 상황을 파악하여 특정 시점의 버전으로 돌아갈 수 있어야 한다.
- 각 버전 별로 소스 코드가 관리되어야 하며, 버전 간의 번경 내역을 추적할 수 있어야 한다.
- 다양한 개발 시스템이 연동되어야 한다.
2. Version Control Systems (VCS)
버전 관리 시스템 (Version Control Systems, VCS)
는 형상 관리 시스템 (Configuration Management Systems)
이라고 불리고 Source Data와 그에 따른 변경 이력을 관리하는 도구이다.
- 이를 통해 협업, 작업 추적, 복구 등이 가능하다.
2.1 Local Version Control Systems (내부 버전 관리 시스템)
초창기에는 개발자들이 개인 컴퓨터에서 소스 코드를 관리했으며, 이는 주로 단일 개발자가 프로젝트를 개발하고 관리할 때 사용되었다. 하지만 이러한 시스템은 몇 가지 중요한 단점을 가지고 있었다.
2.3 Centralized Version Control Systems (Centralized VCS, 중앙 버전 관리 시스템)
- 제한적인 협업이 가능하다. 한 사람이 수정하면 다른 사람들은 수정할 수 없다.
- Commit 하는 즉시 서버에 적용되어 다수의 사용자에게 버그를 유발할 수 있다.
- 인터넷 연결이 없으면 작업이 불가능하다.
- 개인적인 version history를 가지기 어렵다.
- 대표적으로 CVS, SVN 등이 있다.
1) CVS (Concurrent Version System)
- 1980년대에 만들어진 형상 관리 도구이다.
- Commit 중에 오류가 발생하면 rollback이 제대로 되지 않는 등의 문제가 있었다.
- 이후 SVN(Subversion)으로 대체되었다.
2) SVN (Subversion)
- 2000년대에 만들어졌고 현재까지 사용되고 있다.
2.4 Distributed Version Control Systesm (Distributed VCS, 분산 버전 관리 시스템)
- Commit한 변경 사항이 개인 저장소에 적용된다.
- 필요한 시점에 배포(push)가 가능하다.
- 오프라인에서도 작업이 가능하다.
- 개인적인 version history를 가질 수 있다.
- 대표적으로 Mercurial, Git 등이 있다.
1) Git (Global Information Tracker)
- SVN 보다 빠른 속도와 많은 기능을 제공한다.
- 현재 대부분의 기업들은 Git을 사용하고 있다.