본문 바로가기

Git

1. 깃(Git)? 깃허브(Github)? 그게 뭔데

728x90

깃과 깃허브는 코딩을 공부하려고 하면 빠지지 않고 등장하는 단골 중에 단골이다.

어쩌면 한 번쯤은 들어본 사람도 있을 것이고, 그렇지 못한 사람도 많을 것이다. 

 

오늘은 도대체 이 깃이 뭔지, 깃허브가 뭔지를 알아보려고 한다. 

 

Git.

 

일단 Git이란 단어를 처음 보면 딱히 무슨 단어일지 생각이 나지 않는다. 

 

"Global Information Tracker" or "Goddamn idiotic truckload of sh*t"

 

만든 사람(Linus Torvalds, 참고로 리눅스 커널 개발한 사람)에 따르면

 

만들 당시에 UNIX명령어 중 아무 의미가 없는 세 글자 명령어를 찾은 게 Git이 었다고 한다. 

 

이름에는 그다지 큰 의미가 없다는 뜻이다. 

 

따라서 이름보다는 그 용도와 목적을 생각해보아야 하는데, 

 

Git은 어떤 목적성을 가진 시스템이기 때문에 왜 만들어졌는지를 알면 더 쉽게 받아들일 수 있다. 

 

 

버전 관리 시스템

 

학교에서든 직장에서든 한 번쯤은 위와 같이 최종 최최종을 만들어본 경험들이 있을 텐데, 

 

이처럼 어떤 파일을 수정하다 보면 계속해서 수정된 파일들이 쌓이게 된다. 

 

처음 한두번은 1, 2, 3 숫자로 적다가 마지막쯤엔 최종, 최최종, 진짜최종, 진짜진짜최종이 돼버리기 십상이다. 

 

혼자서 하는 거면 다행이기라도하지 여럿이서 함께 작업하다 보면 도대체 어느 게 정말 최종본인지 헷갈리기도 하고 

 

마지막으로 했던것 보다 이전께 마음에 들어서 되돌아가고 싶은데 도무지 몇 번째 것이 좋았었는지도 헷갈릴 때가 있다.

 

재수가 없으면 이전 버전에 잘못 덮어쓰기를 하는 불상사가 일어나기도 한다. 

 

이처럼 Local에서 버전을 관리하는 것에 어려움을 느끼던 공학자들이 RCS(Revision control systems)라는 시스템을 만들었고 

 

여기서 발전된 것이 CVCS(Centralized Version Control Systems)와 DVCS(Distributed Version Control Systems)이다.

 

전자는 문자그대로 중앙 집중식 버전 관리 시스템이고, 후자는 분산 버전 관리 시스템으로 git은 후자에 속한다.

 

이 둘이 뭐가 다른 지보다는 CVCS의 경우에는 다른 이용자가 수정 변경 중 Lock을 걸어둘 경우 이용이 불가해진다는 단점으로 인해 DVCS를 이용하게 되었다고 생각하면 좀 더 받아들이기가 쉬울 것 같다. 

 

이러한 버전 관리 시스템은 기본적으로 "여럿이서 작업을 하는 과정에서 변경된 것들을 버전 별로 관리하기 위함"이 주가 되는 것 같다.

 

즉 Git은 버전 관리 시스템의 하나로 개발 과정에서 만들어지는 다양한 버전들과 그 버전들 간의 변화를 파악하고 비교할 수 있게 해 준다.

 

Git의 주요한 특징은 아래와 같다.

 

  • Git은 모든 명령을 로컬(local)에서 진행한다.
  • Git은 모든 변화를 파일의 스냅샷으로 취급한다.
  • Git은 데이터를 추가할 뿐 삭제하거나 변경하지 않는다.

데이터를 추가할 뿐 삭제하거나 변경하지 않는다는 것을 쉽게 이해하기 위해서 아래의 수식을 떠올려보면 좋다.

1 - 1 = 1 + (-1) 

1에다가 1을 바로 빼주는 것이 아니라 1에다가 -1을 더해주는 것이다. 

 

즉, Git은 삭제했다는 그 사실 또는 변경했다는 그 사실 자체를 추가하는 것이다. 

 

 

그렇다면 GitHub는 뭘까? 

 

앞서 말했듯이 Git은 버전관리시스템의 하나로 다양한 버전들을 관리하기 위한 시스템인데

 

이때 혼자서 작업하는 것이 아니라 다른 사람들과 작업하기 위해서는 이를 연결해 줄 네트워크가 필요하다.

 

즉, local에서만 명령을 수행하는 Git을 가지고 협업을 가능하게 해주는 것이 GitHub인 것이다. 

 

각각의 local에서 이루어지는 명령들을 인터넷 네트워크를 사용하여 연결시켜주는 Hub의 역할을 한다고 할 수 있다. 

 

 

이제 Git과 Github가 무엇인지 알게 되었으니 어떻게 쓰는지에 대해서는 다음 포스트를 통해 다루어보도록 하겠다.

 

 

이 게시물은 edwith(https://www.edwith.org/)에 있는 한상곤 교수님의 <Git과 GitHub 활용 특강>을 듣고서 작성했습니다.