Git이란?
Git 홈페이지에 가면 아래와 같이 Git을 정의하고 있다.
Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.
해당 정의에 나와있듯이, Git은 '버전'을 '분산'해서 관리하는 도구이다.
하나의 큰 프로젝트를 만들다 보면 개발의 진행 상황을 중간 저장해서 체크 포인트를 만들어야 할 필요가 생긴다. 만약 체크 포인트가 없이 개발한다면 개발을 쭉 하다가 과거 시점으로 코드를 되돌리고 싶을 때 과거 해당 시점부터 그 이후에 작성된 코드들을 하나씩 제거해 나가면서 롤백을 해야 할 것이다. 그런데, 돌아가고 싶은 시점 이후로 수백-수천 줄의 코드가 작성되었다면 해당 코드들을 하나씩 다 발라내는 건 너무나도 끔찍한 일이다. 그것보다는, 체크 포인트를 중간에 만들어두고, 해당 시점으로 코드를 되돌리고 싶을 때 그 체크 포인트를 찾아서 손쉽게 되돌릴 수 있도록 하는 게 훨씬 더 편한 방법이다.
그렇다면 체크 포인트를 지정해 롤백하는 게 왜 필요한가? 그건 개발을 할 때 어떤 오류나 문제가 발생할지 모르기 때문이다. 아무리 개발자가 안전하고 효율적인 코드를 만들려고 노력하더라도, 서비스에 예상치 못한 에러나 사이드 이펙트가 발생하는 건 불가피하다. 그럴 때마다 해당 문제의 원인을 직접 다 찾아서 코드를 변경하는 것도 좋지만, 이전 시점의 코드로 롤백한 후 새롭게 코드를 작성하는 게 좀 더 좋은 상황도 종종 있다.
코드를 작성할 때 언제 어디에서 어떤 문제가 발생할지 예상하기 어렵기 때문에, 개발을 하면서 돌아갈 수 있는 체크 포인트를 자주, 많이 만들어놓는 것이 좋을 수 있다. 즉, Git을 사용해 개발 진행 상황에 따라 적절한 시점에 체크 포인트를 만들어두면 이후 문제가 생겼을 시 어렵지 않게 프로젝트가 정상 동작하던 시점으로 코드를 되돌릴 수 있게 된다.
'분산'은 하나의 프로젝트를 여러 사람이 참여해서 만들 경우, 프로젝트의 버전을 여러 사람이 나눠서(분산해서) 개발할 수 있도록 도와주는 것을 의미한다. 만약에 하나의 서비스를 만드는 데 있어 A라는 사람과 B라는 사람이 함께 협업하는 경우를 생각해보자. 동일 시점에 어떤 사람은 A'라는 기능을 만들고 있을 것이고, 다른 사람은 B'라는 기능을 만들고 있을 것이다. 이런 상황에서의 문제는, A가 기능을 만드는 코드 파일에는 B'라는 기능이 없고, B가 기능을 만드는 코드 파일에는 A'라는 기능이 없다는 것이다. 이후에 A와 B가 만든 코드를 하나의 서비스로 합치려고 한다면, A 또는 B가 만든 코드 파일에 다른 사람이 작성한 코드들을 하나씩 옮겨 적는 과정이 필요할 것이다.
Git은 이런 상황에서 유용하다. A가 만든 코드 파일과 B가 만든 코드 파일을 자동으로 합쳐(Merge)주는 것이다. 즉, Git을 사용하면 하나의 프로젝트를 둘 이상의 사람이 '분산'해서 개발하고, 개발한 내용을 문제없이 합칠 수 있다.
정리하면, Git은 프로젝트의 버전을 관리해 이슈 발생 시 이전 시점의 코드로 롤백하기 위한 체크 포인트를 만들어주고, 둘 이상의 사람이 병렬로 작업한 코드를 하나의 코드 파일로 합쳐주는 역할을 해주는 프로그램이다.
Git의 버전 관리 메커니즘
Git은 하나의 프로젝트를 진행하는 과정에서 시간 순서에 따라 체크 포인트를 만든다. 그리고, 체크 포인트마다 '이 체크 포인트는 어떤 변화가 있던 시점이다'라는 것을 기록할 수 있게 지원한다. 즉, 아래와 같이 프로젝트가 시간 순서에 따라 프로젝트의 진행 시점을 쪼개두는 것이다.
현재는 Check point 5 시점에 와있지만, 기존에 만들어둔 체크포인트들이 있기 때문에 원한다면 코드들을 필요한 시점의 코드들로 되돌리는 게 가능하다. 예를 들어서, Check poin 3 시점으로 버전을 이동한다면 프로젝트에 캐러셀과 결제 모듈이 개발되지 않은 시점으로 코드를 되돌릴 수 있다.
만약에 Check point 4번부터 코드에 문제가 있었던 게 확인된다면 Check point 3번 시점으로 되돌린 이후에 다른 방향으로 프로젝트를 전개해갈 수 있다. 그럴 경우, 기존의 체크 포인트가 아닌 새로운 방향의 체크 포인트들을 만들어가면서 원하는 방식으로 프로젝트를 전개해갈 수 있다.
만약에 필요하다면, 프로젝트를 진행하다 갈라진 버전을 하나로 합치는 것 또한 가능한다. 이러한 합치는 기능을 이용해 여러 사람이 하나의 프로젝트에 병렬로 작업을 수행하는 게 가능하다.
이렇게 Git은 원하는 시점의 코드로 돌아갈 수 있는 체크 포인트를 만들고, 필요하다면 해당 체크 포인트로 코드를 롤백하며(시간 여행을 하며), 하나의 프로젝트에 두 개 이상 동시에 진행되는 병렬 작업을 합쳐주는 기능을 제공하여 프로젝트 관리를 수월하게 해준다.
이러한 프로젝트의 체크포인트 및 병합 기록은 깃 설치 시 생성되는 .git
폴더에 저장된다. 참고로 .git
은 숨김 폴더 처리가 되어있기 때문에 별도의 방법으로 접근해야 한다. 접근하면 아래와 같이 해당 프로젝트에서 관리되는 다양한 버전 기록이 저장되어 있다(이 .git
폴더가 사실상 Git의 실체이다).
Github이란?
Github은 Git을 통해 관리되는 프로젝트를 저장해 주는 클라우드다. Git은 로컬에서 설치되어 동작하며, 즉 오프라인 상태여도 사용이 가능하다. 자신의 로컬 PC에서 필요한 체크 포인트를 만들고 프로젝트를 관리할 수 있는 것이다.
그렇기 때문에, Git으로 관리되는 버전 정보는 원격으로 접근이 어렵다. 동일 개발자가 두 개 이상의 PC를 사용해서 개발할 경우 한쪽에서 관리되던 버전 정보에 접근이 불가능하며, 이는 다른 협업하는 개발자들도 마찬가지다. 또한, 로컬 PC는 언제 어떤 문제로 고장이 날지 모르기 때문에, 프로젝트의 안전한 관리를 위해서라도 별도의 클라우드 공간에 저장하는 것이 좋다(중요한 개인 문서를 구글 드라이브에 올려놓고 관리하는 것과 비슷한 개념이다).
Github은 이러한 문제를 해결하기 위한 서비스이다. Github은 로컬에서 관리되던 Git 정보를 온라인 공간에 올려놓고, 필요할 시 접근해서 프로젝트 정보를 받아올 수 있게 지원한다. 또한, 두 사람 이상이 하나의 프로젝트에 병렬로 작업할 시 필요한 다양한 기능들을 제공한다. 예를 들어, 쪼개진 브랜치에서 서로 다른 작업을 한 코드를 메인 브랜치와 합치고 싶을 때 해당 병합에 문제는 없는지 자동으로 검토해 준다. 도한, 다른 개발자가 병합하려는 코드를 사전에 보고 코드 리뷰(코멘트 작성)를 할 수 있는 기능도 제공한다.
이외에도 Github은 팀으로 프로젝트 개발 협업을 진행할 때 필요한 정말 다양한 기능들을 제공한다. 앞으로 공부하면서 하나씩 자세히 살펴볼 예정이다.
결론
혼자 개발할 때에도 Git 사용은 중요하다. 중요한 체크 포인트들을 잘 만들어둬서 안전하고 생산성 높은 개발을 하자. 또한, 두 사람 이상이 협업을 할 때에도 Git과 Github은 굉장히 중요하다. 많은 경우 개발자는 둘 이상의 사람들이 협업을 하는 경우가 많기 때문에, 협업을 잘하는 개발자가 되기 위해서 Git과 Github 사용을 잘 연습해 두자.
'Git-Github' 카테고리의 다른 글
Git 기본 명령어: init, status, add, commit, log (0) | 2024.11.08 |
---|---|
CLI 기본 명령어 (0) | 2024.11.06 |