버전 관리 소프트웨어란?
- 파일 변화를 시간에 따라 기록했다가 나중에 특정 시점의 버전을 다시 꺼내올 수 있는 시스템
- 영어로 VCS - Version Control System라고 한다.
- 여러가지 형태가 존재한다.
- 로컬형 : 사용자의 컴퓨터에 직접 내용을 저장하는 저장방식
- 중앙형 : 사용자의 컴퓨터가 아닌 여러 사용자의 버전 관리 내용을 중앙 서버에서 관리하는 방식.
- 분산형 : 중앙에서 관리하고 있던 모든 이력을 가진 저장소 전체를 복사하여 각 사용자의 컴퓨터로 가져와 사용하며 그에 대한 이력 또한 따로 관리하며, 데이터를 분산하여 저장하는 방식.
- 이 중 Git은 3번째 분산형을 채택한 시스템이다.
로컬형
많은 사람은 버전을 관리하기 위해 디렉토리로 파일을 복사하는 방법을 쓴다. 그렇지만, 정말 뭔가 잘못되기 쉽다.
작업하던 디렉토리를 지워버리거나, 실수로 파일을 잘못 고칠 수도 있고, 잘못 복사할 수도 있다.
이런 이유로 프로그래머들은 오래전에 로컬 VCS를 만들었다. 이는 아주 간단한 데이터베이스를 사용해서 파일의 변경 정보를 관리했다.
중앙형
프로젝트를 진행하다 보면 다른 개발자와 함께 작업해야 하는 경우가 많다.
이럴 때 생기는 문제를 해결하기 위해 CVCS(중앙집중식 VCS)가 개발됐다.
시스템은 파일을 관리하는 서버가 별도로 있고 클라이언트가 중앙 서버에서 파일을 받아서 사용(Checkout)한다.
CVCS의 장점은 다음과 같다.
- 모두 누가 무엇을 하고 있는지 알 수 있다.
- 관리자는 누가 무엇을 할지 꼼꼼하게 관리할 수 있다.
- 모든 클라이언트의 로컬 데이터베이스를 관리하는 것보다 VCS 하나를 관리하기가 훨씬 쉽다.
그러나, 여러가지 단점들이 존재한다. 가장 대표적인 것이 중앙 서버에 발생한 문제다.
만약 서버가 한 시간 동안 다운되면 그동안 아무도 다른 사람과 협업할 수 없고 지금 작업을 백업할 방법도 없다.
그리고 중앙 데이터베이스가 있는 하드디스크에 문제가 생기면 프로젝트의 모든 히스토리를 잃는다.
그래서 분산 버전관리 시스템, DVCS가 나왔다.
분산 버전 관리 시스템
분산 버전 관리 시스템의 장점
-
DVCS에서의 클라이언트는 그냥 저장소를 히스토리와 더불어 전부 복제한다.
그래서 서버에 문제가 생기면 이 복제물로 다시 작업을 시작할 수 있다. 즉, 클라이언트 중에서 아무거나 골라도 서버를 복원할 수 있다.
-
리모트 저장소가 존재한다. 그래서 사람들은 동시에 다양한 그룹과 다양한 방법으로 협업할 수 있다. 계층 모델 같은 중앙집중식 시스템으로는 할 수 없는 워크플로를 다양하게 사용할 수 있다.