꽃무늬 키보드

형상관리시스템의 대세. GIT란? 본문

Version Controll/git

형상관리시스템의 대세. GIT란?

Katherine Choi 2014. 7. 4. 11:19


 형상관리 GIT?

 형상관리. 혹시 svn만 사용해보셨나요? 요즘은 형상관리시스템의 대세가 git 쪽으로 옮겨가고 있는 추세라죠:-)

 국내 기업에서는 여전히 svn 사용자들이 많은 편이지만, git은 형상관리 시스템에 있어서 여전히 1위를 차지하고 있다고 해요.

 아래 그림은 JVM의 에코시스템을 이끌어가는 리더들의 이슈에 올라온 그림입니다. Git 사용자의 점유율을 보시면 Git의 사용율이 높은편이네요!

  

 그렇다면 과연 git는 svn과 어떻게 다르며, 어떠한 장점이 있는지 알아볼까요?


 GIT의 특징

 먼저, 저장소가 서버에 있는 svn 과는 다르게 git은 저장소가 내 컴퓨터(Local)에 있어요!

   


 그렇다면 협업은 할 수 없냐구요? 그렇지 않아요~ git에서는 원격 저장소를 만들면 되거든요:)

   


 내 컴퓨터 있는 저장소에서 열심히 작업 후 커밋! 그렇게 내가 해 놓은 작업들을 다른사람과 공유하고자 할 때에는 원격저장소에 푸쉬!

 

 이렇게 git은 저장소가 분산되는 구조를 가지고 있어 분산버전관리시스템(DVCS) 라고 한답니다.


 GIT의 장점

 지금부터 이렇게 분산된 구조가 가지는 장점 및 git의 장점들을 몇가지 나열해 드릴게요!

 첫 째, 브랜치와 병합! 

 git가 가지는 가장 큰 장점은 바로 이 branch모델이에요! 개발자의 로컬에서 여러 개의 branch를 생성해서 이것저것 개발해 볼 수 있고 merge와 삭제 또한 가능해서 완벽한 독립성을 제공해 주지요! 이러한 장점으로 인해 가지는 특징들이 있어요.

  • 개발 중에 새로운 아이디어를 적용하고 수정하는 등의 테스트를 해볼 수 있어요. commit도 자유롭고 다시 원점으로 돌아가 메인 브랜치인 master에 패치를 적용하기도 하고, 원점으로 돌아가 병합하는 과정들이 쉬워요. 

  • 어떠한 소스는 상용소스로 branch에 항상 유지하고, 또 다른 소스는 테스트를 위한 소스로 관리하고, 또 다른 소스는 하루하루 일할 거리들로 이렇게 나누기 쉬워요.

  • 새로운 기능을 구현할 때에는 새로운 branch를 만들어서 원래의 branch와 바꾸어가며 적용을 할 수 있고 메인 branch와 합치기도 쉬워요.

  • 테스트로 코딩 할 때에는 새로운 branch를 만들어 테스트 해볼 수 있고, 그 branch를 그냥 지워버릴 수도 있어요.

 push를 하기 전까지는 서버에 적용이 되지 않기 때문에 로컬에서 마음껏 여러 branch를 만들어 테스트해볼 수 있어요. 그렇기 때문에 코딩하다가 발생하는 에러를 최소화하고 다시 원점으로 복귀하는 시간이 절약된다는 것!


 두번 째, 속도와 성능!

 git은 모든 동적을 우선적으로 로컬에서 하게 됩니다. 매번 서버와 연결하기 위한 네트워크가 필요하지 않기 때문에 속도면에서 큰 장점이 있어요.  다음은 홈페이지에 나와있는 벤치마크 자료에요.  가장 많이 사용하는 commit과 diff, update가 모두 빠른 것을 확인하실 수 있겠죠?


 세번 째, 분산작업!

 git은 clone 만 하면 바로 작업이 가능해요! 소스를 서버에 두고 여러 작업환경에서 동시에 작업이 가능하기도 하며, 각각의 작업환경에 따라 다른 branch도 관리할 수 있어요. svn에서는 다음과 같이 하나의 저장소를 함께 사용하면서 동시에 개발하게 되지요. 

 이렇게 되면 각자 코딩한 소스에서 문제가 생기기도 하고, 이러한 소스를 통합하는 일도 번거로워요. 그러나 git은 역할분담을 해서 통합을 전담으로 담당하는 사람과 개발에 집중하는 사람으로 역할을 분담할 수가 있죠. 

 팀이 커질 수록 이렇게 통합을 담당하는 역할이 필요하고 팀을 통합하는 관리자와 전체를 통합하는 관리자로 세분화하여 환경을 구성할 수 있어요:)

 당연히 개발자들이 통합하는 데에 쏟는 시간을 절약할 수 있겠죠!


 네번 째, 데이터의 보장성!

 git에서는 모든 파일을 암호화시켜주며, 하나의 bit도 틀리지 않게 보관해요. 그리고 모든 파일은 체크썸이라는 검사를 거치게 된답니다. 체크섬은 40자 길이의 16진수 문자열로 되어있어요. 파일을  commit 할 때마다 바로 이 체크섬이 만들어지지요. 저장소에 있는 파일이나 commit 메세지를 수정할 때마다 부여되는 commit id가 바뀌기 때문에 누가 commit을 했는지 확실하게 보장된답니다. 히스토리 관리하기에도 유용하겠지요!


 다섯번 째, Staging area!

 git에는 staging area가 존재해요. 이 뜻을 알아보니 숙영지 또는 중요한 준비 단계라고 하네요? 이 의미를 잘 생각하면서 개념을 이해하시면 될 것 같아요. 내 작업공간(working directory)에서 명령을 실행한 후에 add를 하게 되면 앞으로 git에서 해당 파일을 관리하게 됩니다. 즉, 서버에 업로드될 준비가 된 것이기도 하지요. 이제부터 서버에 올리기 직전인 바로 이 준비단계(staging area)에는 해당 파일 및 데이터들이 존재하게 되는 것입니다.

 그렇기 때문에 git의 특징에서 말한 것과 같이 git은 많은 명령어들을 로컬에서 실행한 후, 나중에 서버에 올리게 됩니다. 이것이 바로 svn과 달라서 가장 헷갈리는 부분이에요. 한 번의 명령으로 바로 적용되는 svn과는 다르게 git은 두 번의 명령을 실행해야 서버에 있는 저장소로 업로드가 되지요. 

 

 그렇지만 이러한 특징을 활용하고 싶지 않으시다면? "git commit -a" 명령을 통해 다른 버전관리 프로그램과 같이 이용할 수도 있어요~ 

                 


 여섯번 째, 오픈소스!

 git은 GPLv2 오픈소스 라이센스를 사용해서 무료로 사용할 수 있어요. 물론 유료 프로그램도 존재하지만, 오픈소스로 이러한 버전관리 프로그램을 제공해 준다는 사실!


 

 이렇게 git의 특징과 장점을 알아보았는데요, 사용하다 보면 이외에 더 많은 장점들이 또 보이지 않을까 싶네요:-)  위에서도 svn과 비교한 부분이 있기는 하지만 그렇다고 해서 svn을 버리고 git를 써야한다는 의견은 아니에요~ 저도 두 가지 모두 사용하고 있지만 그 형태가 다르고 또한 각각의 장단점이 있는 것 같아요. 제가 보았을 때, git는 svn에 비해 복잡하기도 하고 명령어도 많고 컨셉도 조금 복합한 편이에요. 그렇기 때문에 충분히 공부도 많이 해야하고 전략도 필요하죠!  하지만, 분산된 환경에서 일하는 경우가 많다거나 GitHub를 사용해야 한다거나 혹은 git 특유의 기능이 필요하다면 git를 사용하는 것이 효율적이지 않을까 싶네요^^  여러분들도 자신의 작업 환경과 스타일에 따라 알맞는 시스템을 선택하셔서 유용하게 사용하시길 바랄게요!  마지막으로 git의 브랜치(branch)를 배울 수 있는 유용한 사이트를 링크해둘테니 참고하세요:) 




[참고자료]

http://git-scm.com

http://unikys.tistory.com/321

http://www.slideshare.net/einsub/svn-git-17386752

http://www.slideshare.net/WooGenius/git-branch-stregagy-case-study-woo-genius

Pro Git 파일 문서



Comments