언젠가부터 깃(Git)은 개발 프로젝트에 없어서는 안 될 필수요소가 됐다.

앞서 기고한 프론트엔드 개발자와 백엔드 개발자의 차이에서 말한 것과 같이 프로젝트라는 것이 개발자 한 명으로 이뤄지는 것이 아니고 다수의 인원이 하나의 팀을 이뤄 진행한다. 그러다 보니 모두가 함께 모여서 일을 할 수 있는 큰 책상의 역할을 해줄 도구가 필요하다. 그 역할을 해 주는 것이 깃이다.

이 깃을 좀 더 사용하기 편리하게 다듬고 개선해서 서비스하는 것이 깃허브(Github), 깃랩(Gitlab) 혹은 빗버킷(Bitbucket)과 같은 서비스이다. 이러한 서비스의 시장 규모는 단편적으로 지난 2018년에 마이크로소프트가 깃허브를 75억달러, 약 8조원에 가까운 금액으로 인수 한 것을 보면 얼마나 많은 개발자와 기업이 깃을 사용하는지 짐작할 수 있다.

전세계 개발자들이 가장 많이 사용하는 커뮤니티 사이트 스택오버플로우(Stackoverflow)에서 약 10만명 가량의 개발자를 대상으로 매년 조사하는 자료 중 하나는 개발 협업 도구에 대한 내용으로, 응답한 개발자들 중 약 90% 이상이 하나 이상의 깃 저장소 서비스를 사용하고 있다고 한다.

이 정도면 전세계 개발자 대부분이 깃을 사용하고 있는 것이다. 하지만 국내에서는 스타트업이나 일부 IT기업을 제외하면 소스 관리 툴로 깃보다는 좀 더 앞서 등장한 SVN(SubVersion)을 더 많이 사용하고 있다.

기존의 SVN에 익숙한 개발자들은 깃을 접하면 당황하는 경우가 많다. SVN과 별 차이가 없다고 생각하고 접근하지만 실상 깃과 SVN은 엄연히 다르다. 어떤 점들이 다르기에 당황하는 것인지 하나씩 살펴보자.

저장소 위치

SVN은 대부분 서버에 저장소가 있다. 하지만, 깃은 로컬 즉, 각 컴퓨터에 있다. 하지만 다른 사람들과 함께 작업을 해야 하는 경우가 있을 수도 있으니. 이 경우 클라우드로 원격저장소를 만들면 된다.

내 컴퓨터(로컬) 저장소에 작업을 하고(커밋. Commit) 다른 사람과 공유하기 위해서 원격 저장소에 보내면(Push) 된다.

굳이 로컬에 따로 저장소를 만드는 이유는 바로 속도 때문이다. 작업할 때 인터넷을 경유할 필요가 없어지니까 커밋 속도는 최소 4배 이상 빨라진다. 그리고 더 중요한 건 로컬 저장소에서 작업을 하기 때문에 부담 없이 테스트를 할 수 있고, 원격 저장소와 연결이 끊겨도 버전 관리가 가능하다.

반면에 SVN은 서버에 문제가 발생할 경우 버전 관리가 안될 수도 있다. 깃은 로컬과 원격 저장소 모두에 작업 내역이 있기 때문에 사고나 문제가 생겨도 복원이 가능하다.

Staging Area

깃에는 스테이지 영역이 있다. 로컬에서 커밋을 하기 전에 거치는 전 단계이다. SVN에서는 다른 사람들과 협업 시 파일 버전 차이로 충돌하는 경우가 종종 발생한다. 이럴 때마다 파일을 백업하고, 업데이트하고 복원하는 복잡하고 귀찮은 과정을 반복하는 일이 종종 발생한다. 하지만 깃에서는 Staging area의 지원으로 좀 더 쉽고 편하게 협업을 할 수 있다.

Snapshot

SVN이나 깃을 사용하는 가장 중요한 이유는 ‘협업’과 ‘버전 관리’이다. 다른 사람들과 함께 작업을 하기 때문에 버전 문제가 발생하고 이를 관리하기 위해서 SVN이나 깃을 사용하는 것이다. SVN은 파일의 변화 발생 시 각 개발자가 작업한 파일의 차이점을 저장한다.

하지만 깃은 각 순간(버전)을 스냅샷으로 저장한다. 특정 버전을 이용하기 위해서 SVN은 기초 파일뿐만 아니라 해당 버전의 파일까지 모두 다운받아서 반영을 해야 하는데, 깃에서는 스냅샷으로 네트워크를 거치지 않고 해당 버전을 이용할 수 있다. 그리고 이 스냅샷을 통해서 브랜치(Branch)를 사용할 수 있다.

Branch

SVN은 디렉토리 구조이기 때문에 브랜치를 만들면 네트워크를 통해 전체 파일을 내려받아야 하는 부담이 존재한다. 하지만 깃에서는 스냅샷을 통해서 브랜치를 쉽게 만들 수 있다. 브랜치를 전환할 때도 직접 디렉토리를 이동하지 않고 작업 파일들을 실시간으로 변경할 수도 있다.

병합할 때도 SVN에 비해 빠르고 간편하게 할 수 있다. 깃에서는 SVN과 달리 브랜치를 만들고 작업하는 것에 대한 부담이 매우 적은 편이다.

그렇다고 해서 깃이 SVN보다 훨씬 우월하기 때문에 SVN은 사용하면 안 되는 것은 아니다. 상황에 맞게 사용하면 된다. 브랜치나 태그 기능은 거의 사용하지 않거나, 작업/관리 파일의 규모가 작아서 버전 관리에 문제가 없는 경우, SVN서버 문제가 없으면 굳이 깃을 사용할 필요는 없다.

하지만 개발 이력을 인정받고 싶다면 깃을 사용할 것을 추천한다. 앞서 언급했던 전세계 개발자들 대다수는 깃을 사용하고 있다. 그리고 상당수의 기업들에서 IT개발자들을 채용할 때 깃계정을 요청하기도 한다.

기업마다 차이는 있겠지만 코딩테스트 대신 깃계정에 등록된 프로젝트나 소스코드를 통해서 채용을 진행하는 경우도 있다.

이렇게 종합적으로 보았을 때 깃이 가지는 장점은 한 두개가 아니다. 개발자들에게는 보다 편리한 작업환경을 제공한다. 회사에게는 보다 빠르고 체계적인 프로젝트를 진행해 작업 기간의 단축과 불필요한 시간 및 인적 자원을 줄여주게 되는 것이다. 또한 기업에서 새로운 개발자를 채용할 때 채용하고자 하는 개발자의 이력서와 함께 깃 주소를 받아서 그동안 작업한 이력을 한눈에 확인할 수 있다.

한국은 의외로 깃을 사용하는 개발 환경이 보편화 되지 않은 나라 중 하나다. 물론 점차 사용하는 영역이 확장되는 추세이다. 하지만 깃을 개발하는 목적으로만 사용하지 않더라도 다양한 용도로 활용할 수 있으니 아직 도입하지 않은 기업에서는 하루빨리 도입해 개발 환경 개선과 개발자의 채용 등에 골고루 이용 할 수 있기를 바란다.

※ 외부필자의 원고는 IT조선의 편집방향과 일치하지 않을 수 있습니다.

김용욱은 기업과 IT 개발자 Job Matching 전문 서비스 Dev2Job의 CMO로 재직 중이다. 20년간 한국과 일본의 IT 관련 업계에서 퍼블릭 클라우드, 프라이빗 클라우드, 금융 클라우드, 하이브리드 클라우드 관련 컨설팅을 해왔다. 현재는 개발자 채용 전문 서비스인 Dev2Job을 운영하고 있다.


관련기사