무들 개발자를 위한 CVS

CVS 는 Concurrent Versioning System의 머릿글자를 따온 것으로, 대형 소프트웨어 프로젝트를 수행할 때 소스코드를 관리하는 일반적인 방법입니다. CVS는 모든 파일의 모든 버전을 유지해서 결코 어느 것도 잃어버리지 않으며, 다른 사람들에 의해 사용한 경과를 기록하여 둡니다. 또한 동일한 파일에 대해 여러 사람이 작업을 할 경우에도 이들을 잘 통합할 수 있는 방법을 제공합니다. 모든 버전 그리고 모든 코드를 중앙 서버(무들의 경우에는 Sourceforge)에 저장해 놓습니다.

만일 여러분이 CVS를 이용하여 무들을 내려받아 사이트를 운영하려고 한다면, 이 소개는 별로 소용이 없을 것입니다. 그냥 Moodle download page에 있는 CVS 안내서에 있는 대로 따라하기만 하면 될 것입니다.

 

  1. 개발자로서 프로젝트에 참여하기
  2. CVS 모듈
  3. 기본 CVS 명령
    3.1. Unix에서의 CVS
    3.2. Windows에서의 CVS
  4. 가지에서의 작업
    4.1. 개발을 위한 본줄기
    4.2. 각 배포판을 위한 안정 가지
    4.3. 큰 변화를 위한 기능 가지

1. 개발자로서 프로젝트에 참여하기

그렇게만 한다면, 여러분은 무들의 관리자 겸 개발자로서 우리를 도울 수 있는 CVS 쓰기권한을 부여받게 될 것입니다! 개발자로 초청합니다!

Moodle's CVS archive에 변경사항을 반영하기 위해서는, 우선 Sourceforge (무료 등록)에 계정을 생성해야 합니다. 예를 들어 우선 여러분의 사용자명이 myusername이고 비밀번호가 mypassword라고 가정해 봅시다. 특히 소스포지의 CVS 홈디렉토리 생성에 있는 안내문을 주의깊게 살펴보시기 바랍니다. 새로 계정을 만드신 경우 CVS 를 "사용 가능"하게 설정하셔야 합니다. 또 기본적으로 cvs.sourceforge.net에 접속하여 이용하려면 ssh를 사용해야만 합니다.

일단 소스포지 계정을 가지고 작업을 시작하려면 Martin Dougiamas에게 연락해야만 여러분들이 작업하고자 하는 무들 경로의 쓰기 권한을 확보할 수 있습니다.

CVS 접속시 매번 여러분의 mypassword를 요청하는 것을 막기 위해서는 소스포지 인증키 설정 요령에 나오는 방법에 따라 인증키를 만들어 두면 됩니다. 사실 이 과정은 꼭 필요한 것은 아니지만, 이 방법대로 하면 훨씬 수월하게 CVS를 이용할 수 있습니다.

이 과정을 마치면, 필요한 제반 권한은 확보한 것입니다. 따라서 다음은 여러분의 컴퓨터를 설정하고 현재의 소스를 내려받은 다음 작업을 시작하면 됩니다.

 

2. CVS 모듈

CVS 내부에서 "모듈(modules)"이란 각각의 코드 집합을 의미합니다. 무들 저장고에는 다음과 같은 모듈들이 들어있습니다.

moodle - 무들에 쓰이는 주 프로그램들

contrib - 사용자들에 제공하였거나 기타 개발중에 있는 프로그램들

mysql - 데이터베이스 관리자를 위해 무들에 최적화된 phpMyAdmin

windows-cron - 윈도우 시스템에서 cron이 가능하게 만든 작은 패키지

docs - 특별한 사용자들이 제공한 다양한 문서들

대부분의 사람들은 moodle의 모듈에 있는 기존 성능에 대해 작업을 하고 있지만, 또 많은 사람들은 contrib모듈에 새로운 아이디어로 공헌하고 있습니다. 일단 contrib 영역에서 어느 정도 만족할 만한 수준에 오르게 되면, moodle영역으로 옮겨갈 수도 있습니다.

 

3. 기본 CVS 명령

3.1 Unix에서의 CVS

소스포지에서는 보안 전송 계층으로 ssh를 사용하기 때문에 여러분의 유닉스 쉘에 CVS_RSH 환경 변수를 설정해 두어야 합니다. 매번 명령을 입력하기 보다는 여러분의 .bashrc 혹은 .cshrc 파일에 다음과 같은 명령어를 각각 미리 입력해 놓는 방법이 가장 좋습니다:

setenv CVS_RSH ssh (csh 혹은 tcsh 등을 사용할 경우)
export CVS_RSH=ssh (sh 혹은 bash 등을 사용할 경우)

그 다음에는 아래와 같은 명령으로 무들의 최신 개발 버전을 점검할 수 있습니다.

cvs -z3 -d:ext:myusername@cvs.sourceforge.net:/cvsroot/moodle co moodle

다른 모듈을 점검할 때도 비슷합니다.

cvs -z3 -d:ext:myusername@cvs.sourceforge.net:/cvsroot/moodle co contrib

다만, 처음 CVS 명령을 실행할 때는 현재 설치되어 운영되고 있는 무들 디렉토리에서는 하지 마십시오. 대신 새로운 디렉토리에서 시작하기 바랍니다.

여러분이 인증키를 설정하지 않은 경우 CVS를 접속할 때마다 mypassword를 묻는 프롬프트가 뜬다는 것을 유념하여 주시기 바랍니다.

이제, 여러분을 새 'moodle' 디렉토리를 갖게 되었습니다. 여러분은 맘대로 새로 이름을 줄 수도 있고, 옮길 수도 있습니다. 한번 들어가 봅시다.

cd moodle

가장 최근의 무들 파일들이 거기에 있을 겁니다. 이제 여러분은 그 파일들을 고칠 수 있습니다. 여러분이 작성한 파일 및 디렉토리를 CVS 서버의 것들과 비교를 하기 위해서는 cvs diff 명령을 씁니다. 예를들어 :

cvs diff -c config-dist.php
cvs diff -c lang

서버로 부터 마지막 변경 사항을 반영하기 위해서는 :

cvs update -dP

내 변경 사항을 서버로 보내기 위해서는 다음과 같이 하면 됩니다.

cd lang/ca
cvs commit

그러면 약간의 주석을 쓰라고 요구할 것입니다.(여러분이 쓰는 편집기에 따라 다르겠지만).. 몇 마디 주석을 달아주고 편집기를 닫습니다. 그러면 파일은 소스포지로 전송되어 저장됩니다. 다 되었습니다!

시간을 절약하기 위해서는 기본적인 사항들을 미리 여러분의 홈 디렉토리 내의 .cvsrc에 설정해 두면 좋습니다. 아래는 제 .cvsrc 속에 있는 내용들 입니다.

diff -c
update -dP

좀더 자세한 사항을 알고 싶으시면 'cvs help' 를 입력해 보시기 바랍니다.

 

3.2 Windows에서의 CVS

먼저, 여러분의 개발자 계정을 이용하여 완벽한 무들의 새 복사본을 내려받을 필요가 있습니다.

  1. tortoisecvs.org에서 TortoiseCVS를 내려받아 설치하고, 재부팅합니다.
  2. 무들을 내려받을 새 폴더를 생성해 놓거나 준비해 둡니다.
  3. 준비한 폴더에 대고 오른쪽 마우스 클릭을 하여 메뉴의 "CVS Checkout" 을 실행합니다. 그러면 다이알로그 박스를 볼 수 있습니다.
  4. 박스에 있는 문서를 복사해서 CVSROOT 필드에 붙여 넣습니다.(사용자명도 함께!)
     :ext:myusername@cvs.sourceforge.net:/cvsroot/moodle
  5. 무들의 최근 개발판을 얻기 위해 "Module" 필드 아래에 "moodle"을 적거나, 다른 부수적인 (공헌) 디렉토리를 가져오기 위해 "contrib" 을 넣고, 혹시 MySQL 관리 모듈을 얻기위해서는 "mysql"를 써 넣습니다.
  6. "OK" 버튼을 누르면 모든 것이 다운로드 됩니다.

화면 창에서 내려받는 모든 파일들을 볼 수 있으며 잠시 후 무들의 완전한 모든 사본을 얻게 됩니다. 그 다음 첫번째 점검을 하면, CVS 서버로 부터 최신 갱신된 내용을 반영할 수 있습니다.

  1. 여러분의 무들 폴더(혹은 어떤 파일이나) 위에서 마우스의 오른쪽 버튼을 클릭하여 "CVS Update"를 선택합니다.
  2. 이제 잠시 앉아서 기록들이 스크롤 되는 걸 지켜봅니다. 다만 이때 여러분 컴퓨터에 있는 코드와 갱신되는 코드 사이에 혹시 있을지도 모르는 충돌에 주목합니다. 만일 이러한 일이 생기면 수작업으로 이러한 충돌을 해결해야 할 필요가 있습니다.

파일을 수정하고 나면(아이콘이 파란색에서 빨간색으로 변할 것입니다), 다음과 같이 CVS 서버에 확인을 할 수 있습니다.

  1. 여러분의 무들 폴더(혹은 어떤 파일이나) 위에서 마우스의 오른쪽 버튼을 클릭하여 "CVS Commit..."을 선택합니다.
  2. 다이알로그 박스에 변경사항을 확인하는 내용에 대하여 적어 넣습니다.
  3. "OK"를 클릭하면, 여러분의 변경사항이 서버로 보내질 것입니다.

4. 가지에서의 작업(Working with Branches)

아래의 다이아그램은 시간에 따라 moodle의 모듈들이 어떻게 다른 판으로 변천해 왔는지를 보여주는 것입니다.

현재 쓸 수 있는 모든 태그와 가지(braches)들을 살펴보려면 다음과 같은 명령어를 쓰면 됩니다.(여기에서는 최상위 무들 디렉토리에 있는 index.php를 대상으로 하였음)

cvs status -v index.php

태그의 요령


4.1 개발을 위한 본줄기(Trunk development)

CVS의 본 줄기(핵심코드)는 무들 개발판 입니다. CVS에서 이는 HEAD 혹은 기본 가지(default branch)라고도 알려져 있습니다.

무들의 개발자들은 가능한한 이들이 안정성을 가지도록 노력하고 있지만, 간혹 새로운 코드들은 버그나 약간의 불안정성을 보이는 경우가 있습니다.

언제든 제품이 충분한 기능을 발휘하게 되면 배포를 결정합니다. 이 때에는 본줄기는 MOODLE_XX_BETA라는 태그를 갖게되며(이 경우 언제든 다시 마음을 바꿀 수 있습니다), 소위 MOODLE_XX_STABLE라는 배포를 위한 새로운 가지를 치게 됩니다.

이 시점에서 베타판이 배포되게 됩니다. 이 베타판은 CVS를 이용하지 않는 점검자들을 위한 것이며 최종 기능을 점검하고 버그를 색출하기 위한 것입니다.

 

4.2 각 배포판을 위한 안정 가지(Stable branches)

안정한 가지 MOODLE_XX_STABLE가 생기면, 즉시 개발자들의 노력은 잠시 두 갈래로 나뉘어 집니다. 어떤 사람들은 다음 배포본을 위한 본 줄기에 쓸 새로운 기능에 매달리는가 하면, 대다수 개발자들은 현재의 STABLE 가지에서 보고되는 버그를 수정하는 데 전념하게 됩니다.

유닉스에서는 아래와 같은 명령으로 현재 여러분이 쓰고 있는 무들판에서 안정판으로 바꿀 수 있습니다.

cvs update -dP -r MOODLE_XX_STABLE

그 후, 안정판에 대해 위에서 언급한 명령들을 적용할 수 있습니다. 본 줄기(trunk)판으로 가기위해서는 다음 명령을 쓰면 됩니다.

cvs update -dPA

윈도우 환경에서는 각 가지를 선택하는 메뉴가 있어야만 할 것입니다.

일단 새로운 안정 가지가 실제로 안정하게 되면, 배포가 결정되게 됩니다. 배포를 위한 패키지가 만들어지고 가지는 (Martin에 의해) MOODLE_XXX와 갈은 태그가 붙게 됩니다.

주기적으로, 안정 가지에 있는 버그들이 고쳐져서 무들의 다음 판에서 활용될 수 있도록 본 줄기에 수합됩니다. MOODLE_XX_MERGED라고 불리는 임시 태그는 최종 병합의 과정을 추적할 수 있도록 관리될 것입니다. 그러한 병합을 위한 과정은 다음과 같습니다.

  1. 다음처럼 가장 최근의 본 줄기 판에서 나온다.

    cvs update -dPA
  2. 최종 병합을 한 이후 달라진 가지의 모든 변경사항을 여러분의 본 줄기 판에 반영한다.

    cvs update -kk -j MOODLE_13_MERGED -j MOODLE_13_STABLE
  3. 충돌사항에 대한 업데이트 기록을 주의깊게 살펴보고, 발견되는 오류를 하나 하나 교정해 간다.
  4. 병합된 사본을 CVS 본 줄기 판과 비교 확인한다.

    cvs commit
  5. 다시 가지 판으로 되돌아 간다.

    cvs update -dPr MOODLE_13_STABLE
  6. 다음에 이러한 과정이 반복될 수 있도록 임시 병합 태그를 갱신한다.

    cvs tag -RF MOODLE_13_MERGED


마지막으로, 안정 가지에 있는 무들의 모든 version.php 안의 $version 수치는 가능하다고 하더라도(정말 필요하다면 마지막 숫자만) 전혀 바뀌어서는 안된다. 그 까닭은 어떤 사람이 안정판에서 바로 다음의 안정판으로 업그레이드할 때에 본 줄기에서 있었을 지도 모를 데이터베이스의 업그레이드를 놓칠 수도 있기 때문이다.


4.3 큰 변화를 위한 기능 가지(Feature branches)

간혹, 많은 개발자들이 점검해야 할 필요가 있는 매우 큰 기능적 변화가 있다면, 이를 주 개발 줄기에 포함시키는 것이 너무 불안정할 경우가 있을 수 있다.

이러한 경우 그 기능을 위해 작업할 한시적인 가지가 만들어 질 수 있고, 여기에서 작업을 마친후 가급적 빨리 본 줄기로 통합할 수 있다. 한 예로 위 도표의 MOODLE_14_WIDGET 가지를 들 수 있다.

만일 여러분이 자신의 새 WIDGET 기능에 대해 이러한 일을 하고 싶으면, 다음의 과정을 따르면 된다.

  1. 다른 개발자들과 함께 이것이 꼭 필요한지에 대해 논의한다!
  2. (무들의 모든 것에 대해) 본줄기MOODLE_XX_WIDGET_PRE 과 같은 새로운 태그를 만든다.

    cvs tag -R MOODLE_XX_WIDGET_PRE
  3. MOODLE_XX_WIDGET라 불리는 자신의 가지를 만든다.

    cvs tag -Rb MOODLE_XX_WIDGET
  4. 기능이 충분히 안정화되었다고 생각될 때까지 그 가지에서 작업한다. 필요하다면 인증을 한다.

    cvs commit
  5. 준비가 되면, 전체 가지를 본 가지에 병합을 하고, 충돌을 고치고 본 가지에 commit 한 후, 기능 가지를 폐기한다.

    cvs update -dPA
    cvs update -kk -j MOODLE_XX_WIDGET
    cvs commit

Good luck, be careful and have fun!


Moodle Documentation

Version: $Id$