본문 바로가기

개발자 이야기/Git, GitHub

드디어 Git을 시작! - 만들면서 배우는 Git + GitHub 입문

불과 약 한 시간? 전에 어제 구매한 <만들면서 배우는 Git + GitHub 입문> 이라는 책을 간략하게 소개하면서 '앞으로 이 책을 공부할겁니다! 그렇게 아세요!' 라는 통보식의 포스팅을 마친 것 같은데 곧바로 오늘 알게된 내용을 정리하고자 이렇게 다시 컴퓨터 앞에 섰다. 특히 공부를 더 열심히(포스팅을 통한 정리를 꾸준히) 해야겠다는 생각이 들었던 것은 오늘 사장님께서 전체 메일로 보내신 내용 때문이다. 하루하루 그 날 알게 된 내용을 400자로 정리하는 습관을 들이라는 것이었는데, 정말 좋은 것 같다. 마침 내가 블로그 포스팅을 통해 배운 내용을 정리하면서 공부해야겠다는 다짐을 한 시점과 비슷하여 더욱 놀랐다. 앞으로 더욱 열심히 해야겠다는 생각을 한다.


언제나 그랬지만, 블로그 포스팅을 하는데 항상 사설이 길다. 이것은 아마도 예전에 애드센스를 위해 포스팅을 했던 지난날의 습관이 아직도 몸에 베어있기 때문인 것 같다. 그럼 슬슬 본론으로 돌아오도록 하자. 알게 된 내용을 400자로 정리해야 하는데, 그 외적인 내용으로 이미 400자를 다 채웠거나, 혹은 다 채워간다는 느낌이 든다.



► 버전 관리(Version control)


우선 Git을 알기 전에 버전 관리라는 것과 버전 관리를 왜 쓰는지 알아야할 것 같다. 버전 관리는 말 그대로 동일한 정보에 대한 여러 버전을 관리하는 것을 말한다. 공학과 소프트웨어 개발에서 팀 단위로 개발 중인 소스 코드나, 청사진 같은 설계도 등의 디지털 문서를 관리하는데 사용된다. 


우선 동일한 정보에 대한 여러 버전을 관리한다는 것은 이걸 예로 들면 이해하기 쉬울 것 같다. 논문을 쓸 때나 혹은 무언가 문서 작업을 할 때, 작업과정을 구분하기 위해서 파일명을 'XXXX_O월O일' 과 같은 형식의 파일명으로 계속해서 만들어 나간다던지, 혹은 'XX_최종본', 'XX_진짜 최종본' 이런 식으로 같은 내용의 파일이나 내용을 추가하거나 수정하면서 별도로 이렇게 파일을 만든 경험을 해본적이 있을 것이다. 기존 파일에다가 그대로 겹쳐써넣어도 되지만, 그랬다간 혹시나 그 파일이 잘못되었을 경우 큰 타격이 될 수 있는 문서들은 조심스럽게 백업? 한다는 식으로 말이다. 버전 관리를 이용하면 이런 번거로움과 용량 낭비를 할 필요가 없다.  


그리고 그 다음 내용을 소개하자면 팀 단위로 개발 중인 소스 코드를 관리하는 데 용이하다. 물론 나는 아직 Git을 제대로 써 본 적이 없다. 전에 학원에서 프로젝트를 진행할 때 써본 경험은 있지만, 사실 내가 주도한 것이 아닌 경력이 있었던 형님의 주도 하에 이루어졌기에(Commit하는 것도 항상 허락받고 했다) 해봤다고 자신 있게 얘기할 수는 없을 것 같다. 하지만 회사에 입사해서 SVN을 이용하여 열심히 버전 관리를 경험해보며 얼마나 효율적인 협업이 가능한지 몸소 느끼는 중이다. 물론 이 또한 내 주도 하에 하는 것이 아닌 만들어져 있는 SVN 주소에 내가 작업한 파일을 Commit 하거나 다른 사람이 작업하여 Commit한 파일을 Update치고 있긴 하지만, 그래도 적어도 이젠 Commit을 할 때 누군가에게 물어보지 않고, 또한 충돌이 날 경우에도 당황하지 않는 정도는 된 것 같다. 아무튼! SVN을 사용하면서 버전 관리를 체험해보니 Commit과 Update만 눌러도 프로젝트 팀원들이 전부 같은 버전의 프로젝트 파일을 유지할 수 있다는 것은 정말 대단한 것 같다. 만약 이런 버전 관리 툴이 없었다면, 아마 하루에도 몇번씩 회의를 하고 파일을 서로 전달하는 비효율적인 방식으로 프로젝트가 진행되었을 것이다. 이런 툴이 있다는 것에 정말 감사한다.



► 그렇다면 Git은 무엇이고 Git은 왜 쓸까?



버전 관리를 알아봤으니 그러면 이 책의 주 메뉴인 Git을 좀 더 살펴보자면, Git은 리눅스 커널 버전을 관리하기 위해서 만들어졌다고 한다. 더욱 놀라운 건 이걸 약 2주만에 만들었다는 것이다. 이런 사례를 보면 정말 프로그래머(개발자)라는 길이 내 길이 맞나라는 자괴감에 들기도 한다. 더욱 더 열심히 해서 저런 개발자가 되야겠다는 생각을 하도록 노력중이다. Git은 버전 관리 시스템의 하나로 분산 버전의 관리 시스템이다. 분산 버전 시스템은 내가 현재 회사에서 사용하고 있는 SVN처럼 저장소가 중앙(서버)에 존재하는 것이 아닌, 각자가 저장소의 사본을 가지게 되는 시스템을 말한다. SVN과 같은 시스템은 클라이언트-서버 모델이라고 하는데, Git과 같은 분산 버전 시스템은 상대적으로 데이터가 유실됐을 경우 복구하기 용이하다. 책에는 Git의 많은 장점들이나 특징들이 나와있지만 아직 Git을 많이 써보지 않아서 그런지(물론 SVN도 마찬가지) 아직 맘에 딱 와닿는 것은 모르겠다. 그러나 내가 Git을 선택하게 된 GitHub의 존재가 아무래도 가장 큰 장점이지 않을까 싶다. 책에 나온 다른 장점들은 이번에 Git을 공부하면서 많이 써보고, 그리고 그 다음에 그때그때 느낄 때마다 정리하도록 해야겠다.