Home | Info | Research | Blog | Repos | Messages | Contact Me

 




윈도우 프로젝트 필수 유틸리티 - Subversion, Trac, CruiseControl.NET이 출간되었습니다.

요즘 제가 블로그에 글 쓰는 것이 뜸했습니다. 다 이 책 때문이었습니다. 원래는 좀더 일찍 나올 수 있었는데, 표지 결정이 늦어지면서 5월 30일에 출간하게 되었습니다. (이때를 틈타 막판에 원고를 수정할 수 있었습니다. 편집자들이 너무 고생을해서 저를 잡아먹으려고 작전을 세우고 있다는 소문이...)

윈도우 기반 환경에서 Subversion, Trac, CruiseControl.NET을 활용하는 방법에 관한 책입니다.

윈도우용 Subversion, TortoiseSVN의 기본적인 사용 방법과 Apache와 연동하기, Trac 설치 및 사용 방법, CruiseControl.NET 빌드 스크립트 문법과 사용 방법을 설명합니다.

그리고 PDB 파일에 Subversion 저장소 정보를 기록하고 심볼 서버 형태로 저장하는 방법도 포함되어 있습니다. 이 과정을 CruiseControl.NET과 연동하는 방법도 설명합니다.

배포 자동화를 위한 릴리스(Release) 서버 구축 방법, 그리고 문서화 도구인 Doxygen 사용 방법과 CruiseControl.NET을 연동하기, Subversion 저장소와 Trac 데이터베이스를 자동으로 백업하기, 윈도우 드라이버 자동 빌드 하기 등의 내용으로 구성되어 있습니다.

내용 설명이 길었습니다. 결론은 "개발자가 일하기 편한 환경 만들기"입니다. 개발 이외의 관리에 소비되는 시간을 절약하여 좀더 개발에 집중할 수 있게 하는 것이 목적입니다.

많은 개발자들이 삽질에서 벗어나 좀더 편한 환경에서 일할 수 있었으면 합니다.

자주 하는 질문
추가 팁
독자 후기
오탈자




윈도우에서 Subversion 커밋 메일을 보내는 방법을 문서로 작성하였습니다.

이번 문서는 커밋 메일 설정에 어려움을 겪고 계신 분들을 위해 작성하였습니다. 커밋 메일에 관련된 질문은 이 글의 댓글로 달아주시면 됩니다.

http://www.pyrasis.com/main/SubversionCommitMailForWindows




WebSVN 2.0rc4 한글 패치를 공개합니다.

만든지는 좀 오래 되었는데 패치를 원하시는 분들이 계셔서 늦게나마 공개합니다. 패치로 수정된 것들은 다음과 같습니다.
  • 한글을 정상적으로 표시. (로그 보기, 파일 내용 보기, 비교, 수정한 사람 보기)
  • enscript를 사용한 상태에서도 한글을 정상적으로 표시
  • 시간과 날짜를 정상적으로 표시
  • 한글 번역 메시지 추가.

http://www.pyrasis.com/main/WebSVNPatch

본 사이트 소스코드 저장소에서도 패치 내용을 조회 할 수 있습니다.




CDE는 Collaborative Development Environment의 약자인데 말그대로 협업 개발 환경입니다. 이 협업 개발 환경의 중요성은 이제 손아프니 더 이상 강조하지 않기로 하고, 본론으로 들어가서 현재 나와있는 CDE 시스템들을 리뷰해 보도록 하겠습니다.

리뷰한 시스템들 중에서 상용 시스템들도 있으며 무료로 사용할 수 있는 것들도 있습니다.

CollabNet Enterprise Edition
http://www.collab.net/products/enterprise_edition
Subversion을 만든 CollabNet의 CDE 시스템입니다. 15명 까지 무료로 사용할 수 있습니다.

일단 설치가 아주 짜증납니다. 스크립트를 받아와서 설치를 해야 하는데 Red Hat Enterprise Linux ES release 3 (Taroon Update 6)에서 설치해야 합니다. 다른 리눅스 배포판에서 설치할 경우 상당한 삽질을 각오해야합니다. 첫 진입 장벽이 이렇게 높으니 15명 무료라고 해도 아무도 안쓴다는 결론이 나옵니다.

데모 사이트도 사용법이 불분명하고 도무지 제품을 팔 생각이 있는지 의심이 됩니다. 삼성전자에 팔았다고 광고를 하고 있긴 한데, 제 예상으로는 설치된 서버를 통째로 팔고 거기 설치, 유지 보수, 관리 인력도 함께 팔았을(?) 것 같은 생각이 듭니다.

데모 사이트 보다는 http://tigris.org를 보는 것이 속편하며 이것이 CollabNet Enterprise Edition을 사용한 사이트라고 봐도 됩니다. 버그 트래커, 소스코드 저장소 뷰어, 메일링 리스트, 파일릴리즈 등 기본적인 기능을 갖추었으나 모두 상당히 미흡(허접)합니다.

SourceForge Enterprise Edition
http://sourceforge.net/powerbar/sfee
오픈소스 프로젝트 호스팅 사이트로 유명한 소스포지의 엔터프라이즈 버전입니다. 이것도 15명까지 무료로 사용할 수 있습니다.

설치는 Collab 제품과는 달리 아주 간편합니다. 따로 설치할 필요는 없고 VMware 이미지(VMware Virtual Appliance)로 배포를 하고 있어서, 이것만 받아서 VMware에서 실행하면 서버가 바로 동작됩니다.

서버를 부팅하고 root 로그인을 하면 설정하는 것이 나오는데 서버 IP 설정과 SMTP 서버 설정만 해주면 바로 작동이 됩니다.

sourceforge.net 처럼 사용자를 등록하고 그 사용자가 프로젝트를 제출하고 프로젝트 공간을 호스팅 받아 운영을 하는 방식입니다. 프로젝트와 사용자가 많아도 일관성 있게 관리할 수 있도록 되어 있습니다.

트래커, 문서화, 태스크, 게시판, 소스코드 저장소 뷰어, 리포트, 파일릴리즈, 위키등의 기능을 가지고 있으며, sourceforge.net과는 전혀 다른 모습을 보여줍니다. 모든 트래커, 태스크, 문서, 커밋등은 고유의 ID를 가지고 있어서 관리 및 추적이 편리합니다. 위키에서도 이 고유 ID를 적어주면 바로 링크가 됩니다. 하지만 위키는 대충 모양만 내서 그런지 일반 위키에 비해 기능이 미흡합니다.

각 트래커나 태스크, 문서화, 게시판, 위키등을 모니터링 하여 메일로 받아 볼 수 있지만 소스코드 커밋은 모니터링이 되지 않는 단점이 있습니다.

저장소는 CVS와 Subversion을 사용할 수 있고 하나의 프로젝트에 여러개의 저장소를 만들 수 있습니다. 저장소 뷰어는 ViewVC를 사용하는데 소스코드 컬러링이 되지 않습니다.

저장소에 커밋을 하고 트래커나 태스크의 고유 ID를 적어주면 해당 트래커, 태스크에 커밋로그가 붙습니다. 커밋을 할 때 꼭 트래커나 태스크 ID를 적어줘야 커밋이 되도록 설정할 수도 있습니다.

디자인이 매우 딱딱하며 버튼들은 유닉스의 모티프류 어플리케이션을 보는 것 같은 느낌이 듭니다.

데모 사이트에서 대강 모양을 확인할 수 있습니다. 하지만 모양만 확인이 가능하고 전체 기능을 사용하려면 VMware 이미지를 받아서 해야 합니다.

GForge Advanced Server
http://gforgegroup.com/es
소스포지를 포크하여 개발한 시스템인데 완전 새로 개발하여 전혀 다른 시스템이 되었습니다. GForge라는 오픈소스 프로젝트를 기반으로 만든 것이지만 오픈 소스 버전과는 질적으로 수준이 다른 시스템입니다. GForge 프로젝트가 새로운 회사를 차려서 판매를 하고 있고, 15명 까지 무료로 사용할 수 있습니다.

소스포지 엔터프라이즈와 같이 VMware 이미지를 받아서 네트워크 설정만 하면 간편하게 사용할 수 있습니다.

트래커, 게시판, 리포트, 문서화, 뉴스, 파일릴리즈, 메일링 리스트, 위키, 소스코드 저장소 뷰어를 갖추고 있으며, 트래커에서는 게시물의 세부적인 속성을 하나 하나 지정할 수 있고 위키에서 트래커를 바로 링크할 수 있습니다. 하지만 저장소의 리비전은 링크가 되지 않습니다. 이 위키도 모양만 내서 그런지 일반 위키에 비해 기능이 매우 미흡합니다.

트래커, 게시판, 문서화, 파일릴리즈등 각각의 게시물을 하나 하나 모니터링 할 수 있습니다. 하지만 위키 변경사항은 모니터링 되지 않습니다.

개인 페이지도 소스포지 엔터프라이즈에 비해 기능이 좋으며 개인 위키, 개인 파일 저장공간, 개인 일정(gantt chart)을 제공합니다.

저장소도 CVS, Subversion 뿐만 아니라 ClearCase, Visual Source Safe도 사용이 가능했고 커밋로그를 메일링 리스트로 보내도록 설정하면 자동으로 커밋로그 메일링 리스트가 생성되어 편리합니다. 하지만 소스코드 컬러링은 되지 않고, 프로젝트 하나에 저장소 하나만 표시할 수 있습니다.

소스포지와 마찬가지로 저장소에 커밋을 하고 트래커의 고유 ID를 적어주면 해당 트래커에 커밋로그가 붙습니다. 커밋을 할 때 꼭 트래커 ID를 적어줘야 커밋이 되도록 설정할 수도 있습니다.

디자인은 그라데이션을 사용하여 소스포지 보다는 괜찮지만 칙칙한 감이 있으며 한글로 설정해서 사용할 경우 폰트 크기가 코딱지 만하게 나와서 보기도 불편하고 클릭하기도 힘듭니다.(클릭을 하려면 조준(?)을 해서 해야합니다, 이건 아시아권 시장을 포기한거나 마찬가지겠죠)

데모 사이트에서 사용자를 등록하고 테스트 프로젝트를 만들어서 각 기능을 사용해 볼 수 있습니다.

Trac
http://trac.edgewall.org
가장 최근에 나온 시스템이며 여러 오픈소스 프로젝트 및 기업에서 사용하고 있습니다. 오픈소스 프로젝트로 제한 없이 사용할 수 있습니다. 하지만 얼마전에 회사가 망해서 커뮤니티 형태로 계속 개발이 되고 있긴 하지만 버전 1.0도 나오지 않았는데 이렇게 되서 안타까운감이 있습니다.

VMware 이미지 같은 것은 제공해 주지 않지만 덩치가 크지 않아 설치가 크게 어렵지 않은 편입니다.

전체 시스템이 위키 기반으로 되어 있고 위키의 기능도 일반 위키 만큼 상당히 좋습니다. 위키에서 각 티켓, 저장소 리비전 등을 손쉽게 링크할 수 있습니다.
 
로드맵(마일스톤)을 이용해서 프로젝트의 개발 진행상태를 파악할 수 있고, 타임라인을 통해서 프로젝트의 전체적인 변경사항들을 한눈에 볼 수 있습니다. 로드맵은 iCalendar 형식으로 출력할 수 있고 타임라인은 RSS 형태로 받아 볼 수 있어서 아주 편리합니다.

저장소 브라우저도 소스코드 컬러링이 아주 잘되며(이것을 중점적으로 개발한 것 같은 느낌이 듭니다. 백엔드로 Silver City와 Enscript를 사용합니다.), 디자인도 괜찮습니다. 리비전간 Diff도 깔끔하게 출력되고 한글 폰트 크기도 적당하게 나옵니다.

저장소에 커밋을 하면 커밋 로그를 메일로 보낼 수 있고 해당 티켓에 커밋 로그를 붙일 수 도 있습니다. 저장소 타입도 Subversion 뿐만 아니라 CVS, Darcs, Bazaar, Mercurial, Git, Perforce, SVK, Arch, monotone, ClearCase등 많은 버전 컨트롤 시스템을 지원합니다.

각종 플러그인이 많이 나와 있지만 파이썬 프로그래머가 많지 않아서 PHP 기반 프로젝트들에 비해 개발 속도도 느리고 결과물의 양이 많지 않은 것 같습니다.

단점으로는 정식버전이 아직 나오지 않았다는 것과 위의 CDE 시스템들에 비해 여러 프로젝트를 관리하는 기능이 없어 불편합니다. 그리고 사용자 관리와 개인 페이지기능도 매우 부실합니다.

프로젝트 생성과 관리에 있어서도 다른 시스템들은 웹상에서 모든 것을 처리할 수 있지만 트랙은 커맨트라인 도구(trac-admin)을 이용해야 하는 불편함이 있습니다.

기타 시스템들
GForge - 오픈소스라서 제한 없이 사용할 수 있습니다. 국내에서는 kldp.net에서 사용하고 있지만 설치 및 관리를 하려면 상당한 삽질을 해야하고, 기능도 그다지 뛰어나지 않습니다.
ClearCase - 기능이 막강하다고 하는데, 가격이 매우(!) 비싸고 사용법이 복잡해서 쓸일은 없을 것 같습니다.

맺음
지금까지 여러가지 CDE 시스템들을 알아보았는데 완벽한 시스템은 없었습니다. 그리고 사용계층이 대중적이지 않은데다 이런 시스템을 사용하는 소프트웨어 개발업체가 적어, 제품이 많이 팔리지도 않고, 가격도 비싸고, 개발도 활발하지 못한 악순환이 계속 되고 있습니다. 이 협업 시스템이 널리 퍼져 제품도 많이 발전했으면 합니다.



"CVS에서 Subversion으로 바꾸기, 좋을까(http://cwryu.tistory.com/17)"라는 글이 많은 사람들에게 인용되고 있고 마치 전문가의 글인것 처럼 전달되면서 편협된 정보를 전달할 우려가 있어, 제가 이에 대한 반박을 하고자 합니다.

그놈 CVS가 subversion으로 전환한 이후 얼마가 지났으나 사실 큰 장점을 못 느끼는 게 사실이다.  애초에 subversion은 cvs와 같은 모델의 vc를 만들면서 cvs의 단점을 보완하는 게 목적이었고, 사용법부터 시작해서 크게 다르지 않다.  흔히 cvs와 비교해 장점이라고 하는 것들을 살펴보면:
1. renaming, file property 따위의 versioning

안정된 프로젝트일 수록 디렉토리 이름을 바꾸는 일은 그리 많지 않다.  (과거에 회사에서 오타가 섞인 이름마저 끝내 바꾸지 못했던 기억이 있다.)

바꾸어 말하면 안정된 프로젝트까지 가기에는 여러가지 바뀔게 많다는 소리인데, 이런 상황에서는 어쩌란 말인지? 거기다 오타가 섞인 이름을 끝내 바꾸지 못했다는 것을 당연하다는 듯이 이야기 하는 것도 정말 어처구니가 없습니다.

버전 관리 시스템을 사용한다는 것은 잘못된 것은 수정하고 그 기록을 남기기 위해서 사용하는 것입니다. CVS에서 이름 바꾸기가 잘 되지 않는다고 잘못된 것을 방치하는 것은 주객이 전도된 상황이 아닌가요?

이 주장은 단점도 아닌데(아주 당연한 기능인데) 단점을 만들기 위해 근거를 끼워 맞춘것에 불과합니다.

2. atomic commit/tag

CVS의 commit/tag가 atomic이 아니라고 해서 문제가 될 상황도 별로 많지 않다.  오히려 (사람이 직접 신경 쓰지 않으면 해결할 방법이 없는) 논리적인 충돌이 더 많이 발생한다.

문제가 될 상황이 별로 많지 않다는 것은 한번이라도 문제가 생길 수 있다는 소리이며, 커밋과 태깅을 하다가 중간에 짤리면 그것을 수정하기 위해 엄청난 시간과 노력이 소비된다는 것을 알아야 합니다.

Subversion은 커밋과 태깅이 atomic 해서 이런 문제가 전혀 발생하지 않으므로 여기에 소비되는 시간과 노력을 절약할 수 있습니다.

논리적 충돌은 곧 버그를 의미하며 이것을 안고치면 계속 버그로 남아있을 텐데 당연히 신경을 쓸 수 밖에 없습니다. 그리고 이런 이유로 atomic 커밋이 별 장점이 되지 않는다고 주장하는 것은 문제의 핵심을 벗어난 것입니다.

atomic 커밋, 태깅의 핵심은 이것을 지원하지 않음으로 인해서 생기는 문제가 어떤 것이냐는 것입니다.

3. lightweight branching

이 부분은 서버의 로드와 관련된 것이므로, 알기 어렵다.  분명히 장점이다.

알기 어려우면 왜 적었는지 모르겠습니다. 제가 다시 설명하자면, Subversion은 태깅 및 브랜칭을 할 때 내부적으로 링크만 생성하는 것이기 때문에 서버측의 로드는 거의 제로에 까깝습니다.

4. diff/revert에 네트워크 연결이 필요없다

이것만은 확실히 좋다는 걸 느낀다.  cvs는 diff를 할 때마다 해당 파일의 전체 내용을 전송받는데, 유럽에 있는 gnome cvs 서버에서 이 내용을 받는 건 만만치 않은 일이다.  심심풀이 해커도 그리 느끼는데 업으로 삼는 사람들은 더더욱 좋다고 생각할 듯.

서버가 멀리있는 사람 뿐만 아니라 내부 네트워크에서도 이런 차이가 쾌적한 개발 환경을 제공해 준다는것을 간과하고 있습니다.

subversion은 cvs와 비교해 분명한 장점이 있으나 멀쩡히 안정적으로 잘 돌아가는 닫힌 프로젝트의 vcs를 cvs에서 svn으로 바꾸는 일은 별로 추천하지 못하겠다.  옮겨가는 데 별로 무리도 없지만 얻는 장점도 별로 없기 때문이다.  (gnome처럼 vcs 이용자가 워낙 많고 세계 여기저기에 퍼져 있는 경우라면 위의 3/4 항목으로 큰 이득을 볼 수도 있겠지만)

쓰는 사람 입장에서 CVS가 불편하다면 닫힌 프로젝트라도 바꾸는 것이 당연하고, 얻는 장점도 별로 없는 것이 아니라, 인용글에서 제시한 1, 2, 3, 4번의 장점을  장점을 모두 얻을 수 있는데, 뭔 장점이 별로 없다는 것인지 모르겠습니다.

저는 CVS에서 Subversion 전환을 강요할 목적은 전혀 없습니다. 하지만 잘못된 정보가 전달되는 것을 막기 위해 이렇게 글을 썻음을 다시 한번 알려드립니다.



Subversion에는 커밋을 하면 커밋 로그와 변경사항을 메일로 보내주는 기능이 있습니다. subversion 안에 있는 mailer.py 스크립트는 일반 메일서버로는 메일이 잘 보내지지만 Gmail SMTP는 사용이 잘 되지 않습니다. mailer.py를 약간 수정하면 Gmail SMTP로도 커밋 로그 메일을 잘 보낼 수 있습니다. (리눅스의 경우 자체 sendmail을 통해 보내는 것은 수정 없이도 가능합니다.)

mailer.py 스크립트는 Subversion 소스 안에 tools/hook-scripts/mailer에 있습니다.

일단 이 스크립트를 사용하려면 저장소의 hooks 디렉토리안에 post-commit.tmpl 파일을 post-commit으로 이름을 바꿉니다. (Windows의 경우 post-commit.bat으로) 그리고 post-commit 파일의 맨 아래에 다음을 추가합니다.

Linux, BSD 등.
/repos/mailer.py commit "$REPOS" "$REV" /repos/mailer.conf

Windows
C:\repos\mailer.py commit %REPOS% %REV% C:\repos\mailer.conf


그리고 mailer.conf.example를 mailer.conf로 이름을 바꾸고 내용 Gmail에 맞게 설정을 합니다.

# This option specifies the hostname for delivery via SMTP.
smtp_hostname = smtp.gmail.com:587

# Username and password for SMTP servers requiring authorisation.
smtp_username = example@gmail.com
smtp_password = (이메일 암호)

다른 설정은 자신의 환경에 맞게 설정합니다.

mailer.py의 SMTPOutput 클래스 finish 함수를 아래와 같이 수정합니다.
def finish(self):
  server = smtplib.SMTP(self.cfg.general.smtp_hostname)
  if self.cfg.is_set('general.smtp_username'):
    server.ehlo()         # 추가된 부분
    server.starttls()     # 추가된 부분
    server.ehlo()         # 추가된 부분
    server.login(self.cfg.general.smtp_username,
                 self.cfg.general.smtp_password)
  server.sendmail(self.from_addr, self.to_addrs, self.buffer.getvalue())
  server.close()          # server.quit()를 server.close()로 수정.

이렇게 하면 Gmail SMTP 서버를 통해서 커밋 로그 메일을 보낼 수 있습니다.
Gmail은 TLS 인증을 사용하기 때문에 starttls()함수를 호출해 줘야 로그인이 됩니다.






ViewVC는 Subversion, CVS를 웹에서 간편하게 볼 수 있게 해주는 도구입니다. 원래는 ViewCVS였는데 Subversion을 지원하기 시작하면서 이름이 바뀌었습니다.

이번에는 윈도우에서 아파치와 Mod Python을 이용하여 ViewVC를 사용하는 방법을 다루었습니다.

처음에 제가 먼저 사용해 보려고 했을 때 CGI 모드와 Stand Alone 모드는 잘 동작했는데, 유독 Mod Python으로는 동작이 잘 되지 않았습니다. handler.py에서 path를 잘 받아오지 못해서 모듈을 못찾는 것이었습니다. 이 부분은 문서에 포함시켰습니다.

그리고 로그는 UTF-8로 인코딩 되어 있기 때문에 잘 나오는데, 소스 안에 있는 한글 주석과 diff를 했을 때, blame을 했을 때 한글이 깨지는 것, 시간을 UTC에서 한국 표준시 표시하도록  수정한 패치와, 패치된 파일도 첨부하였습니다. 패치된 소스는 저장소에서도 확인 할 수 있습니다.

enscript 사용하여 소스코드 컬러링(Syntax highlighting) 설정하는 방법도 설명하였습니다.

http://www.pyrasis.com/main/SubversionWithViewVCForWindows





윈도우에서 Subversion과 Apache, OpenSSL를 연동하여 http와 https 프로토콜을 사용하는 서버를 구성하는 방법을 설명합니다.

이번 문서는 모든 개발 환경을 윈도우에서 구축하고자 하는 분들을 위해 작성하였습니다.

http://www.pyrasis.com/main/SubversionServerForWindows