Swimmer

[Git 스터디 1] 버전 관리란? 본문

개념공부/기타

[Git 스터디 1] 버전 관리란?

Zach Choi 2023. 5. 23. 10:43

본 내용은 Git 공식 홈페이지에 무료로 공개된 Pro Git 서적 내용을 정리하였습니다.

Reference : https://git-scm.com/book/en/v2

 

Git은 SW개발자라면 사실 모르면 안되는 개념 ㅎㅎ. 엄청나게 유용하기 때문에 널리 쓰인다. Git이 개발 생산성에 기여하는 바가 상당히 크다.

 

버전 관리란?

버전 관리란 파일의 변경 내역을 기록하고 저장하는 행위이다. 버전 관리 시스템은 파일의 변화 내역을 시간에 따라 기록 및 저장하고 과거의 특정 버전을 불러올 수도 있다. 버전 관리가 SW 개발에 중요한 이유는, 파일이나 프로젝트를 이전 상태로 되돌릴 수 있고, 시간에 따라 수정 내용을 비교 및 추적할 수 있으며, 이슈 발생 시 어떤 버전에서 발생하였는지를 알 수 있기 때문이다. 또한 누가 언제 파일을 변경하였는지 알 수 있다. 파일을 잃어버리거나 오류가 발생했을 때 쉽게 복구할 수도 있다. 보통 버전 관리는 소스 코드를 대상으로 하지만, 거의 모든 컴퓨터 파일들의 버전 또한 관리 가능하다.

 

버전 관리 시스템은 시간이 지남에 따라 개선되어 왔다. 가장 먼저 로컬 버전관리에서 시작해 중앙집중식 버전관리 그리고 최근 흔히 사용되는 분산 버전관리 시스템으로 개선되었다. 이를 하나씩 알아보자.

로컬 버전 관리

로컬 버전관리는 1개 컴퓨터 내부에서만 버전을 관리하는 시스템이다. 컴퓨터에 저장되어 있는 파일의 버전을 관리할 수 있지만 다른 개발자와 협업해야 하는 경우, 프로젝트 파일을 공유하며 협업해야 하는 경우에는 사용할 수 없다.

 

중앙 집중식 버전 관리

다른 컴퓨터를 사용하는 개발자와 협업하기 위해  중앙 집중식 버전관리 시스템이 개발되었다. 이는 파일을 관리하는 서버가 별도로 존재하고, 클라이언트는 서버에서 파일을 받아 (Checkout) 사용한다. 이때 서버에서 버전 변경 내역의 모든 데이터베이스를 받는 것은 아니고 특정 시점의 스냅샷만 받게 된다.

중앙 집중식 버전 관리 시스템은 협업하는 모두가 파일의 변경 내역을 알 수 있고 각자의 진행 업무를 알 수 있다. 이는 관리자가 프로젝트를 관리하기 용이한 시스템이다.

이러한 방식의 단점은, 서버에서 발생하는 문제에 굉장히 취약하다는 것이다. 변경 내역 기록 및 저장이 서버에서만 이루어지므로 서버의 하드디스크에 문제가 생기면 모든 히스토리를 잃게 된다. (각자의 로컬에는 스냅샷만 남아있게 된다.)

 

분산 버전 관리

위 단점을 해결한 것이 분산 버전관리 시스템이다. 분산 버전관리 시스템에서는 클라이언트가 서버로부터 파일의 스냅샷이 아닌 데이터 베이스 전체를 복사한다. 따라서 서버에 문제가 생기더라고 클라이언트에 저장된 데이터베이스로 복원할 수 있고 재작업할 수 있다. Git은 분산 버전관리 시스템으로 Clone시 모든 데이터 베이스를 복사하여 사용하게 된다.

그리고 분산 버전 관리 시스템은 대부분 리모트 저장소(서버)가 존재하고, 리모트 저장소가 1개가 아니라 많을 수도 ㅇㅆ다. 그래서 개발자는 동시에 다양한 그룹과 다양한 방법으로 협업할 수 있다.

Comments