[Git] 버전 관리 시스템의 종류

    이전글

    2023.06.19 - [본업/etc.] - [Git] 버전 관리 시스템(Version Control System)의 역사?


    로컬 버전 관리(Local Version Control) 시스템

    가장 기본적인 형태의 버전 관리 시스템이다.

    개발자가 하나의 로컬 컴퓨터에서 작업을 수행, 간단한 데이터베이스 등을 사용해 버전을 저장하고 관리한다.

    데이터베이스에 파일의 변경 사항이 저장되어 있기 때문에 언제든지 특정 버전으로 복원하고 변경 내역을 확인, 비교할 수 있다.

    다만, 이러한 환경은 다수의 개발자가 동시에 협업을 하기 힘들고, 모든 파일, 버전과 같은 데이터가 하나의 로컬 컴퓨터에 저장되기 때문에 데이터 손실의 위험이 매우 크다.

    대표적인 예로는 RCS, SCCS 등의 시스템이 있다.

    중앙 집중식 버전 관리(Centralized Version Control) 시스템

    중앙 서버가 존재하며 여기에 모든 파일과 변경 내역이 저장되고 관리된다.

    파일과 변경 내역을 주고 받는 통신의 관점에서는 클라이언트-서버 모델로 동작한다.

    따라서 다수의 클라이언트, 즉 다수의 개발자가 동시에 작업할 수 있는 구조다.

    개발자는 서버로부터 특정 파일 또는 버전을 다운로드 받으며 이 행위를 체크아웃(checkout)이라 한다.

    작업 후 변경 사항을 서버로 업로드하며 이 행위를 커밋(commit)이라 한다.

    중앙 서버에 데이터가 존재하기 때문에 로컬 버전 관리 시스템에 비해 데이터 유실의 위험도도 낮고 안정성도 높지만, 중앙 서버 자체에 문제가 발생하면 전체 프로젝트가 마비될 수 있다.

    대표적인 예로는 CVS, Subversion, Preforce 등의 시스템이 있다.

    분산 버전 관리(Distributed Version Control) 시스템

    로컬 버전 관리 시스템과 중앙 집중식 버전 관리 시스템의 각 단점을 극복한 시스템이다.

    먼저 개발자는 중앙 서버(여기서는 원격 서버, 혹은 원격 저장소라고 부르는게 맞다)로부터 특정 버전을 선택해 내려받는 것이 아닌, 전체 저장소를 로컬에 복제해 작업을 시작하며 이를 클론(clone)이라 한다.

    이렇게 되면 모든 개발자의 로컬 컴퓨터에 프로젝트의 전체 복제본이 존재하기 때문에 원격 저장소에 문제가 생겨도 로컬에서 작업을 계속 이어나가거나 로컬로부터 원격 저장소를 복구할 수 있다.
    (처음에 클론만 잘 받아놓은 상태라면 네트워크가 유실된 상태에서도 로컬에서 계속 작업 가능하다)

    작업을 완료한 후 개발자들은 서로의 변경 사항을 원격 저장소에 업로드, 이를 통합할 수 있다.

    로컬 저장소에서 원격 저장소로 업로드하는 것을 푸쉬(push), 변경 사항을 통합하는 것을 머지(merge)라고 한다.

    단, 로컬 버전 관리 시스템이나 중앙 집중식 버전 관리 시스템에 비해 명령어가 많은 편이기에 초기 학습의 진입 장벽이 높다.

    대표적인 예로는 Git, Mercurial, Bazaar, Darcs 등의 시스템이 있다.

    댓글

    Designed by JB FACTORY