본문 바로가기

공부/Mercurial

개인용 Java 기반 프로젝트 환경 설치 - (2) Mercurial 설치 및 설정

1. Mercurial 설치 개요


  머큐리얼은 대표적인 DVCS(Distributed Version Control System) 중 하나다. 머큐리얼에 대한 설명은 내 블로그에 이미 정리된 포스트(http://silencer.tistory.com/57)가 있으므로, 생략한다. 

  현재까지 내가 머큐리얼을 사용하면서 직접적으로 느낀 장점과 단점은 아래와 같다. 

  • 장점
    • 빠른 커밋
      • 로컬 저장소에 이력을 저장하므로, 커밋이 빠르다. 로컬 저장소에 커밋이 빠르다는 점은, 그만큼 '커밋을 하는데 부담이 적다'라는 장점을 가질 수 있고, 이는 사용자가 변경사항에 대해 더 자주 커밋을 할 수 있도록 해준다. 
      • 단, 이 커밋은 중앙 저장소로의 커밋과는 다르다. 머큐리얼은 중앙 저장소로의 동기화를 위해 pull, push 라는 명령을 지원한다. (pull = svn의 update, push = svn의 commit과 같은 개념을 보면 됨)
    • 충돌이 비교적 적음
    • 설치/사용의 간편성
      • 서버/클라이언트 등을 설정해야 하는 SVN과 달리 머큐리얼은 자체가 서버/클라이언트 역할을 모두 할 수 있으므로 설치가 간편하다. 
      • 또한, TortoiesHg 라는 강력한 UI 툴을 지원하므로, 중앙저장소, 개발 환경에 관계 없이 머큐리얼과 TortoiesHg 패키지만 설치하면 되고, (물론, 이클립스 사용 시에는 머큐리얼 플러그인을 사용하는 게 좋다.) ToroiesHg를 통해 모든 명령어를 명령창 없이 GUI만으로 사용할 수 있다. 
    • 분기(branch)와 병합(merge)이 유연함
      • branch 명령을 지원하긴 하지만, 단순히 clone이라는 명령을 통해 프로젝트를 복사하는 것만으로 분기가 가능
      • clone 명령을 통해 분기한 프로젝트의 변경 사항을 기존 저장소로 push 함으로써 변경 사항을 merge 할 수 있음
  • 단점 
    • 중앙 저장소 동기화 빈도가 낮아짐
      • 시스템의 문제라기보단, 프로그램 사용상의 문제에 가깝다고 봐야 할 것 같음
      • 특히, SVN에 익숙한 사용자의 경우, SVN의 commit과 머큐리얼의 commit을 동일하게 여기는 경향이 생기는 듯함
      • 하지만, 중앙 저장소와 동기화하지 않는 DVCS는, 개발 툴이 지원하는 History 기능이나 마찬가지라는 생각이 듬
      • 또한, 동기화 빈도가 낮아질수록 충돌이 발생할 가능성은 점점 높아짐
      • 정기적인 push, pull 주기를 정하는 등의 별도 정책을 정하여, 중앙 저장소와 정기적으로 동기화를 수행할 수 있도록 하는 것이 좋을 것 같음

2. Mercurial 설치

  Mercurial 설치는 패키지를 다운 받아 Install 하고, 별도의 설정 없이 기본 값을 선택하면서 설치하면 된다. 자세한 설치 과정은 이 블로그의 포스팅(http://silencer.tistory.com/58)을 참고한다. 


3. Mercurial 설정


  머큐리얼 Workbench를 실행하면, 현재 생성된 Repository를 확인할 수 있으며, 여기서 여러가지 설정을 수행할 수 있다. 여기서는 설정에 대해 자세한 설명은 생략하고, 기본적인 설정만 진행한 후, 변경할 때마다 내용을 추가하기로 한다. 


  • Workbench에서 File > Settings를 선택하면 TortoiesHg Settings 창이 표시된다.
    • Commit
      • Username을 설정한다. Username은 이 PC에서 commit을 수행할 시에 사용자 이름을 나타낸다. 
    • Web Server
      • 웹서버 실행 시 홈페이지에 표시할 이름, 설명, 포트 등을 설정해준다. 또한, Allow  Push, Deny Push 등을 설정해주어야 하는데, 이는 중앙 서버에 Push 할 수 있는 사용자 이름을 의미한다. 

4. Repository 생성

  머큐리얼의 웹서버는 최소한 하나의 저장소가 존재할 때 실행이 가능하다. 실행을 위해 먼저 서버측에 테스트용 Repository를 생성한다.



  1. File > New Repository를 선택하면 위와 같은 창이 표시된다. 
  2. 알맞은 저장소 디렉토리를 설정한다. (주: 웹서버 상의 주소가 매핑될 때, Space나 한글을 구분하지 못하는 경우가 많으므로, Repository 주소는 항상 공백이나 한글이 없도록 하는 것을 추천한다.) 
  3. Create 버튼을 눌러 Repository가 생성된 것을 확인한다. 
  생성한 Repository를 아래와 같이 Workbench에서 확인할 수 있으며, Repository의 이름을 변경할 수 있다. 알맞은 이름으로 변경한다. 




5. 웹서버 실행


  머큐리얼의 Web Server를 띄운다는 의미는 단순히 이력을 확인할 수 있는 웹 페이지를 올리는 작업을 말하는 것은 아니다. 머큐리얼은 push를 받기 위해서는 Web Server가 동작해야 하며, 해당 포트를 통해 push 정보를 수신받게 된다. 



  1. 메뉴의 Repository > Start Web Server를 실행한다. 위와 같은 창이 표시된다.
  2. 포트를 설정하고, Start 버튼을 누른다. 

  아래쪽에 표시된 Config File에 주목해보자. Web Server 실행시, 기본적으로 Workbench에서 선택한 Repository를 실행하도록 되어있으나, 만약 다수의 Repository를 웹서버에 띄우고자 한다면, 미리 Config File에 다수의 Repository를 지정해두는 것이 좋다. 


[paths] 하위에 [프로젝트이름]=[Repository경로] 형식으로 지정하고, 이를 파일로 저장하고 매 실행시 이 파일을 로드하면, 다수의 Web페이지를 띄울 수 있다. 


※ 이 설정 파일의 물리 경로에 공란이 포함되어 (e.g. "Program Files") 인식이 되지 않는 경우를 겪은 적이 있다. 반드시 경로에 공란이 포함되지 않도록 주의할 것



6. 웹 서버 실행 자동화


  위와 같이 설정을 하더라도, 웹서버는 사용자가 WebServer를 실행시켜주기까지 동작하지 않는다. 그렇다고, 매 번 Web Server를 서버 부팅시마다 실행해주는 것은 너무 비효율적인 일이다. 간단한 방법을 통해 웹서버가 부팅시마다 켜질 수 있도록 해보자. 


  머큐리얼은 기본적으로 TUI 형식의 명령어를 지원한다. 머큐리얼과 관련된 명령을 수행하기 위해서는 hg(주: Mercurial=수은 -> 수은의 원소기호 hg)를 타이핑하고, 뒤에 수행할 작업을 인자로 전달해야 한다. 머큐리얼이 지원하는 작업 종류는 다음의 명령을 통해 확인할 수 있다. 


> hg help


  이 명령어 중, hg serve 라는 명령이 존재한다. serve 명령은 웹 서버를 실행해주는 명령이며, 이 때 필요한 옵션은 아래와 같은 명령으로 확인할 수 있다. 


> hg help serve

아래 이미지는 hg help serve 명령을 수행한 결과이다. 


  이 중, -d, -p, --web-conf 옵션 등에 주목할 필요가 있다. 대부분은 위에서 Web Server 관련 머큐리얼 설정에서 알아본 내용이므로, 별도의 부연 설명은 생락한다. 최종적으로 실행할 명령어는 아래와 같다. 


> hg serve -d -p [웹 포트번호] --web-conf [웹 설정 파일 경로]


  이 명령을 수행하면, 웹서버가 백그라운드 프로세스로 수행되게 된다. 프로세스의 이름은 hg.exe이므로, 종료를 원할 땐 참고하기 바란다. 


  이 명령을 배치파일로 만들어 시작 프로그램에 등록하거나, 배치 파일을 서비스 형태로 등록하면, 매 실행시마다 WebServer를 실행할 필요 없이 자동으로 머큐리얼 웹서비스가 실행된다. 아마도 시작 프로그램으로 실행시에는 사용자 로그인이 필요하거나, 별도의 조작이 필요하므로, 가장 이상적인 건 배치파일을 서비스로 등록하는 방법일 것이다. 배치 파일을 서비스로 등록하는 방법은 다음 포스팅과 외부 링크를 참고한다.


(다행히도, Windows 7에서도 호환성 문제 없이 잘 동작한다. 설치 과정에서 호환성 관련 경고를 한번 무시하는 것 빼고는 아래 절차와 동일하다.)


http://silencer.tistory.com/30