logo
Published on

Git 그거 왜 씀?(대체 가능한 것이 존재할까?)

Authors
  • avatar
    Name
    Kevin(서희원)
    Twitter

최근 운좋게도 오픈소스 컨트리뷰션 아카데미 체험형 멘티에 선발되었다. 그래서 Git과 관련한 수업을 듣다 보니 문득 ‘Git은 많은 회사에서 사용하는 것과 별개로 다른 버전 관리 시스템에 비해 기술적으로 더 좋을까?’라는 생각이 들었다. 그래서 이번엔 우리가 Git을 왜 사용해야 하는 지 살펴보고, 다른 버전 관리 시스템들을 살펴보겠다.

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

버전 관리 시스템은 파일 변화를 시간에 따라 기록했다가 나중에 특정 시점의 버전을 다시 꺼내올 수 있는 시스템이다. 그렇기 때문에 우리가 작성하는 코드 뿐만 아니라 실질적으로 컴퓨터의 거의 모든 파일에 버전 관리가 가능하다. (여담으로 필자는 컴퓨터를 사용하지만 개발과 거리가 먼 사람들도 백업을 위해 알아두면 좋다고 생각한다.)

버전 관리 시스템을 통해 특정 수정 내역 확인, 프로젝트 버전 되돌리기 등을 할 수 있다. 만약 협업을 할 경우, 프로젝트의 오류를 누가 언제 냈는 지 확인 가능하다. 이런 기능들을 큰 노력 없이 버전 관리 시스템으로 쉽게 이용 가능하다.

로컬 버전 관리

말 그대로 자신의 컴퓨터(로컬)의 있는 파일의 버전을 관리할 때 사용한다.

대표적으로 RCS라는 프로그램이 있다.

보통 저장소 내 파일들을 훑어 보며 추적한다. 그리고 혼자서 문서를 작성할 경우 로컬 버전 관리 프로그램을 사용하는 것이 좋다.

하지만 컴퓨터가 부서지거나, 파일이 삭제되는 일이 발생하면 복구할 수 없다. 그리고 여러명이 협업하기에는 네트워크 상에서 매우 제한적이라 사용하기 힘들다.

중앙 집중식 버전 관리(CVCS)

위의 로컬 버전 관리 프로그램을 사용할 경우 다른 사람들과 협업하기 힘든데, 이를 해결하기 위해 나타난 것이 중앙 집중식 버전 관리 시스템이다.

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

파일을 관리하는 서버가 따로 있고, 클라이언트가 서버에게 파일을 받아 사용한다. 그래서 모두 각각 무슨 작업을 하는지 확인하고 관리할 수 있다.

하지만 중앙 서버가 고장나버린다면 협업이 불가능하고 백업도 할 수 없다.(위의 로컬 버전 관리와 비슷하다.)

분산 버전 관리(DVCS)

위에서 계속 언급된 단점을 해결하기 위해 저장된 버전들을 클라이언트와 서버 둘다 저장해 놓는다. 그렇게 하면 클라이언트, 서버 중 하나가 고장나도 다른 곳은 버전들이 남아 있기 때문에 복원이 가능하다.

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

하지만 기존 중앙 집중식 버전 관리와는 다르게 러닝커브가 있고, 모든 변경 이력을 저장하기 때문에 저장소의 크기가 매우 커질 수 있다.

사용 가능한 버전 관리 시스템

Git을 포함하여 다음은 버전 관리 시스템들에 관한 설명이다.

RCS

RCS는 https://www.gnu.org/software/rcs/ 에서 확인 가능하다.

먼저 RCS는 1983년 Walter F. Tichy of Purdue University에 의해 버전 3으로 처음 세상에 등장했다. 그리고 업데이트가 중단되었을 것 같다고 생각했는데 2022년까지 업데이트가 진행되었다.

RCS에 관한 이야기는 다른 블로그들에서 설명하는 내용은 없어서 일단 공식 문서의 Overview를 일부 해석해 보면서 살펴보았다.

RCS는 여러 버전의 파일들을 다룰 수 있다. 또한 저장, 되돌리기, 로그, 식별 그리고 버전들을 합칠 수 있다. 그리고 자주 바뀌는 파일들에게 유용하다.(예를 들어, 프로그램, 문서 등이 있다.)

정상적인 설치를 하면 다음과 같은 명령어를 포함한다: ci, co, ident, merge, rcs, rcsclean, rcsdiff, rcsmerge and rlog ( Chapter 2 [Usage], page 7을 참고하라). RCS는 작고 빠른 프로그램이며 실제로 배포에서 일부 가능성을 보여줄 수 있는 스크립트 rcs freeze도 포함된다.

RCS는 하나의 파일시스템 혹은 컴퓨터에 혼자서 버전들을 저장하며 작동한다. 다른 버전 컨트롤 시스템들과는 어떤 작업을 하는지에 따라 다르다.

CVS

CVS는 https://savannah.nongnu.org/projects/cvs에서 확인 가능하다.

Dick Grune에 의해 1986년 만들어 졌으며, 현재 CVS는 2015년을 마지막으로 업데이트 소식이 없다.

현재는 많은 회사나 프로젝트에서 다른 버전 관리 시스템으로 변경하여 사용하고 있지만, 가끔 CVS를 사용하는 곳이 있다(..)고 한다.

CVS는 매우 가볍고, 배우기 쉽지만, 그만큼 작은 팀에서 사용할 수록 좋은 프로그램이다.

하지만 매우 큰 용량의 파일이나 저장소를 다루는 데 속도가 매우 느리며, 암호화나 접근 제어 메커니즘을 제공하지 않아 보안에 취약하며, 기술적으로 제공하는 옵션이 다른 프로그램에 비해 적다.

Git

Git은 https://git-scm.com/book/ko/v2에서 확인 가능하다.

2005년에 ****Linus Torvalds(참고로 이름을 보면 알듯이, 리눅스를 만든 사람이기 하다)에 의해 만들어 졌다.

사실상 현재 버전 관리 시스템에서는 표준이라 봐야한다.

Git은 다음과 같은 장단점을 가지고 있다.

장점

  • 분기 및 병합 기능을 제공하여 개발자가 여러 목적(실험, 기능 개발, 버그 수정 등)을 위해 사용 가능하다.
  • 많은 코드를 가진 파일이 있어도 퍼포먼스 상 성능이 뛰어나다.
  • 분산된 모델을 사용하여 개발자들 각각의 영역에서 유연하고 협업하기 쉽게 도와준다.
  • 수 많은 사람들이 사용하면서 큰 커뮤니티가 있다.(어려움이 있을 때, 도움을 쉽게 받을 수 있다.)

단점

  • 다른 버전 관리 프로그램에 비해 러닝커브가 심하다.(초보자에게는 복잡하게 느껴질 수 있다.)
  • 세분화된 접근 제어를 제공하지 않아서 특정 상황에서 제한될 수 있다.

Mecurial

Mecurial에 관한 정보는 https://www.mercurial-scm.org/에서 확인 가능하다.

2005년 Matt Mackall에 의해 만들어졌다.

Git과 2011년 기준 서로 경쟁하기도 했던 프로그램이었다.

그리고 Git과 같은 유형의 프로그램이라 유사한 점이 많지만, 차이점을 위주로 설명하자면 다음과 같다.

GitMecurial
만들어진 언어C, bsh(Bourne Shell), PerlPython
목표수많은 병렬 브랜치를 전제로 하여 만들었다.배우고 사용하기 쉽게 만들어졌다.
사용성필수적인 기능만 간단히 있다.(자율성이 높다.)각각의 도구가 고도로 완성된 형태를 가지고 있다.
초기 설정일반적인 설정을 제공하고 있지 않다.거의 바로 시작할 수 있는 환경을 제공한다.
성능프로젝트 규모에 비례하여 저장소의 규모가 매우 빠른 속도로 증가한다.완만하게 선형적으로 증가한다. 하지만 오류가 있을 때, 저장소에 영향을 적게 받는다.

마무리

Git에 관한 대체 가능한 프로그램이 존재할 지에 관해 살펴보았다. 이미 Git자체가 상당히 큰 프로젝트에 초점을 맞춘 프로그램이므로 만약 적은 인원의 프로젝트를 진행한다 하면 시험삼아 다른 버전 관리 프로그램을 다뤄보는 것은 어떨까 싶다. 이 글은 나중에라도 글을 수정할 기회가 생긴다면 다른 프로그램(Bazaar 등)을 소개 할 예정이다.

확실히 이미 Git을 사용하는 사람들이 대다수라서 자료를 찾을 때, RCS, CVS는 거의 없다시피하고, 그나마 Mecurial은 2010년대 초반 자료들이 많아 찾기 쉬웠다. 그리고 2000년대 후반 ~ 2010년대 초반에 개발하신 분들은 버전 관리 프로그램을 어떤 것으로 고를 지 의견이 나뉘었던 시기인 것 같다.

레퍼런스