본문 바로가기

공부/Mercurial

Mercurial SCM (Source Control Management)


요즘 회사에서 몇 년전 포스팅했던 TOW(Trac On Windows)를 사용하고 있다. 
현재는 거의 혼자 일하기 때문에, 이슈 트랙킹은 거의 사용하지 않고 있으며
SVN은 소스 형상 관리 면에서는 이전보다 상당히 편리해졌다는 생각이 든다. 

SVN과 같은 기존 버전 관리 시스템은 중앙 서버에 소스 수정 이력이 저장되는 구조를 가진다. 
이러한 특징은 많은 한계점을 보여주는데, 내가 사용하면서 느꼈던 예를 들다면 다음과 같다. 

1) 항상 서버와 연결이 되어야 작업이 가능 
본인의 회사는 방화벽때문에 외부 접속이 불가능하다. 따라서 집에서는 작업이 불가능하다. 
마찬가지로, 외부로 출장을 나가더라도, 버전 컨트롤 시스템에 접속해서 작업은 불가능하다. 

2) 네트워크의 상황이 성능에 많은 영향을 미치고, 전체적으로 성능이 느림
중앙 서버와의 연결 속도가 성능에 많은 영향을 미친다. 
개발을 위해 이클립스를 사용하고 있는데, 가끔 네트웍 상황이 썩 좋지 않을 때 매우 버벅대는 경우가 생긴다. 

이러한 단점을 극복하기 위해 개발된 분산 버전 관리 시스템(Distributed Version Control System)은 수정 이력을 저장하는 중앙 서버가 별도로 존재하지 않으며, 각각의 개발자(클라이언트)마다 수정 이력을 저장한다. 

이러한 점 때문에 분산 버전 관리 시스템은 최근(? 최근이라 하기는 좀 시간이 지난 듯 하지만) 주목받고 있다. 

나도 위에서 말한 문제에 대한 대안으로 사용할 수 있을만한 분산 버전 관리 시스템을 찾고 있었으며, 
그 와중에 Mercurial 이라는 프로그램을 만날 수 있게 되었다.
(사실 직접 찾은건 아니고 선배의 추천으로... ㅎㅎ 그게 벌써 1년이 되어가는 듯 하다.) 

위에서도 말했지만 Mercurial은 분산 버전 관리 시스템이므로, 분산 버전 관리 시스템이 가지는 많은 장점을 가진다. 
공식 홈페이지(http://mercurial.selenic.com/)에서 말하는 Mercurial의 특징을 요약하면 다음과 같다. 

1) 분산 아키텍쳐 (Distributed architecture)
전통적인 버전 컨트롤 시스템(e.g. Subversion)은 전형적인 서버-클라이언트 아키텍쳐의 형태로써, 중앙 서버에 수정 내용이 저장된다.
반면에 Mercurial은 수정 내용이 분산되어 있으며 각각의 개발자가 전체 개발 히스토리의 로컬 복사본을 가진다. 

Mercurial은 위와 같은 방법으로 네트워크 연결이나 중앙 서버에 독립적으로 동작한다. 
Commit, Branch, Merge 작업이 빠르고 비용이 저렴하다.  

2) 빠른 속도 (Fast) 
3) 플랫폼 독립성 (Platform independent)

Mercurial은 플렛폼에 독립성을 고려하여 작성되었다.
Mercurial은 Python으로 작성되었으며, 성능적인 이유에 의해 아주 작은 부분만 C로 작성되어 있다.

4) 확장성 (Extensible)
5) 사용하기 쉬움 (Easy to use) - (과연?)
6) Open Source (GPL2)


해외에서도 많은 문서를 찾을 수 있지만, 위키피디아에서 Mercurial을 검색하다보니 
국내에도 튜토리얼이 있어, 이를 이용하면 빠른 학습이 가능할 것으로 보인다.

Mercurial 튜토리얼 한국어 버전 : http://mercurial.selenic.com/wiki/KoreanTutorial

앞으로 이 카테고리에 Mercurial 사용법을 정리해보겠다.