버전 관리 시스템

 

1. 개요
2. 버전 관리란?
3. 종류
3.1. 로컬 VCS
3.2. 중앙집중식 VCS
3.3. 분산 VCS
4. 목록
5. 관련 문서


1. 개요


Version Control System(VCS)
문서나 설계도, 소스 코드 등의 변경점을 관리해주는 소프트웨어.

2. 버전 관리란?


[image]
버전 관리 없이 문서를 작성한 경우
소프트웨어 등을 작성할 때 변경점을 관리하는 것은 말할 필요도 없이 아주 중요하다. 버전 관리를 함으로서 얻을 수 있는 것에는 다음과 같은 것들이 있다.
  • 변경점 관리: 어떤 내용을 누가 작성해서 어느 시점에 들어갔는지 확인할 수 있게 해준다.
  • 버전 관리: 특정 시점에 꼬리표(Tag)를 달아 버전을 표시해주고, 브랜치(Branch) 등으로 동시에 여러 버전을 개발할 수 있게 해준다.
  • 백업&복구: 무언가가 잘못되었을 때 다시 특정 시점으로 돌아가게 해주고, 사고로 내용이 날아간 경우에도 복구할 수 있게 해준다.
  • 협업: 같이 일하는 사람들에게 수정사항을 쉽게 공유
버전 관리 프로그램만 따로 사용해 관리하는 경우도 있지만, 오늘날엔 비주얼 스튜디오, IntelliJ IDEA 등의 통합 개발 환경텍스트 에디터에서 이런 기능을 통합해줘서 에디터 내부에서 바로 사용할 수도 있다. 굳이 소프트웨어 개발에서만이 아니더라도, 구글 문서 도구, 원드라이브클라우드 컴퓨팅에서도 버전 관리 기능을 제공한다.

3. 종류



3.1. 로컬 VCS


서버 없이 로컬 컴퓨터 내에서 버전을 관리한다. 간단한 데이터베이스만으로도 구현이 가능하므로 단순하고 개인적인 프로젝트에 적합하다.
단, 협업에서 쓰기에는 힘들고, 컴퓨터가 고장나는 등 내부 정보가 통째로 날아가버리면 복구할 방법이 없다.

3.2. 중앙집중식 VCS


서버에 최종본 한 벌이 있으며, 사용자들은 이 중 수정을 원하는 파일만 로컬에 받아 수정한 후 서버에 올리게 된다.
간단한 방법으로 협업이 가능하고 관리자가 누가 어떤 일을 하고 있는지 알기 쉬운 장점이 있다. 단, 중앙 서버가 다운될 경우 그동안은 업무가 마비되는 단점이 있다. 그리고 서버의 정보가 날아갈 경우 모든 히스토리가 날아가게 된다. 협업의 규모가 커지면 수정 충돌 문제 등이 발생할 수 있다.
비유해보면 이 나무위키의 문서 편집 시스템이 간단한 중앙집중식 버전 관리에 속한다. 대표적으로 Subversion이 있다.

3.3. 분산 VCS


파일을 저장하는 서버가 있는 것은 동일하지만 수정을 위해 프로젝트 전체를 로컬에 다운 받은 뒤 수정한다.
중앙 서버가 다운되더라도 개별 사용자들은 작업이 가능하고 서버가 날아가도 다운 받은 내용은 남아있기 때문에 가장 안정적이다. 수정시에도 현재 코드는 나 혼자 수정하고 있기 때문에 충돌의 염려 없이 수정할 수 있으며, 최종적으로 서버에 올릴 때만 신경써서 머지(Merge)해주면 된다.
대표적으로 Git이 있다.

4. 목록


  • Git: 현재 버전 관리 시스템의 최고점유, 메이저, 대명사. 비주얼 스튜디오같은 메이저 IDE에서도 아예 개발 환경에 클라이언트를 내장한지 오래되었다.[1]
  • BitKeeper
  • CVS: 90년대에 개발되어 널리 쓰였던 버전 관리 시스템. Subversion에 밀려 역사의 뒤안길로 사라졌다.
  • Mercurial: Git과 같은 분산형 버전 관리 시스템. Git보다 직관적이고 쉽지만 덜 유연하다. Git이 Subversion을 잡아먹고 사실상 표준으로 자리잡는 동안 만년 3인자 자리에서 벗어나지 못하고 있다.
  • Subversion: 2000년에 CollabNet이 개발하고 이후 아파치 소프트웨어 재단 소유로 넘어왔다. 2000년대 중반까지 널리 쓰으나 2010년도 이후 Git에 맹렬하게 추격당해 시장의 지배권을 내주었다. 중앙집중형 구조를 취하기 때문에 Git에 비해 쓰기 쉽지만 협업에는 불리하다.

5. 관련 문서



[1] MS는 git을 잘 쓰다 아예 GitHub를 인수해버렸다.