
‘버전 관리(Version Control)’는 파일 변경 사항을 시간에 따라 기록하고, 필요할 때 특정 버전을 다시 호출할 수 있는 시스템을 일컫는 말이다.
간단하게 설명하자면 동일한 정보에 대해 여러 버전을 정의하고 관리하는 것을 의미한다.
소프트웨어 엔지니어링 내에서는 소프트웨어의 소스 코드의 변경 사항을 추적한 내역을 ‘버전 관리’라고 칭한다.
✏️ 형상 관리와 버전 관리
- 버전 관리(Version Control): 동일한 정보에 대한 여러 버전을 관리
- 형상 관리(Configuration Management): 소프트웨어의 변경사항을 체계적으로 관리
형상 관리는 버전 관리를 포함한 소프트웨어 프로젝트와 관련된 모든 변경 사항을 관리한다는 개념이다.
실무에서는 명확하게 구분되어 있지 않고 대체로 비슷한 의미로 사용된다고 한다.
버전 관리를 하는 이유는 다음과 같다.
히스토리 추적 및 관리
소프트웨어의 이전 버전(이력)을 흔히 히스토리라고 한다. 버전 관리 시스템은 필요한 경우 특정 버전으로 쉽게 롤백할 수 있는 기능을 제공한다. 이를 통해 추가, 수정, 삭제 과정에서 발생할 수 있는 예측 불가능한 위험을 줄일 수 있어 대규모 개발 과정을 보다 안전하게 이끌어나갈 수 있다.
백업 및 복구
히스토리 추적이 쉽다는 것은 곧 백업 및 복구가 쉽다는 말과 동일하다. 예상치 못한 이슈가 발생하였을 때 되돌릴 수 없는 경우 이미 검증된 버전으로의 롤백을 통해 안전하게 상태를 복구할 수 있다.
협업에 필수적
프로젝트에서 버전 관리가 사용되는 가장 큰 이유이다.
대부분의 프로젝트는 여러 명의 개발자가 협업하는 형태로 진행된다. 각각의 개발자들은 할당된 일부 기능들을 따로따로 개발하고 하나의 버전으로 합치는 과정으로 이어진다.
버전 관리 시스템은 이러한 작업 환경을 보다 안전하고 효율적으로 만들어준다.
협업 시 흔히 발생하는 충돌을 방지할 수 있고, 이 충돌을 쉽게 해소할 수 있으며 다른 개발자의 작업 내역을 쉽게 확인할 수도 있다.
로컬 버전 관리
로컬에서 버전을 관리하기 위해 많은 사람이 디렉토리로 파일을 복사하는 방법을 사용한다. 매우 간단하기 때문에 자주 사용하지만, 실수로 작업하던 디렉토리를 삭제하거나 잘못 수정, 복사할 수 있는 리스크가 있다.
이러한 이유로 오래전에 로컬 VCS라는 것을 만들었다. 이 VCS는 간단한 데이터베이스를 사용해서 파일의 변경 정보를 관리했다.
중앙집중식 버전 관리(CVCS)
로컬 VCS는 1인 개발 시엔 용이하지만 다른 개발자와 함께 작업할 때 사용하기엔 한계가 있다. 그래서 이를 위해 개발된 것이 CVCS(중앙집중식 VCS)이다. CVS, Subversion, Perforce 같은 시스템은 파일을 관리하는 서버가 별도로 있고, 클라이언트가 중앙 서버에서 파일을 받아서 사용(Checkout)하는 방식으로 이루어진다.
이러한 방식은 누가 무엇을 하고 있는지 알 수 있기 때문에 관리자가 프로젝트를 꼼꼼하게 관리할 수 있다는 장점이 있다. 하지만, 중앙 서버에서 문제가 발생하는 경우에는 프로젝트 전체가 중단되고, 백업할 수 있는 방법이 없기 때문에 최악의 경우 모든 히스토리를 잃게 되는 치명적인 단점이 존재한다.
분산 버전 관리 시스템
이런 치명적인 단점을 보완하기 위해 고안된 시스템이 DVCS(분산 버전 관리 시스템)이다. Git, Mecurial, Bazaar, Darcs가 대표적인데, 이들은 저장소를 히스토리와 더불어 전부 복제한다. clone이라고 불리우는 복제물로 백업이 가능하다. 또한, 대부분의 DVCS 환경에서는 리모트 저장소가 존재하기 때문에 사람들은 동시에 다양한 그룹과 다양한 방법으로 협업할 수 있다.
Git, 1.1 시작하기 - 버전 관리란?, 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
Configuration Management, https://en.wikipedia.org/wiki/Configuration_management