안녕하세요. 이번 강좌는 Git과 Github에 대한 것입니다. Git은 버전 관리 시스템(VCS, Version Control System) 중 가장 유명한 프로그램입니다. Github는 그러한 Git의 데이터를 저장하는 서버입니다.
Git이 왜 필요할까요? 예시를 하나 들어보겠습니다. 현재 버전 1을 내놓은 앱이 있습니다. 개발자들이 버전 1.1 업데이트를 위해 열심히 코딩을 하죠. 실컷 만들어서 실행했는데 작동이 되지 않습니다! 이때는 어떻게 해야 할까요? 다시 버전 1로 돌려야겠죠? 그런데 많은 부분에서 수정을 해버려서 버전 1이 뭐였는지 기억이 안 납니다. 낭패네요... 이렇게 회사가 망했답니다.
그래서 나온 게 VCS입니다. 버전 1 코드 따로, 버전 1.1 코드 따로, 나중에 나올 버전 2 코드 따로 서버에 저장해두는 거죠. 이제 개발자들은 에러가 나는 것을 겁내지 않고 열심히 코딩을 할 수 있게 되었습니다. 에러가 나면 그냥 서버에서 예전 버전 1코드를 다운받아 처음부터 다시 시작하면 되거든요.
VCS 덕분에 개발자들은 1.1 버전도 성공적으로 출시했죠. 어느날 갑자기, 왠지는 몰라도 서버가 펑 터졌습니다! 버전 2를 만들고 있던 개발자들은 모두 멘붕했겠죠? 역시나 버전 2에서 에러가 났지만, 서버가 터졌기 때문에 버전 1.1 코드가 날아가버려 돌이킬 수가 없네요. 이렇게 또 회사가 망했습니다.
두 번이나 망한 개발자들은 이제 어떻게 해야 버전 관리를 효과적으로 할 수 있을까 고민하기 시작했습니다. 그러다가 떠오른 게 바로 백업을 하는 겁니다. 따로 서버를 만드는 게 아니라 개발자 각자의 컴퓨터에 저장하는 거죠. 서버가 터지면 개발자 중 한 명의 컴퓨터에 저장해두었던 이전 버전을 다시 서버로 올리고, 다른 사람들은 그것을 다운받으면 됩니다. 마찬가지로, 개발자 컴퓨터가 고장나면 서버에서 다운받고요.
이렇게 여러 대의 컴퓨터와 하나의 메인 서버가 소통하는 방식이 바로 Git(컴퓨터들)과 Github(서버)의 관계입니다. 코드가 서버에만 있는 게 아니라 각자의 컴퓨터에 분산되어 있기 때문에 분산형 버전 관리 시스템(DVCS, Distributed VCS)라고 부릅니다.
Git의 장점 중 하나가 자유롭게 코드를 뗏다 붙일 수 있다는 겁니다. 이전 버전으로 되돌리는 것도 자유롭게 할 수 있지만, 새로운 기능을 만들 때도 자유롭게 코드를 추가하고 문제가 발생했을 시에는 바로 뺄 수 있습니다. 언제든지 뒤로 돌아갈 수 있는 든든한 빽이 생겼기에 안심이 되는 거죠.
또한 여러 사람이 동시에 개발을 하는 것도 편리합니다. 예를 들면 회사에 A, B, C라는 세 개의 개발팀이 있습니다. 이들은 각자 경쟁적으로 코드를 만들고 있는데요. 예전처럼 무턱대고 코딩을 했다가는 서로 코드가 충돌(같은 파일을 서로 다르게 수정한다든지)해서 나중에 하나로 합치기 힘들었겠죠. 하지만 Git에서는 어떤 부분이 충돌이 일어나는 지를 보기 쉽게 알려주어 그 부분을 피해갈 수 있습니다. 또한 한 팀의 코드가 문제가 생겼다 싶으면 그 부분만 바로 빼버릴 수도 있고요.
서버는 Github만 있는 게 아니라 자체적으로도 구축 가능합니다. 하지만 편하게 하려면 Github에 일정 돈을 주고 서버를 빌리면 됩니다. Github의 장점은 오픈 소스일 경우 서버를 무료로 제공해줍니다(최근에는 비공개 소스도 일정 부분까지는 서버를 무료로 제공해주게 되었습니다!). 그리고 커뮤니티 기능이 잘 되어있어 코드를 보면서 서로 의견을 나눌 수 있습니다. 다른 사람이 자신의 코드에 기여하거나, 자신이 다른 사람의 코드에 기여하기도 쉽습니다. 이렇게 서로 상호 보완해가면서 오픈 소스의 코드가 발전하는 거죠. Github 외에 Bitbucket도 비슷한 서버 역할을 하고 있습니다.
다음 시간부터 Git의 동작 방법과 간단한 명령어들에 대해 알아봅시다! 오늘의 숙제는 Git을 직접 설치해보는 겁니다. 윈도우 / 맥 링크
책에 나와있는 방법이 단순히 예시를 위한건지 실제로 그렇게 많이 하는건지 궁금합니다!