계발하는 개발자

[VCS: Version Control System] 버전 관리 시스템 본문

👟 Etc

[VCS: Version Control System] 버전 관리 시스템

dev_genie 2023. 8. 22. 14:34

오늘은 대부분의 개발자라면 빼놓지 않고 사용하는 버전 관리 시스템에 대해 알아보겠다.

혼자서 개발하는 경우라면 별도의 시스템이 없어도 되겠지만,

여럿이서 함께 협업할수록 프로젝트 관리를 위한 버전 관리를 필수적이다.

참고로 우리가 자주 사용하는 Git은 밑에서 다룰 분산 버전관리 시스템(DVCS)의 일종이며,

오늘 포스팅은 이 DVCS에 대해 좀더 깊이 다뤄볼 예정이다.

 

목차

  • 버전관리 시스템(VCS: Version Control System)
  • VCS의 종류
    • 로컬 버전관리 (Local VCS)
    • 중앙집중식 버전관리 (CVCS)
    • 분산 버전관리 (DVCS)
      • 깃(Git)/깃허브(Github)

 

버전관리 시스템(VCS: Version Control System)


버전관리 시스템이란 파일 변화를 시간에 따라 기록했다가 나중에 특정 시점의 버전을 다시 불러올 수 있는 시스템을 말한다.

 VCS를 사용하면 선택한 파일을 이전 상태로 되돌릴 수 있고, 변경사항을 비교하고, 변경한 사람 및 변경시기를 추적할 수 있다.

또한 파일을 잃어버리거나 잘못 수정했을 때도 쉽게 복구할 수 있다.

 

VCS는 다음과 같은 종류로 세분화 된다.

 

VCS의 종류


- 로컬 버전관리 (LVCS - Local VCS)

로컬 버전관리는 로컬 컴퓨터의 간단한 데이터베이스를 사용해서 파일의 변경 정보를 관리한다.

즉, 하나의 로컬 컴퓨터에서 파일을 관리하는 방식으로 동작한다.

 

- 중앙집중식 버전관리 (CVCS - Central VCS)

중앙집중식 버전관리는 파일을 관리하는 서버가 별도로 존재하고, 클라이언트가 중앙 서버에서 파일을 받아서 사용한다. 수년간 많은 개발자들이 이 CVCS 방식을 사용했다.

이러한 CVCS 환경은 위 LVCS에 비해 장점이 많다. 누가 무엇을 하고 있는지 알 수 있기 때문에 관리자가 좀더 꼼꼼히 관리할 수 있다. 모든 클라이언트의 로컬 데이터베이스를 관리하는 것보다 VCS 하나를 관리하기가 훨씬 쉽기 때문이다.

하지만 CVCS는 몇 가지 치명적인 결함이 존재한다. 만약 중앙 서버에 문제가 발생하면 아무도 다른 사람과 협업할 수 없으며 백업도 할 수 없다. LVCS와 마찬가지로 이런 문제가 발생하면 모든 것을 잃을 수 있다.

 

- 분산 버전관리 (DVCS - Distributed VCS)

분산 버전관리는 단순히 파일의 마지막 스냅숏을 사용하지 않는다.

저장소를 히스토리와 더불어 통째로 복제하여, 서버에 문제가 생기면 이 복제물로 다시 작업을 시작할 수 있다.

 

- 깃(Git)/깃허브(Github)


깃(Git)

깃은 분산 버전관리 시스템(DVCS)의 일종이며, 형상 관리 도구(Configuration Management Tool) 라고도 불린다.

깃은 주로 소프트웨어를 개발하는 소스 코드를 효과적으로 관리할 수 있게 도와주는 무료 오픈 소프트웨어다.

깃은 DVCS의 일종이기 때문에 중앙 저장소가 손상되어도 로컬 저장소를 이용하여 원상복구가 가능하다.

또한 로컬 저장소에서 개발을 진행할 수 있기 때문에 인터넷 연결이 필요하지 않으며, 각각의 개발자들이 브랜치(branch)를 통해 개발한 후 합치는(merge) 방식으로 진행할 수 있기 때문에 협업도 쉬워진다.

 

깃의 공식 홈페이지에 소개된 깃의 특징은 다음과 같다.


 

1. Branching and Merging

깃은 브랜치(branch)와 합병(Merge)이라는 개념이 있다. 간단하게 소개하자면 브랜치는 말 그대로 가지(branch)라고 볼 수 있다. 나무에서 여러 갈래로 가지가 뻗어나가는 것처럼, 소스 코드도 여러 개의 가지를 뻗어나갈 수 있다. 새로운 아이디어를 적용시켜보거나, 버그를 고치거나, 이전 버전으로 돌아가거나, 패치를 적용시키거나... 많은 가지들을 만들 수 있으며 이것을 합칠(merge) 수 있다.

 

2. Small and Fast

깃은 빠르다. 깃은 거의 모든 동작이 로컬에서 진행되기 때문에 다른 VCS처럼 서버와의 통신에 많은 비용을 들이지 않아도 된다. 또한, 깃은 C언어로 작성되어 있어 속도가 빠르다. 깃의 주요 디자인 목표가 속도와 성능이라고 한다.

 

3. Distributed

깃은 분산되어 있다. 사용자는 전체 저장소를 복제(clone)해서 로컬 저장소로 가져온다. 이는 수많은 백업들이 분산되어 저장되어 있다는 뜻이다. 따라서 중앙 저장소의 장애를 극복하기 쉬워진다.

깃은 분산되어 있기 때문에 쉽게 수 많은 workflow를 가질 수 있다. 이때 수많은 workflow를 합칠 때 문제가 발생할 수 있지만 GitHub 저장소와 같은 것을 사용하여 합병한다면 더 쉽게 관리할 수 있다.

 

4. Data Assurance

모든 파일과 커밋(commit)은 검증되기 때문에 저장소에 넣은 그대로 변하지 않을 것을 보장한다. 즉, 데이터가 변질되지 않을 것이라고 보장한다. 

 

5. Staging Area

다른 시스템들과 다르게 깃은 "Staging Area"라는 것을 사용한다. 이것은 커밋이 일어나는 곳으로 커밋이 일어나기 전 검증을 할 수 있는 곳이기도 하다. 커밋은 이 Staging area에서 repository(저장소)로 파일을 보내는 것을 의미한다.

이때 Staging Area는 변한 파일과 변하지 않은 파일을 구분하고 추적하고 있기 때문에 변화가 있는 파일만 빠르게 골라내어 커밋할 수 있다.

 

6. Free and Open Source

깃은 무료이며 오픈 소스이기 때문에 누구든 사용할 수 있다.

 

깃허브(Github)

깃허브는 깃을 지원하는 웹 호스팅 서비스 시스템의 한 종류다.

쉽게 말하면 깃이 저장소(repositiory)로 사용하는 클라우드라고 보면 된다. 따라서 로컬에 있는 데이터를 깃허브에 올릴 수도 있고 내려받을 수도 있다.

깃허브에 들어가 보면 많은 개발자들이 올려놓은 소스 코드나 프로젝트를 구경할 수 있다. 소셜 네트워크 서비스를 제공하기 때문에 다른 유저의 코드를 참고할 수 있으며, 다른 개발자들과 소통, 협업 등을 쉽게 할 수 있다.

GitHub뿐만 아니라 GitLab, BitBucket 등도 Git을 지원하는 웹 호스팅 시스템이다.

 


* 이해에 도움이 됐던 강의 및 자료 출처:

https://git-scm.com/book/ko/v2 : Git 공식 홈페이지

https://youtu.be/mSv97i-zAOU : 코드프레소 / 형상관리와 Git의 기초 개념(입문자를 위한 Git 시리즈)

 

LIST
profile

dev_genie

@dev_genie

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!