• 개발자가 Git을 사용하는 이유

    2022. 2. 12.

    by. 하루플스토리

    반응형

    안녕하세요, 하루플입니다😀

     

    저는 안드로이드 앱 개발을 처음 공부하고 연구실 친구와 협업할 때 완전히 노가다를 통해 협업하였습니다.

    단순히 프로젝트 파일을 압축하고 USB나 카톡으로 전송하고 파일을 합치는 과정을 거쳤죠.

    그러다 Git이라는걸 접하게 되었고 당시만 해도 Git이 뭔지 어떻게 사용하는지 방법 자체가 어려워서 이런게 있구나만 알고 있었습니다.

    이후 Github로 포트폴리오 관리 정도는 하였지만 제대로된 협업은 해보지 못했죠.

    지금은 회사에서 Git으로 프로젝트 관리를 진행하고 있고 회사에서 배운 내용과 추가로 공부하고 있는 내용을 정리해서 작성해보겠습니다.


    버전 관리 시스템 VCS(Version Control System)

    저는 개발을 처음 시작했을 때 프로젝트 버전을 관리하기 위해 PC의 특정 폴더에 프로젝트를 복사해두곤 하였습니다. 복사한 파일 명에 시간을 기록하거나 버전 숫자(예 : v1.0.1)를 기록할 수도 있습니다. 이런 방식은 실수로 파일을 지우거나 잘못 복사할 수도 있습니다. 그래서 오래전에 프로그래머들이 로컬 VCS라는걸 만들었는데 간단한 데이터베이스를 사용해서 파일 변경 정보를 관리했습니다.

    로컬 버전 관리 (Local VCS)

    프로젝트 파일을 체크아웃 할 때마다 Version Database에 각 버전별 프로젝트 파일이 하나식 생성되는 형식이 로컬 버전 관리라고 합니다. 위와 같은 로컬VCS는 혼자 개발할 때 유용한 버전 관리 방법입니다. 실제 현업에서는 다른 개발자와 같이 작업해야 하는 경우가 많기 때문에 중앙 집중식 버전 관리(CVCS)가 개발되었습니다.

     

    중앙 집중식 버전 관라 (CVCS)

    파일을 관리하는 서버가 별도로 있고 각 PC(클라이언트)는 중앙 서버에서 파일을 받아서(Checkout) 개발을 진행합니다. 중앙 집중식 버전 관리 방식은 VCS 서버 하나로 개발 과정을 확인할 수 있기 때문에 로컬 버전 관리 방식보다 훨씬 효율적입니다. 하지만 치명적인 문제점이 있는데 중앙 서버가 다운되면 아무도 개발을 진행할 수 없는 문제가 있습니다. 만약 일시적인 서버 다운이 아니라 서버 파일 자체가 날아가버리면...😱😱😱😱😱 뒷일은 알아서 생각하시길....😰

     

     

    그래서 생긴 현재 Git이 사용하는 방식!

    분산 버전 관리 시스템(DVCS)

    분산 버전 관리 시스템은 단순히 '작업한 파일의 마지막 상태'만 저장하는 것이 아니라 '작업을 변경한 사항(히스토리)'을 함께 복제해 저장합니다. 서버에 문제가 생기면 이 복제물로 다시 작업을 시작할 수 있습니다.

    분산 저장소 방식 (DVCS)

    위 그림을 보면 각 PC(클라이언트)들이 전부 버전에 대한 정보를 다 가지고 있습니다. 클라이언트든 서버든 하나가 날아가더라도 백업 데이터를 가지게 되는 것이죠. 또한 제가 사용하면서 느낀 분산 저장소 방식(Git)의 정말 큰 장점중 하나가 서버가 동작하지 않더라도 일단 로컬 저장소에 프로젝트 파일을 가지고 있고 버전 정보가 다 기록되기 때문에 인터넷이 도중에 끊기든 말든 제 PC로 원하는 대로 작업을 할 수 있다는 겁니다. 얼마전 있었던 KT 인터넷 사고처럼 몇시간 동안 인터넷 끊겨서 올스탑 되면... 끔찍하죠..😭 (물론 이런경우 구글링도 못하지만ㅜㅜ) 그리고 Git은 거의 모든 명령이 로컬에서 사용되기 때문에 네트워크 속도에 영향을 받는 CVCS에 비해 압도적인 속도를 보여줍니다.

     

     

    Git과 다른 VCS와의 차이

    Git이 아닌 다른 버전 관리 시스템(VCS)들 대부분은 시간에 따라 정보를 관리합니다. 이런 VCS는 대표적으로 CVS, Subversion, Perfoece, Bazaar등이 있습니다. 이렇게 시간에 따라 정보를 관리하는 방법을 보통 델타 기반 버전 관리 시스템이라고 합니다.

    델타 버전 관리 시스템

     

    Git은 이런식으로 데이터를 저장하지도 취급하지도 않습니다.

    Git은 특정 시점을 기억하기 위해 Commit 명령을 사용합니다. 커밋(Commit)하는 것은 수정 전의 프로젝트와 변경 된 프로젝트를 비교해 Commit하는 시점의 스냅샷(일종의 복사본)을 만드는 작업입니다.

     

    Git은 커밋(Commit)하거나 프로젝트의 상태를 저장할 때의 순간을 중요하게 여기고 파일이 달라지지 않았으면 성능을 위해 파일을 새로 저장하지 않습니다. 단지 이전 상태의 파일에 대한 링크만 저장합니다. 마치 변화된 부분만 찾아 사진을 찍는 것과 같다고 해서 스냅샷 방식이라고 합니다.

    Git 버전 관리 시스템

    이러한 방식이 Git과 다른 VCS와의 차이점 입니다.

     

     

    Git 세 가지 상태 용어

    • Committed : 데이터가 로컬 데이터베이스에 안전하게 저장됨.
    • Modified : 수정한 파일을 아직 로컬 데이터베이스에 커밋하지 않음.
    • Staged : 현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태

     

     

    Git - Book

     

    git-scm.com

    git 공식 사이트의 pdf EBook을 참고하여 작성하였습니다.

    반응형

    댓글