의미 없는 3글자가 만들어낸 형상관리
해당 브런치에 남김 글은 초고입니다. 완성된 작품은 해당 "오늘부터 IT를 시작합니다."로 출간하였습니다!!
구매하여서 완성된 글을 종이책의 정감과 편안함으로 읽어보시길 바랍니다^^
감사합니다.!!
http://www.yes24.com/Product/Goods/111417594
깃(git)은 리눅스 커널을 만든 '리누스 토르발스(Linus Benedict Torvalds)'가 개발하였고 '주니오 하마노(Junio Hamano)'가 오늘까지 발전시켜 온 분산 버전 관리 시스템(Version Control)입니다. 파일 변경을 관리하고 소스 관리를 도와주는 형상 관리 도구를 말합니다. 여러 개발자가 하나의 프로젝트를 개발할 때 파일의 변경을 관리하고 나눠 개발한 소스를 하나로 모아주는 역할을 합니다. 그리고 학습자가 코딩을 할 때 소스 저장을 편리하게 하고 개발된 이력을 한눈에 확인할 수 있는 '버전 관리(Version Control)' 방식입니다.
그런데 'git'이라는 단어는 무슨 의미가 담겨 있을까요? 뭔가 심오하고 오묘한 글자의 조합입니다. 그리고 읽기도 매우 편합니다. 그런데 사실 리누스는 아 단어를 아주 쉽게 만들었습니다. 유닉스 명령어 중에 없는 단어를 찾아서 만들다가 의미 없는 단어 세 글자를 조합하였다고 합니다. 그것도 원래는 get이라고 하려다 오타가 나는 바람에 git이라고 정하였습니다. 그렇게 만들어진 단어를 보고 리누스는 '발음하기 좋네' 라며 쿨하게 넘겼다고 합니다. 결국 git 이란 단어는 특별한 문장의 줄임말도 아닌 창시자가 즉흥적으로 만들어낸 재밌난 단어입니다.
버전 관리란 무엇일까요? 실생활에 쉽게 접할 수 있는 게임에 비유해보겠습니다. 게임을 진행하다가 실수로 캐릭터가 게임 아웃이 될 경우를 대비해 플레이어는 다시 돌아갈 수 있는 지점을 저장(Save) 합니다. 만약 저장 기능이 없는 게임이라면, 한 번만에 모두 게임을 끝내야 하는데 그렇게 하면 너무 가혹한 게임 환경이 될 것입니다. 하루 종일 하다가도 마지막에 캐릭터 조작을 실수한다면 몇 시간 동안 했던 노력들이 모두 물거품이 될 것입니다. 그래서 버전 관리는 다시 원하는 지점으로 돌아가기 위해 만드는 게임 속 저장 기능과 비슷합니다.
"처음 보스 만나기 전, 2022년 1월 1일. Save"
"중간 보스 만나기 전, 2022년 1월 2일. Save"
"최종 보스 만나기 전, 2022년 1월 3일. Save"
이렇게 세이브 파일을 저장해두면 언제든지 원하던 시점으로 다시 돌아갈 수 있게 되고, 작업은 한결 쉬워집니다. 버전 관리도 이와 결이 비슷합니다. 시스템에서 파일의 변화를 기록해두었다가 특정 시점으로 다시 돌아갈 수 있는 방식을 말합니다. 다시 말해 데이터의 과거와 현재 상태를 관리합니다. 그런데 버전 관리는 꼭 언어에 해당하고 개발자만을 위한 것은 아닙니다. 데이터가 있는 모든 플랫폼에서 적용 가능합니다. 이러한 버전 관리 방식은 크게 두 가지로 나뉩니다. 중앙집중식 그리고 분산식입니다.
열심히 혼자 숙제를 해서 저장한 파일을 USB 이동식 디스크를 가지고 다니다 잃어버린 경험을 갖고 있을 것입니다. 그런데 만약 백업도 해놓지 않았다면? 모든 작업 내용은 다 날아가고 피눈물을 흘리게 됩니다. 저장소를 한 곳에 두고 필요할 때마다 파일을 다운로드하여 작업하는 방식은 과거에 많이 사용하던 위험한 저장 방식입니다. 즉 중앙 서버에 파일을 업로드하고 의존하는 방식을 말합니다. 서버에 파일을 저장하고 다운로드하여 사용하는 웹하드(Webhard)와 비슷한 구조입니다. 서버에 의존하기에 중앙 서버에 문제가 생기면 사용이 어렵다는 큰 단점이 있습니다. 인프라가 부족한 환경에서는 아직도 많이 사용하는 방법입니다. 그래도 장점은 관리자 한 사람이 모든 권한을 컨트롤할 수 있다는 특징이 있습니다.
이번에는 5명이서 모여서 숙제를 함께 진행하였습니다. 그리고 매번 진행된 내용을 각자에 USB에 저장을 하였습니다. 이때 한 명이 디스크를 잃어버려도 문제는 없습니다. 나머지 조원들이 저장한 숙제 파일을 다시 공유받으면 됩니다. 이렇게 함께 모여 숙제를 하고 파일을 나눠 갖는 형식을 바로 '분산 버전 관리 시스템'이라고 합니다. 이 방식은 '깃'이 사용하는 방식입니다. 중앙집중식 버전 관리 시스템과 동일하게 중앙 서버에 파일이 존재 하지만 다른 원격 장치에서도 동기화된 파일을 갖고 있습니다. 파일을 가지고 있는 장치가 여러 대가 분산되어 있는 안전한 구조입니다.
이 방식의 장점은 중앙 서버 저장소에 문제가 있어도 클라이언트 PC의 소스를 통한 원상 복구가 가능합니다. 개발자 PC에 독립적인 저장소와 개인 이력을 관리할 수 있습니다. 이런 특징으로 개발 범위를 나눠서 병렬 개발을 가능하게 해 주고 프로젝트를 개인 환경에서 자유롭게 테스트할 수 도 있습니다. 이런 많은 장점 덕분에 분산관리시스템을 사용하는 회사는 점점 많아지고 있습니다.
가끔 생각합니다. 깃이 꼭 필요한가요? 꼭 필요한 건 아닙니다. 이 방식이 존재하지 않던 시절에도 세이브 파일을 여러 개 두어서 버전 관리를 수동으로 하여서 잘만 코딩을 하던 시절이 있었습니다. 하지만 이제는 혼자보다 다양한 사람과 모여서 협업이 필요한 시대입니다. 프로젝트의 크기가 거대해진 만큼 이제는 함께하는 코딩이 필요로 합니다. 초등학교 아니 국민학교 시절 인터넷도 없던 그 옛날에 방학숙제를 하기 위해 친구들과 시원한 선풍기 앞에서 어머니가 챙겨 주신 수박 한입 깨물고 친구들과 웃고 떠들며 했던 그 방학 숙제처럼 함께 코딩하는 즐거움을 깃과 함께 누려보세요.