[GIT] 버전 관리(Version Control)

2020. 11. 29. 14:13

 은 많은 개발자들이 버전 관리를 하기 위해 쓰는 프로그램이다. 그런데 최근에는 디자이너들도 버전 관리를 위해 깃을 사용한다고 한다. 나도 깃을 사용하는 개발자로써, 깃을 이용한 버전관리는 개발자에만 국한되서는 안된다고 생각하는 사람이다. 왜냐하면 깃은 그만큼 효율적이기 때문이다. 그렇다면 버전관리는 무엇이길래 자꾸 언급되는 것일까?

 

 

버전 관리 시스템

 

 

 버전 관리를 다루는 메커니즘을 버전관리 시스템이라고 한다. 버전 관리 시스템은 파일 변화를 시간에 따라 기록했다가 특정 시점의 버전을 다시 꺼내올 수 있는 것을 말한다. 생소한 언어를 사용하다보니 말이 되게 어려워진 것 같지만, 우리는 깃이 아닌 파일을 이용해서 버전관리를 하는 것에 굉장히 익숙한 사람이라고 말할 수 있다.

 

 

[그림 1] 로컬 컴퓨터에서의 버전 관리

 

 예전 광고에서 언급된 방식이다. 제로초님의 깃 강의를 보다 알게된 사실인데, 실제로 인사과 분들은 이렇게 파일 이름을 이용하여 버전관리를 한다고 한다. 말씀하신 문장의 시제가 과거형이라 지금은 바뀌었을 수도 있다. 인사과 뿐만 아니라, 대학생 시절 나도 이 방식을 자주 애용했다. 이러한 방식은 되게 간단하고 쉽지만, 작업하던 폴더를 잃어버리거나, 실수로 파일을 고쳐 저장한다면 원본 복구가 어렵다.

 

 

로컬 버전 관리 시스템

 

 

[그림 2] 로컬 버전 관리 (출처:https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control) 

 

 

 이런 이유로 프로그래머들은 오래전에 로컬 버전 관리 시스템(Local Version Control System)이라는 것을 만들었다. 이 방법은 간단한 데이터 베이스를 사용해서 파일의 변경 정보를 관리한다. 사용해보지는 않았지만, 엑셀의 액세스같은 데이터베이스를 이용하여 버전 업된 파일을 저장하는 방식을 말하는 것 같다. 데이터 베이스 자체에 백업된 파일들이 저장되어 있기 때문에, 잘못된 내용을 입력하여 저장하더라도, 그 이전 버전을 꺼내 다시 작업하면 되기 때문에 문제가 없다.

 

 

중앙집중식 버전 관리 시스템

 

 

 하지만, 회사는 대부분 혼자서 일하지 않는다. 프로젝트는 개인이 관리하는 것도 있지만, 팀 단위로 관리하는 것도 있다. 이러한 경우 협업이 필요하다. 로컬 버전관리 시스템은 로컬 내 각각의 데이터베이스가 있는 메커니즘이라 협업에는 적합하지 않다. 따라서 개발자는 팀원들이 접속할 수 있는 중앙서버를 만들었다. 그리고 중앙서버에 버전 관리 용 데이터베이스를 만들어 팀원 모두가 하나의 공유 데이터베이스를 이용하여 버전 관리를 할 수 있게 했다.

 

 

[그림 3] 중앙집중식 버전 관리(출처: https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control)

 

 그런데 로컬 버전 관리 시스템, 중앙 집중식 버전 관리 시스템은 공통적인 취약점을 가지고 있다. 어떤 해커가 사용하고 있는 서버(컴퓨터)를 해킹해버리면, 그동안 노력했던 것들이 소용없어지는 결과가 발생한다. 이러한 결과는 두 버전의 취약점으로 이어진다.

 

 

분산 버전 관리 시스템

 

 Git, Mecurial, Bazaar, Darcs같은 프로그램이 여기에 해당된다. 분산 버전 관리 시스템은 파일의 마지막 스냅샷을 체크아웃하지 않는다. 즉, 파일의 이름을 바꿀 필요가 없다. 저장소를 히스토리와 더불어 전부 복제하기 때문에 서버에 문제가 생겨도 클라이언트 중에서 아무거나 골라 서버를 복원할 수 있다.

 

 

[그림 4] 분산 버전 관리 시스템(출처: https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control)

 

 

 게다가 대부분의 분산 버전 관리 시스템 환경에서는 원격 저장소가 존재한다. 원격 저장소가 많을 수도 있다. 그래서 사람들은 다양한 그룹과 다양한 방법으로 협업할 수 있다. [그림 5]를 보면 이러한 구조를 충분히 이해할 수 있을 것이다.

 

참고 자료

'' 카테고리의 다른 글

[GIT] Git과 Github  (0) 2020.11.30