왜 버전 관리 시스템(version control, revision control)을 사용해야 할까? 성공한 프로젝트 개발자에게는 너무나 당연한 명제로 생각 되고 있기 때문에 오히려 왜 사용하지 않으면 안된지를 말하는 것이 쉬울지도 모르겠다. 버전 관리 시스템을 사용해야 하는 이유를 ‘협업’과 ‘변화’에서 찾아야 한다고 생각한다.

소프트웨어 개발에 있어서 항상 일정의 문제와 요구사항의 변화는 개발의 역사와 함께 지금까지도 가장 풀기 어려운 문제로 여겨지고 있다. 일정 관리와 요구사항 변화만 뺀다면 소프트웨어 개발은 지금보다 훨씬 쉬워질지 모른다. 하지만 이 두 가지 사항을 배제한 성공한 프로젝트는 아직까지 없다 라고 확신할 수 있다. 어떤 형태든 고객을 빠르게 만족시켜야 하는 것이 소프트웨어 성공을 결정 짓는 열쇠가 되기 때문이다. 우리는 이런 문제를 해결하는데 있어서 버전관리 시스템을 통해 얻을 수 있는 장점은 다음과 같다.

첫째로, 버전 관리 시스템을 사용함으로써 현재 개발중인 버전과 릴리즈 된 버전을 분리할 수 있다. 같은 소스의 여러 리비전(revision)을 관리할 수도 있다. 리비전을 관리한다는 말은 현재 작업한 버전과 어제 완료하여 출시한 버전으로 따로 구분할 수 있다는 말이다. 이것이 가능함으로써 버전관리 시스템 이전에 우리가 해왔던 일일이 소스를 복사해 보관하고 다른 리비전과 현재 리비전을 수동으로 비교해가며 힘들게 병합(merge) 했던 일들이 손쉽게 해결됐다. 또한 새로운 릴리즈 버전을 준비하면서도 이전 버전의 버그 수정, 적용도 손쉽게 되었다.

두 번째로, history 관리 기능이 강력하다. 공동 작업을 하다 보면 누가 어떤 부분을 수정해 문제가 되었는지 언제 수정되었는지 알 수 없는 경우가 많았다. 다른 사람이 수정한 코드를 제대로 알지 못해서 중복된 코드를 생산해 내거나 알 수 없는 버그를 만들어 내기도 했다. 버전 관리 시스템은 막강한 history기능을 제공함으로써 소스의 추가, 수정, 삭제 등을 모두 추적할 수 있고, 혹시 누가 잘못 수정한 내용이 있다 하더라도 손쉽게 이전으로 돌릴 수 있는 기능을 제공한다.

세 번째로 중앙 집중적 소스관리이다. 버전 관리 시스템 이전에는 개발자 PC에만 존재하는 소스가 있고 여러 가지 이유로 소스가 유실되는 경우도 많았다. 또, 소스 저장소가 여러 군데로 분산되어 있었기 때문에 백업 및 관리하기도 어려웠었다. 개발사에서 가장 큰 자산이 되는 것을 꼽으라면 사람 이외 소스코드를 생각할 수 있을 것이다. 소스코드야 말로 회사가 투자한 결과물의 결정체라고 생각할 수 있다. 이런 결정체를 버전 관리 시스템을 사용함으로써 소스코드를 안전하게 보관할 수 있게 해준다.

국내에는 아직 개발사라고 하면서도 아직 버전 관리 시스템을 사용하지 않는 회사들이 상당히 많은 것으로 알고 있다. 이름만 대면 알만한 회사들도 사용하지 않고 있는 곳도 실제로 알고 있다. 버전 관리 시스템을 도입하는 초기에는 오히려 불편한 것이라고 생각되어 반발이 있을 수 있지만 장기적으로 봤을 때 회사에 분명한 이익을 가져다 줄 것이므로 반드시 도입되어야 한다.

현재 CVS(Concurrent Versioning System)를 시작해서 Subversion, 머큐리얼(Mercurial), Git(분산 버전 관리 시스템) 등 수많은 버전 관리 시스템들이 존재하지만 각각의 장단점이 존재하기 때문에 상황에 맞게 어떤 것을 써도 상관없다. 기능은 약간씩 다르지만 이것들의 공통적인 목표는 ‘협업’과 ‘변화’에 잘 대응하는 개발 환경 구축을 도와주는데 있다. 협업을 통한 일정 통제와 요구사항 변화에 대응에 성공한다면 그 프로젝트는 거의 절반의 성공은 이루고 시작하는 것과 다름 없을 것이다.