본문 바로가기

기본공부/깃(Git)&깃허브(GitHub)

Git(깃) / GitHub(깃허브)

Git(깃)

분산 소스 버전 관리 시스템(Distributed Version Control System)으로서 서버를 분산시켜 구축할 수 있다.

 

Git는 개발자의 시스템에 있는 복사본 디렉터리를 하나의 저장소 서버로 삼을 수 있다. 개발자는 수정 후 개발 팀장의 저장소로 수정된 소스를 푸시(Push)한다. 개발 팀장은 수정된 소스를 리뷰한 후 문제가 없다고 판단되면 바로 중앙 서버에 커밋한다. 여러 개발자가 수정한 소스를 개발 팀장의 복사본 디렉터리에 보내면 Git는 강력해진 통합(merge) 기능으로 각 소스를 통합하여 중앙 서버로 한 방에 커밋하는 기능을 제공한다.

 

속도 문제 또한 개선된다. SVN(SubVersioN)을 사용할 때는 중국에 위치한 SVN 서버의 네트워크 속도가 느리고, 개발자의 커밋 요구가 많을 때, 커밋를 걸어 놓고 시간을 허비했으나, Git를 도입하고 나서는 분기된 저장소를 로컬에 두었기 때문에 자연스럽게 중앙 서버의 속도에 영향을 덜 받게 된다.

 

깃을 이용하면 누가 어떤 코드를 수정했는지 기록하고 추적할 수 있다. 많은 사람들이 함께 소프트웨어를 개발할 때 유용하다. 관리자는 여러 사람의 코드 중 일부를 합쳐가며 완성본을 만들어갈 수 있다. 버전관리 시스템은 깃 외에도 SVN, CVS 등 여러가지가 있었지만 수천명의 사람들이 이용해도 안정적이며 중앙저장소에 의존하지 않아 속도도 훨씬 빠르다는 장점이 있다.

 

자신의 노트 텍스트 파일을 버전으로 관리해서 깃허브와 연동해서 함께 사용하는 경우도 있고, 이미지와 같은 그래픽 파일 뿐만 아니라 다양한 레이아웃 파일들도 이용할 수 가 있다.

 

CVC(Centralized Version Control)(ex.CVS, SUBVERSION, PERPOSE)는 서버에 히스토리를 관리해서 각각의 개발자들이 원하는 내용을 서버에 업데이트해서 즉각적으로 동기화가 이루어 지는 시스템인데, 문제점으로 서버에 문제가 생기면 많은 개발자들이 일을 하지 못하는 경우가 많고, 오프라인에서 인터넷이 없을 때 일을 하지 못하는 단점도 있다.

 

이런 문제점을 개선하기 위해서 나온 것이 바로 DVC(Distributed Version Control)로 서버에만 히스토리에 정보가 있는 것이 아니라 모든 개발자들이 동일한 히스토리 정보를 가지고 있는것을 말한다. 분산된 시스템을 이용하게 되면 서버에 문제가 생기거나 서버가 다운이 되어도 각각의 개발자들이 동일한 히스토리를 가지고 있기 때문에 서로를 정보를 이용해서 서버를 보관하고, 또 계속 일을 이어나갈 수 있다. 인터넷이 없어도 오프라인에서 작업을 할 수 있다는 것이 장점이다.

 

기존의 버전 관리 시스템은 델타 베이스로 각각의 버전마다 변경된 내용들만 가지고 있는다. 가장 큰 문제점은 버전별로 달라진 내용들만 가지고 있기 때문에 버전을 변경할 때 변경된 사항들은 계산해서 어떤 부분을 적용해야 되는지 계산하는 시간이 많이 걸리고 이 점에서 문제가 많이 발생한다.

 

반대로 깃은 델타 베이스가 아니라 프로젝트의 전체적인 내용을 스냅샷해서 가지고 있다. 프로젝트 전체적인 내용을 가지고 있기 때문에 버전들 사이를 자유자재로 이동이 가능하고 뒤에서 나오는 브랜치들 사이에서 이동이 굉장히 빠르게 오류가 없이 적용 될 수 있다. 각각의 스냅샷은 무겁지 않은데 바로 변경되지 않는 파일들은 예전에 파일들의 링크를 가리키고 있기 때문이다.

 

대부분 사람들이 이용하고 있고, 버전별 백업으로 버전관리 가능, 무료이고, 오픈소스에 동작들이 빠르고, 오프라인에서 작업이 가능하며, 실수 시 다시 고쳐나갈 수 있으며, 쉽고 빠른 브랜칭을 이용해서 각각의 기능별로 브랜치를 만들어서 협업을 효율적으로 할 수 있다.

GitHub(깃허브)

컴퓨터 프로그램 소스를 공유하고 협업하여 개발할 수 있는 버전 관리 시스템인 깃(Git)에 프로젝트 관리 지원 기능을 확장하여 제공하는 웹 호스팅 서비스. 깃허브는 오픈소스 소프트웨어의 중심지(hub) 역할을 하면서 오픈소스 프로젝트가 널리 퍼지는 데 크게 기여하고 있다.

 

깃허브는 깃을 보다 편하게 이용할 수 있게 만든 호스팅 서비스다. 깃은 명령어를 입력하면서 이용해야 하지만 깃허브는 웹 그래픽 기반으로 깃을 이용할 수 있는 환경을 제공했다. 깃에 대한 관심이 높아졌던 덕분에 깃을 쉽게 이용할 수 있는 깃허브에 대한 관심도 자연스레 쏠렸다.

 

깃허브의 가장 강력한 기능은 ‘포크’다. 포크는 내 계정으로 외부 프로젝트 코드 저장소를 그대로 복사해주는 것을 말한다. 깃허브 덕에 소스코드를 복사하고 배포하던 과정을 클릭 몇 번만으로 가능해졌다. 또 웹사이트에 소스코드가 공개되니 검색도 쉬워졌다. 또한 소스코드에 외에 관련 문서나 번역 페이지도 붙일 수 있고, 관련 통계도 제공됐다.

 

깃은 버전관리를 위한 소프트웨어이고, 깃허브는 이 깃으로 저장되어 원격전송된 내역(파일)들이 저장되는 공간을 제공하는 서비스이다. (ex. 깃=영상 찍는 앱, 깃허브 = 유튜브) 깃으로 관리하는 모든 파일과 프로젝트들을 깃허브에 무료로 전송해서 저장이 가능하다. 깃허브는 단순히 내 코드들을 원격으로 백업해두는 곳을 넘어서 전 세계의 오픈소스들이 무료로 공개된다. (오픈소스=코드가 다 공개된 소프트웨어 프로젝트) 이로써 잘못된 기능을 수정하거나, 더 좋은 기능을 구현하는 코드들을 다른 프로그래머에게 제안받을 수 있고, 또 내가 기여할 수도 있다. 잘 알려진 오픈소스 프로젝트에 내 코드가 기여한 기록이 있으면 자신의 실력을 증명할 수 있다.