찰리의 놀이터

[Git] 형상(버전)관리 - Local VCS, CVCS, DVCS 본문

Git

[Git] 형상(버전)관리 - Local VCS, CVCS, DVCS

차알리 2023. 2. 24. 13:14

형상관리(Configuration Management)

버전관리(Version Control)이라고도 합니다.
소프트웨어의 변경사항을 체계적으로 추적하고 통제하는 것으로, 형상 관리는 일반적인 단순 버전관리 기반의 소프트웨어 운용을 좀 더 포괄적인 학술분야의 형태로 넓히는 근간을 이야기합니다.

버전관리(제어)시스템(VCS, Version Control System)

버전관리 시스템은 특정 파일의 시간 경과에 따른 버전 스냅샷(Snapshot) 변경 사항을 만들어 파일의 변경 사항을 추적하는 시스템입니다.
여기서 스냅샷이란, 특정 시간에 데이터 저장 장치의 상태를 별도의 파일이나 이미지로 저장하는 기술을 의미합니다.
스냅샷 기능을 이용하여 데이터를 저장하면 유실된 데이터 복원과 일정 시점의 상태로 데이터를 복원할 수 있습니다.
쉽게 말해서, 파일의 변화를 시간에 따라 기록해두었다가 특정 시점 버전을 추후에 꺼내오거나, 그 버전으로 되돌릴 수 있는 시스템입니다.

우리가 사용하는 파일을 형상관리하지 않고 저장한다고 가정해보겠습니다.

 


스크린샷 파일이 4개가 있는데, 여기서 각 스크린샷은 조금씩 변화를 가지고 있습니다.
제일 오른쪽 스크린샷부터 제일 왼쪽의 스크린샷 순서로 변하고 있을 때, 각 이미지가 만약 1GB라면 총 4GB를 차지하게 됩니다.
형상관리 시스템을 사용하면 변경사항만 추적하고 통제하기 때문에 하나의 파일로 관리할 수 있습니다.

형상관리 시스템의 장점

  • 파일 및 프로젝트를 이전 상태(버전)으로 되돌릴 수 있습니다.
  • 시간에 따른 수정사항을 비교할 수 있습니다.
  • 누가, 언제 수정했는 지 확인할 수 있습니다.
  • 파일을 잃어버리거나 잘못 수정한 경우 쉽게 복구할 수 있습니다.

형상관리 시스템은 Local VCS, CVCS, DVCS로 나눌 수 있습니다.

Local VCS(Version Control System)

로컬 VCS는 사용자가 자신의 파일을 유지하거나 저장하고, 파일을 관리하는 접근 방식입니다.
하지만, 파일의 변경사항을 유지 및 관리하는 것은 쉽지 않습니다.
파일을 덮어쓸 수도 있고, 잘못 저장했다가는 기존에 저장된 내용이 날아갈 수도 있습니다.

그래서 프로그래머들은 로컬 VCS에서 모든 변경 사항을 유지하는 데이터베이스를 만들어서 관리하였습니다.

 

  • 간단한 데이터베이스를 사용하여 파일의 변경 정보를 관리합니다.
  • 대표적으로 RCS(Revision Control System)가 있으며 여전히 많은 회사가 이용하고 있습니다.
  • RCS는 기본적으로 파일에서 변경되는 부분(Patch set)을 관리하며, 이는 특별한 형식의 파일로 저장하고, 일련의 Patch set을 적용해서 모든 파일을 특정 시점으로 되돌릴 수 있습니다.

CVCS(Central Version Control System)

SVN(SubVersioN) 또는 CVS(Concurrent Version System)으로도 알려진 중앙 집중식 버전관리 시스템입니다.
로컬 VCS와 달리 서버에 어플리케이션의 변경 내역과 함께 애플리케이션의 스냅샷을 저장합니다.

 

  • 파일을 관리하는 서버가 별도로 있고 클라이언트가 중앙 서버에서 파일을 받아서 사용(Checkout)합니다.
  • 관리자가 꼼꼼하게 권한 제어를 할 수 있다는 장점이 있습니다.
  • 서버가 연결되지 않는다면 백업도 협업도 진행할 수 없다는 단점이 있습니다.
  • 서버의 저장장치에 문제가 생기면 프로젝트의 모든 히스토리를 잃을 수 있습니다.

DVCS(Distributed Version Control System)

분산형 버전관리 시스템은 CVCS와 상반되는 개념으로, 서버 측이 아닌 개발자 또는 클라이언트 측에서 프로젝트의 모든 관리 및 추적을 가능하게 하는 시스템입니다.
인터넷 연결 없이도 버전관리가 가능하며, 인터넷이 연결되면 변경 사항을 서버에 저장할 수 있습니다.
DVCS에는 Feature Branch Development와 Trunk Branch Development가 있습니다.

 

  • 대표적으로 Git, Mecurial, Bazaar, Darcs 등이 있습니다.
  • 클라이언트가 단순히 파일의 마지막 스냅샷을 Checkout하지 않고, 저장소 자체를 히스토리와 함께 모두 복제하는 방식입니다.
  • 서버에 문제가 생겼을 경우에도 복제물로 작업을 진행할 수 있습니다.
  • 대부분 DVCS에서는 리모트 저장소(서버 저장소)가 존재합니다.
  • 많은 사람들이 동시에 이용할 수 있으며, 각각의 인원이 다양한 작업을 수행할 수 있습니다.

Feature Branch Development

Feature 브랜치 개발은 트래커에서 브랜치를 분리하여 기능을 개발하는 방법입니다.
기능 개발이 완료되면 MR(Merge Request) 또는 PR(Pull Request)를 요청한 뒤 승인되면 메인(마스터) 코드에 병합하고 승인된 분기는 삭제하는 방식입니다.

https://nvie.com/posts/a-successful-git-branching-model/

Trunk Based Development(Monorepos)

메인 코드와 Trunk Branch만 사용하여 새로운 기능을 개발하는 방법입니다.
개발에서는 마스터만 사용하여 Commit 또는 Push를 진행합니다. 커밋 히스토리에 변경사항 시각화 시 Branch가 표시되지 않아야합니다.

https://devops.paulhammant.com/about.html