[Git] 깃(Git), 깃허브(GitHub)란? 버전 관리 시스템(VCS)이란? LVCS, CVCS, DVCS란? - Git 기초(0)

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

버전 관리 시스템(이하 VCS)은 파일 변화를 시간에 따라 기록했다가 나중에 특정 시점의 버전을 다시 꺼내 올 수 있는 시스템이다. 많은 개발자들이 소스 코드를 관리할 때 VCS를 사용하지만, 거의 모든 컴퓨터 파일의 버전을 관리할 수 있다.

 

VCS를 사용하면 각 파일을 이전 상태로 되돌릴 수 있고, 프로젝트를 통째로 이전 상태로 되돌리거나 시간에 따라 수정 내용을 비교해 볼 수도 있다. 누가 문제를 일으켰는지 추적할 수 있고 누가 언제 만들어낸 이슈 인지도 알 수 있다. 또한 파일을 잃어버리거나 잘못 고쳤을 때도 쉽게 복구할 수 있다.

 

따라서 VCS를 이용하면 위와 같은 장점을 누릴 수 있다.

 

 

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

 

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

 

로컬 버전 관리(LVCS)
[그림 1] LVCS (출처 : 참고1)

로컬 버전 관리는 로컬 컴퓨터의 간단한 데이터베이스를 사용해서 파일의 변경 정보를 관리한다. 즉, 하나의 로컬 컴퓨터에서 파일을 관리하는 방식으로 동작한다.

 

 

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

중앙집중식 버전 관리(CVCS)
[그림 2] CVCS (출처 : 참고1)

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

 

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

 

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

 

 

분산 버전 관리(Distributed VCS)

분산 버전 관리(DVCS)
[그림 3] DVCS

 

분산 버전 관리는 단순히 파일의 마지막 스냅숏을 사용(checkout) 하지 않는다. 저장소를 히스토리와 더불어 통째로 복제한다. 서버에 문제가 생기면 이 복제물로 다시 작업을 시작할 수 있다. 클라이언트 중에서 아무거나 골라도 서버를 복원할 수 있다. 즉, 복제물은 모든 데이터를 가진 진정한 백업이다.

 

 

 

깃(Git)이란?

깃은 분산 버전 관리 시스템(DVCS)의 일종이다. 깃은 형상 관리 도구(Configuration Management Tool)라고도 불린다. 깃은 주로 소프트웨어를 개발하는 소스 코드를 효과적으로 관리할 수 있게 도와주는 무료 오픈 소프트웨어이다.

 

깃은 DVCS의 일종이기 때문에 중앙 저장소가 손상되어도 로컬 저장소를 이용하여 원상복구가 가능하다. 또한 로컬 저장소에서 개발을 진행할 수 있기 때문에 인터넷 연결이 필요하지 않아도 되며, 각각의 개발자들이 브랜치(branch)를 통해 개발한 후 합치는(merge) 방식으로 진행할 수 있기 때문에 협업도 쉬워진다.

 

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

 

 

1. Branching and Merging

 

 

Branch and merge
[그림 4] 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
[그림 5] Staging Area

 

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

 

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

 

 

6. Free and Open Source

 

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

 

 

 

깃허브(GitHub)란?

깃허브(GitHub)
[그림 6] 깃허브

 

깃허브는 깃을 지원하는 웹 호스팅 서비스 시스템의 한 종류이다. 쉽게 말하면 깃이 저장소(repository)로 사용하는 클라우드라고 보면 된다. 따라서 로컬에 있는 데이터를 깃허브에 올릴 수도 있고 내려받을 수도 있다.

 

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

 

또한, 깃허브는 눈에 보이는 인터페이스를 제공하기 때문에 사용이 간편하다.

 

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

 

 

 

 


참고

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

반응형

댓글

Designed by JB FACTORY