Git, Github란 무엇일까?

깃허브 로고이미지

요즘 대중적으로 널리 사용되고 있는 Git은 대부분의 개발자들이라면 능숙하게 사용할 수 있을 뿐만 아니라 많은 기업에서도 Git을 선택해서 사용하고 있습니다. Git은 버전을 편리하게 관리할 수 있도록 도와주는 도구입니다. 우리가 타임머신을 타고 원하는 순간으로 가고 싶은 거처럼 우리가 작업하고 있는 파일들을 원하는 순간으로 다시 돌아갈 수 있게 만들어주는 도구입니다. 많은 개발자들이 자신의 프로젝트를 Github에서 관리하고 있고 새로운 회사에 들어갔을 때 Git과 Github를 잘 알고 있다면 협업할 때 정말 멋지게 할 수 있기 때문에 선배들에게도 사랑을 받을 수가 있습니다. 이처럼 많은 사람들과 많은 기업에서 이용되고 있는 Git을 잘 배워 두시면 경쟁력 향상에 도움이 될 수 있습니다.

 

 

 

 Git - Version Control System

Git에 대해서 조금만 더 자세히 알아보면 Git은 VCS중의 하나로 VCS는 Version Control System의 약자입니다. Git과 같은 VCS를 이야기하면 많은 분들이 코드만 관리할 수 있는 거라고 오해하는 경우가 많습니다. 자신의 노트 텍스트 파일을 버전으로 관리해서 Github와 함께 연동해서 사용하는 경우도 있습니다. 디자이너 분들이 라면 이미지와 같은 그래픽 파일뿐만 아니라 다양한 레이아웃 파일들도 이용할 수가 있습니다. 컴퓨터에 있는 대부분의 파일들을 Version Control System을 이용해서 관리할 수가 있습니다. 이런 Version Control System이 없었을 때는 폴더별로 버전에 이름을 붙여서 일일이 수동적으로 관리하는 경우가 허다했습니다. 이것을 개선하기 위해서 CVS, Subversion, Perfore와 같은 소프트웨어가 나왔습니다.  이런 소프트웨어는 Centralized Version Control이라고 불립니다. 바로 서버에 히스토리를 관리해서 각각의 개발자들이 원하는 내용을 서버에 업데이트해서 즉각적으로 동기화가 이루어지는 시스템입니다. 이런 Centralized Version Control의 문제점은 서버에 문제가 생기면 많은 개발자들이 일을 하지 못하는 경우가 많고 오프라인에서 인터넷이 없을 때 일을 하지 못하는 단점이 있었습니다. 이런 문제점을 개선하기 위해서 나온 것이 바로 Distributed Version Contorl입니다. 서버에만 히스토리의 정보가 있는 것이 아니라 모든 개발자들이 동일한 히스토리 정보를 가지고 있는 것을 뜻합니다. 이렇게 분산된 시스템을 이용하게 되면 서버에 문제가 생기거나 서버가 다운이 되어도 각각의 개발자들이 동일한 히스토리를 가지고 있기 때문에 서로의 정보를 이용해서 서버를 복원하고 또 계속 일을 이어나갈 수 있습니다. 당연히 인터넷이 없어도 오프라인에서 일을 진행할 수 있는 큰 장점도 있습니다. 이런 서버는 회사에서만 이용할 수 있는 프라이빗 한 서버를 이용하는 경우도 있고 Git이나 Bitbucket과 같은 클라우드를 이용하는 경우도 있습니다. 이중에서도 Github가 대중적으로 많이 이용되고 있습니다.

 

 

 

 Git의 역사와 탄생

Git은 아주 오래전에 리눅스 커널 팀에서 매 버전마다 새로운 패치가 발행이 되었는데 이렇게 수동적으로 하는 것을 개선하고자 Bitbucket라는 버전 관리 시스템을 도입하게 되었습니다. Bitbucket가 무료에서 유료로 바뀌면서 리눅스 커널의 창시자는 스스로 Bitbucket처럼 분산형이지만 미친 듯이 빠르고 변경사항을 적용했을 때 일관적이고 안전하게 할 수 있는 제품을 만들게 됩니다. 그래서 2005년 Git은 세상에 나오게 됩니다. 기존의 버전 관리 시스템은 델타 베이스였습니다. 델타 베이스의 가장 큰 문제는 버전별로 달라진 내용들만 가지고 있기 때문에 버전을 변경할 때 변경된 사항들을 계산해서 어떤 부분을 적용해야 되는지 계산하는 시간이 많이 걸리고 이것에서 문제점이 많이 발생하게 됩니다. 그에 반대로 Git은 델타 베이스가 아니라 프로젝트의 전체적인 내용을 스냅샷 해서 가지고 있습니다. 이렇게 프로젝트 전체적인 내용을 가지고 있기 때문에 버전들 사이를 자유자재로 이동이 가능하고 또 뒤에서 나오는 브랜치들 사이에서 이동이 굉장히 빠르게 오류가 없이 적용될 수 있습니다.