[Git] 깃(Git)과 깃허브(Github)
깃 Git (무료, 오픈소스)
- 컴퓨터 파일의 변경사항을 추적하고 여러 명의 사용자들 간에 해당 파일들의 작업을 조율하기 위한 분산 버전 관리 시스템(소프트웨어)
버전 관리 시스템은 소프트웨어 개발에서 소스 코드 관리에 주로 사용되지만, 변경 사항을 지속적으로 추적하기 위해 사용될 수도 있다. 깃뿐만 아니라 Mercurial, Bitkeeper, Bazaar 등이 분산 버전 관리 시스템에 해당한다.
버전 관리 (Version Control, Revision Control)
- 동일한 정보에 대한 여러 버전을 관리하는 것
버전 관리를 사용하면 전체 프로젝트 또는 특정 파일을 이전 상태로 되돌릴 수 있으며, 시간에 따라 변경된 내용을 비교해볼 수 있다. 또한, 누가 그리고 언제 수정했는지 알 수 있기 때문에 문제가 발생하였을 경우, 누가 언제 만들어낸 이슈 인지도 알 수 있다. 현재 버전에서 문제가 발생한 경우, 이전 상태로 쉽게 복구할 수 있고 문제의 원인을 추적해 빠른 문제 해결이 가능한 것이 버전 관리의 장점이다.
버전 관리 시스템 (Version Control System, VCS)
- 파일 변화를 시간에 따라 기록했다가 나중에 특정 시점의 버전을 다시 꺼내올 수 있는 시스템이다.
버전 관리 시스템 유형
버전 관리 시스템은 대상 파일의 버전 정보를 어디에서 관리하냐에 따라 세 가지로 구분할 수 있다.
로컬 버전 관리 시스템 (VCS)
- 가장 기초적인 형태의 버전 관리 시스템으로 내 PC의 특정 경로에 버전 구분이 가능하도록 날짜나 설명 등을 작성하여 파일을 관리하는 방법
로컬 버전 관리 시스템은 내 PC에 문제가 생기거나 작업중인 프로젝트를 삭제할 경우 쉽게 복구할 수 없으며, 중요한 변화가 있는 시점마다 프로젝트를 통째로 압축해서 따로 저장해야 하므로 작업이 번거롭고 용량을 차지한다는 단점이 있다. 또한 프로젝트를 공유하는 작업이 번거롭기 때문에 협업에 이용하기 불편한 형태이다.
워드프로세서, 엑셀 같은 오피스 프로그램이나 대부분의 IDE(Integrated Development Environment) 도구들은 작업자를 위해 로컬 버전 관리 시스템을 제공하는데, 이때 로컬 버전 관리 방식은 단순히 폴더를 통한 관리가 아니라 도구 내부에 Version Database를 생성하여 관리하고, 해당 Database에 각 버전을 차곡차곡 저장하는 방식으로 지원한다.
중앙집중식 버전 관리 시스템 [CVCS(Centralized Version Control System)]
- 버전을 관리하는 서버를 별도로 구성하고 각 사용자가 중앙 서버에서 파일을 받아 사용(Checkout)하고, 로컬에서 변경한 버전을 다시 중앙 서버에 저장(Commit)하는 방식
CVCS는 로컬 버전 관리 시스템이 갖는 단점, 즉 관리가 어렵고 협업을 위한 공유가 불가한 문제를 해결하기 위해 고안되었다. 중앙 서버에서 현재 누가 어떤 작업을 하고 있는지 확인이 가능하고, 특정 폴더에 대한 접근 제한 등 중앙 통제도 가능하다. 또한 모든 사용자의 로컬 데이터베이스가 아닌 중앙의 데이터베이스만을 관리하면 되기 때문에 시스템 유지/보수 측면에서 장점을 가지고 있다.
그러나, 중앙 서버에 문제가 생기면 프로젝트의 모든 히스토리를 잃을 수 있고, 사용자들은 중앙 서버에 연결할 수 없어 다른 사람들과의 협업이나 작업이 불가능하다는 치명적인 단점이 있다. CVCS는 CVS, Subversion, Perforce 등이 있다.
분산 버전 관리 시스템 (DVCS)
- 중앙 서버 역할을 하는 동일한 서버가 여러 곳에 분산되어 있는 형태
DVCS는 중앙 저장소를 복제(Clone)한 로컬 저장소를 여러곳에 두고 로컬에서 유지 및 관리하는 형태로 서버에 문제가 생기면 작업을 진행할 수 없는 CVCS의 단점을 보완하는 시스템이다.
분산되어 있는 로컬 저장소(Local Repository)들은 중앙 저장소[원격 저장소(Remote Repository)]의 가장 최근 버전 정보뿐만 아니라 모든 버전의 히스토리를 갖고 있기 때문에 중앙 저장소에 문제가 생기더라도 전혀 영향을 받지 않으며, 여전히 로컬에서 작업이 가능하고 필요할 경우 쉽게 복원이 가능하다.
깃은 왜 필요한가?
분산 버전 관리 시스템의 특징에서 볼 수 있듯이 깃을 사용하면 체계적인 버전관리를 할 수 있고 팀 프로젝트의 경우 소스코드를 주고받을 필요 없이 같은 파일을 여러 명이 동시에 작업하는 병렬 개발이 가능해짐으로써 동시에 다양한 그룹과 다양한 방법으로 협업이 가능하다.
저장소 (Repository)
- 파일이나 폴더를 저장해 두는 곳
깃은 원격 저장소와 로컬 저장소 두 종류의 저장소를 제공한다.
- 원격 저장소(Remote Repository) : 파일이 원격 저장소 전용 서버에서 관리되며 여러 사람이 함께 공유하기 위한 저장소
- 로컬 저장소 (Local Repository) : 내 PC에 파일이 저장되는 개인 전용 저장소
깃허브 Github
- 깃의 원격 저장소 전용 서버
깃은 버전관리를 위한 시스템이고, 깃허브는 깃으로 저장돼서 원격 전송된 내역들이 저장되는 공간인 원격 저장소를 제공한다. 즉, 원격 저장소 호스팅 서비스를 제공해 프로젝트를 온라인에 업로드해서 보관하고 다른 사람들과 협업하는 데 사용된다.
깃허브와 같이 깃을 사용해서 클라우드를 쓰듯이 소스들을 업로드해 저장하고 다른 개발자들과 공유할 수 있는 깃 저장소들 중 대표적인 것으로 bitbucket, gitlab 등이 있다.
References
https://git-scm.com/book/ko/v2
Git - Book
git-scm.com