프로그래밍/VCS

버전 관리 시스템(VCS)이란?

유종원 2024. 12. 29. 19:43

버전 관리 시스템( VCS: Version Control System )이란?

VCS는 파일 변화를 시간에 따라 기록했다가 나중에 특정 시점의 버전을 다시 꺼내올 수 있는 시스템이다.

 

VCS의 필요성

1. 변경이력 및 수정내용 관리

특정 버전에서 문제가 생긴 경우, 해당 버전의 변경이력과 수정내용을 확인하여 문제의 원인이 되는 부분을 쉽게 추적할 수 있고 시간에 따른 수정내용을 비교하여 문제를 해결할 수 있다.

 

2. 백업

백업을 통해 파일 단위에서 프로젝트 전체까지 이전 상태로 되돌릴 수 있고 실수로 삭제한 파일이나 잘못 고쳤을 때 쉽게 원상태로 복구 가능하다.

 

3. 협업

버전을 생성할 때, 변경이력과 수정내용과 더불어 자신의 이름을 같이 기록하다 보니 개발 영역 분담이 명확해지고 오류가 생긴 경우 누가 언제 만들어낸 이슈인지도 알아낼 수 있다.

 

VCS의 종류

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

Local VCS는 데이터베이스를 사용해서 파일의 변경 정보를 관리한다.

 

특징

로컬환경에서 관리하다보니 프로젝트 관리자가 모든 클라이언트의 로컬 데이터베이스를 관리해야 된다는 비효율성이 있다. 또한 로컬 데이터베이스가 있는 하드디스크에 문제가 생기면 클라이언트의 모든 히스토리를 잃게 되는 치명적인 결점이 있다. 

 

대표적으로 RCS(Revision Control System)가 있다.

그림1. 로컬 버전 관리 시스템

 

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

CVCS는 파일을 관리하는 서버가 별도로 있고 클라이언트가 중앙 서버에서 파일을 받아서 사용(Checkout)한다.

 

특징

서버가 별도로 존재하니 프로젝트 관리자는 모두 누가 무엇을 하는지 알 수 있고 꼼꼼하게 관리할 수 있다. 또한 중앙 서버 하나만 관리하면 되기에 Local VCS에 비해 효율적이다.

 

그러나 이 CVCS 환경에도 몇가지 치명적인 결함이 존재하는데, 가장 대표적으로 중앙 서버에서 발생하는 문제이다. 만약 서버가 한 시간 동안 다운되면 그동안 아무도 다른 사람과 협업 할 수 없고 사람들이 하는 일을 백업할 방법도 없다. 그리고 중앙 데이터베이스가 있는 하드디스크에 문제가 생기면 프로젝트의 모든 히스토리를 잃게 된다.

 

대표적으로 CVS, Subversion, Perforce가 있다.

그림2. 중앙집중식 버전 관리 시스템

 

3. 분산 버전 관리 시스템( DVCS: Distributed VCS )

DVCS는 Local VCS, CVCS와 달리 파일의 마지막 스냅샷을 Checkout하지 않고 저장소를 히스토리와 더불어 전부 복제(Clone)한다.

 

특징

저장소를 복제하여 사용하니 서버에 문제가 생겨도 클라이언트의 저장소로 다시 작업 할 수 있고 클라이언트의 저장소로 서버를 쉽게 복원할 수 있다. 추가적으로 대부분의 DVCS 환경에서는 원격(Remote) 저장소가 존재한다. 이를 통해 클라이언트는 동시에 다양한 그룹과 다양한 방법으로 협업이 가능하다.

 

대표적으로 Git, Mecurial, Bazaar, Darcs가 있다.

그림3. 분산 버전 관리 시스템

 

참고

1. Git - 버전 관리란? : https://git-scm.com/book/ko/v2/%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-%EB%B2%84%EC%A0%84-%EA%B4%80%EB%A6%AC%EB%9E%80%3F