태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

* Git 사용하기

: 요 몇년 사이에 구글을 통해서 다양한 프로그래밍 이슈들을 검색하다가, 또는 오픈 소스 프로젝트들을 보다가 유독 눈에 띄던 사이트가 하나 있었다. 


http://github.com



: 바로 이 github이라는 사이트에 다양한 예제 소스코드와 각종 오픈 소스의 코드들까지 다양하게 올라오는 것을 볼 수 있었다. 처음에는 단순한 소스를 업로드할 수 있는 곳인줄 알았는데, 조금 더 알아보니 git이라는 버전 관리 프로그램을 이용한다는 것이었다. 처음으로 버전관리를 접해봤던 MS의 소스세이프 이후에 SVN에만 익숙해져 있었던 와중에 새로운 버전관리 프로그램이라 눈에 띄었고, 게다가 무료 svn 호스팅을 찾다가 만난 것이 바로 이 github이라는 꿀 같은 사이트였던 것이다. 이렇게 무료로 버전관리를 하게 도와준다고 하니 git에 관심을 가지게 되고 한번 svn이 아닌 git로 버전관리를 하기 시작하게 된 것이다.



*git이란 무엇인가?

: git에 대한 소개는 다음의 사이트에 잘 되어있다. 


http://git-scm.com/


* 홈페이지 하단에 보면 이렇게 써있다. "This open sourced site is hoted on GitHub". 역시 git의 열풍을 이끌고 온 가장 큰 역할을 했던 github에서 지원을 해주고 있다.




: 이 홈페이지에 나와있는 내용들을 요약하자면 다음과 같은 장점들을 가지고 있다고 볼 수 있다. 이제 세부적으로 각각의 장점에 대해서 무엇이라고 하고 있는지 살펴보자.




* Branching and Merging

  • Git가 다른 버전관리 프로그램들보다 가지는 가장 큰 장점은 branching 모델이다.
  • Git는 로컬에 다수의 branch를 허용해주며, 각각에 대한 완벽한 독립성을 제공해준다.
  • 각 branch는 쉽게 생성/merge/삭제를 해줄 수 있도록 해준다.

많은 개발자들이 버저관리의 가장 6중요한 기능 중 하나라고 생각할 것이다. 이 특징을 활용하여 다음과 같은 것들을 쉽게할 수 있다.

  • 손쉽게 오류 없이 현재 내용 전환하기: 개발을 하다가 새로운 아이디어를 적용하거나 오류를 수정한 새로운 branch를 쉽게 만들어서 테스트해보고, 이 와중에 commit도 자유롭게 하고, 다시 원점으로 돌아가서 master(메인 branch)에 패치를 적용하고, 다시 원래 개발하던 원점으로 돌아가서 합치는 등의 과정이 쉽다.
  • 소스들의 역할 분담: 상용 소스로 활용될 branch를 하나 계속 유지시키고, 또 다른 소스는 테스트를 위한 소스로 관리를 하고, 또 다른 소스들은 하루하루 일할 거리들로 나누기 쉽다.
  • 기능 구현 기반의 일처리: 새로운 기능을 구현할 때에는 새로운 branch를 만들어서 원래의 branch와 바꿔가면서 적용을 하다가 마음에 들면 메인 branch와 합치기 쉽다.
  • 실패해도 괜찮은 테스트 코딩 관리: 실험적으로 코딩을 할 때에는 새로운 branch를 만들어서 테스트를 해보고, 잘 안되면 그냥 branch를 지우고 하던것을 잊어버리고 아무일도 없었다는 듯이 몰래 다시 하면 된다.

: 또 독특한 점이 원격 서버에 있는 git repository(저장소)에 push를 안하면 서버에는 업데이트가 안되고 로컬에서 마음껏 여러 branch들이 생성가능하다는 점이다. 이러한 기능들로 인해 실험적인 코딩으로 인해 발생하는 오류들을 최소화하고 다시 원점으로 복귀하는 시간을 절약할 수 있을 것이다.



* Small and fast

: Git는 거의 모든 동작들을 우선적으로 로컬에서 실시하게 된다. 따라서, 이것은 서버와 연동하기 위해 네트워크를 타지 않아도 되기 때문에 속도면에서 여러가지로 엄청난 장점이 있다. 또한 시작은 처음에 Git는 Linux kernel을 위해서 만들어졌기 때문에, 시작부터 대용량을 다루기에 용이하고, C언어를 사용하기 때문에 언어자체로 가지는 속도적인 이득을 가지고 있다. 속도와 성능은 Git를 디자인하는데 있어서 언제나 첫번째 목표점이다.


* 벤치마크

: 홈페이지에 올라와있는 벤치마크 자료를 보면 그 속도가 놀랍니다. 많이 사용하는 또 다른 오픈소스 버전관리 프로그램인 SVN과 비교하고 있다.



: SVN과 Git에서 제공해주고 있는 동일한 명령어들을 사용하고 비교를 한 결과 대체적으로 Git가 더 빠른 모습을 보여주고 있다. 하지만, commit과 같은 경우 사실 Git는 2개의 명령을 나눠져있는 경우라 의미는 없어보이기도 한다(Git에서는 commit->push가 svn에서는 commit 하나로 이루어져있다). 가장 많이 사용하는 명령어들인 commit과 diff, 그리고 update은 다 git가 빠르다.



* Distributed

: 모든 버전관리 프로그램들이 제공하는 또 다른 유용한 기능이 바로 어디서든지 checkout, git에서는 clone을 하면 바로 작업이 가능하다는 점이다. 이것은 메인 서버에 소스를 두고 여러 작업 환경에서 동시에 작업을 할 수도 있고, 각각의 작업환경에 따라서 다른 branch도 관리를 할 수 있게 되는 것이다. 각각의 작업환경에서 별도로 작업한 소스들은 언제든지 메인서버로 업로드하고 merge가 가능하며 git 특유의 로컬에서 많은 동작들을 수행하는 특징 때문에 이 분산 환경에서 제공하는 코딩은 더욱더 빛을 발하게 된다. 팀으로 개발할 때에도 Git의 특성이 빛을 발하게 되는데, 홈페이지에서 쉽게 그림으로 설명해주고 있다. 아래는 SVN등에서 사용하는 가장 일반적인 팀 개발 방법이다.


: 하나의 저장소를 같이 사용하면서 동시에 개발하는 것은 어느 버전관리 툴을 사용하더라도 쉽게 제공해주고 있다. 하지만 이렇게 개발을 하다보면 언제나 각자 코딩한 소스가 문제를 일으키기 마련이기 때문에, 이러한 소스를 통합하는 일도 만만치 않다. 따라서, Git를 이용하면 역할을 분담해서 한명은 통합을 전담으로 담당하고 나머지는 각자 부분 개발에 집중을 하는 식으로 쉽게 역할 분담이 가능하다.


: 팀이 커질수록 이러한 통합을 담당하는 역할이 필요할 것이고, 복수의 repository를 쉽게 꾸릴 수 있다는 점 때문에 Git는 이러한 환경을 쉽게 구성할 수 있다. 여기서 더 나아가서 팀이 복수가 되고 하나의 커다란 프로젝트로 일을 하게 된다면, 하위 팀들을 묶어주는 통합 관리자, 그리고 전체를 통합하는 관리자로 더 세분화해서 구성하는 것 또한 쉽다.

: 이렇게 일하는 환경을 구성하게 된다면 여러가지 기능의 통합으로 인한 사이드 임팩트를 담당하는 사람을 둠으로써 전체 개발자들이 거기에 쏟는 시간을 줄일 수 있을 것이다.



* Data assurance

: Git에서 사용하고 있는 데이터 모델은 모든 파일을 확실하게 암호화시켜주고 단 하나의 bit까지도 틀리지 않게 보관해준다. 모든 파일은 체크썸 검사를 하고, 다운을 받을 때에도 다시 실시를 하여 Git에서 모든 bit까지 보장을 해주게 된다. 또한 Git 저장소에 있는 파일이나 commit 메세지를 무단으로 수정하려면 commit할 때 부여하는 commit id가 바뀌기 때문에 내가 commit한 것인지 확실하게 보장할 수 있고, 히스토리 관리에도 유용하다.



* Staging area

: 위에서 썼다시피 git는 많은 명령어들을 로컬에서 실시하고 나중에 서버에 올리는 방식을 사용하고 있다. 이것은 기존의 svn에서 commit이 1. 소스를 수정하고, 2. 저장소로 업로드 하는 2 단계를 각각의 명령어로 분리하여 중간에 로컬에서 일하다가 저장소에 적용하기 전의 잠재적인 한 번의 단계를 거치게 된다.

: SVN등과 같은 다른 버전관리 프로그램들을 이용하다 git를 사용하게 되면 가장 많이 헷갈리는 부분이다. 한번의 명령으로 바로 적용되는 SVN과는 달리 2번의 명령을 실행해야 마침내 서버에 있는 저장소로 업로드가 된다. 물론 이것은 "git commit -a" 의 명령을 통해서 굳이 이러한 특징을 활용하지 않고 다른 버전관리 프로그램들과 같이 이용하는 것도 가능하다.



* Free and open source

: Git는 GPLv2 오픈소스 라이센스를 사용해서 무료로 사용할 수 있다. 다른 유료 프로그램들도 많지만, 오픈소스로 이러한 버전관리 프로그램을 제공해주니 굳이 사용 안할 이유도 없지 않겠는가!



* 지금까지 git의 소개를 했고, 다음에는 설치하고 기본적인 사용 방법에 대해서 알아보자.


- 다음편

2013/10/12 - [Git] 버전관리로 Git을 사용해보자! - 설치

2013/10/21 - [Git] 버전관리로 Git을 사용해보자! - 기본 명령어

2013/10/31 - [Git] 버전관리로 Git을 사용해보자! - github에 무료 저장소 만들기

2013/12/08 - [Git] 버전관리로 Git를 사용해보자! - 이클립스와 Github 연동하기

2013/12/09 - [Git] 버전관리로 Git을 사용해보자! - Sublime text와 git 연동하기

2013/12/?? - [Git] branch 명령어 활용 작성 중



저작자 표시 비영리 동일 조건 변경 허락
신고

이 글을 공유하세요.

질문이나 의견을 댓글로 달아 주세요

티스토리 툴바