오픈소스 이야기

CUBRID 오픈 소스 프로젝트에 코드기여하기

by 일동차렷? posted Apr 21, 2009

CUBRID 오픈 소스 프로젝트(이하 프로젝트)에 코드를 기여하고 싶다고 문의하는 개발자가 줄을 잇는 사태에 대비하여 블로깅을 미리 해 본다.

프로젝트에서 할 수 있는 일은 아래와 같이 6가지이다. CUBRID 프로젝트 홈페이지에서 제공하는 메뉴와 일을 분류해 보면 다음과 같다.

1. 포럼 메뉴: 신규 개발 제안 이슈, 문서 등의 이슈, 토론 등 자유 게시 성격
  - 관련 기능: 새로운 기능 제안하기, 사용자 문서 작성하기
2. 이슈 메뉴: 코드리뷰가 예상되는 이슈
  - 관련 기능: 버그리포트하기, 코드리뷰하기
3. 코드 메뉴
  - 관련 기능: 코드 기여하기
4. 다운로드 메뉴

이 중 많은 개발자들이 관심을 가지는 코드 기여하기에 대해서 살펴 보자.

프로젝트 멤버의 권한

프로젝트에 참여하기 위해서 꼭 멤버로 가입해야 하는가? 그렇지 않다. 2009년 4월 15일 현재 프로젝트 멤버와 비멤버는 권한의 차이는 없다. 가입을 하지 않더라도 프로젝트에 기여한 사람이 누군지 확인할 수 있도록 Nickname을 사용하면 좋겠다. Nobody 상태이면 기여한 사람이 누군지를 알 수도 없고, 해결한 이슈에 대해서 결과를 알려줄 수도 없기 때문이다.

프로젝트 멤버의 권한은 운영의 편의성을 고려하여 바뀔 수 있다. 이미 프로젝트를 시작하였을 당시의 멤버의 권한은 바뀌었다. 프로젝트에 참여하는 개발자 수와 성향에 따라 멤버의 권한도 편의성을 고려하어 바뀔 것이다.

멤버가 아니라도 이슈를 해결하고 코드 리뷰를 요청할 수 있다. 코드 리뷰가 끝나면 커미터가 소스 코드를 커밋하고 그 결과를 이슈 게시판에 알려 준다.

참여할 꺼리 찾기

관심이 있는 사람들이 꺼리를 찾기 위해서 헤매지 않도록 TODO List를 제공하고 있다. TODO List에는 현재 6가지 카테고리로 나누어져 있다.

1) 서스테이닝 이슈: 지금 개발되는 것 중 해결할 수 있는 것
2) 인터페이스 개발: 프로그래머들이 쉽게 사용할 수 있는 인터페이스 개발
3) 응용 포팅 및 개발: CUBRID를 기반으로 하는 시스템 개발
4) 설치 및 패키징 개선: 설치/제거하기 쉽게 개선
5) QA 테스트 개선: QA 할동을 개선(아직 공개되지 않았으니까 할 수 있는 것은 아님)
6) 기술문서 작성: 작업한 내용 혹은 공부한 내용을 문서로 정리

설명의 편의성을 위해서 서스테이닝 이슈였던 1389번 이슈를 해결해 보겠다. 해결하기로 결정한 이슈의 담당자를 본인의 아이디로 바꾼다. (예: 일동차렷?) 참고로, 지금은 이 이슈가 해결 상태이다. 또한 Windows에서는 실행할 수 없는 유틸리티이다.


수정할 부분 찾기

이슈를 읽고 수정할 포인트를 찾아야 한다. 이 이슈는 cubrid repl_agent/repl_server 유틸리티의 메시지를 바꾸는 것이 수정할 포인트이다.

프롬프트에서 "grep database-name . -r"을 사용해서 수정할 부분을 찾는다. (다른 방법들이 많이 있을 수 있지만, 가장 쉽게 쓸 수 있는 방법이다.) 이 결과에서 아래 내용을 알 수 있다.

1) msg/en_US/utils.msg 파일을 수정해야 함.
2) msg 디렉토리에 en_US, ko_KR.euckr, ko_KR.utf8 서브 디렉토리가 있으므로 수정할 파일이 3개임. (CUBRID는 언어의 확장성을 위해서 언어별로 메시지 파일을 분리시켜 두었다.)

먼저 msg/en_US/utils.msg 파일을 열어서 해당하는 부분을 수정한다. repl_agent 패턴을 검색해 보면 아래와 같이 바꿀 usage 로 보이는 부분을 찾을 수 있다.

29 cubrid utility, version %s
usage: %s repl_agent <command> [args]

Available command:
    start       database-name [dba-password]
    stop       database-name
    status

이 부분을 이슈에서 요청한 대로 수정한다. repl_server 부분도 같은 방법으로 수정한다.

다른 로캘(locale)을 위한 msg 파일을 수정하고 파일을 열어서 수정해야 한다. 로캘을 같이 맞추지 않으면 한글이 제대로 보이지 않기 때문에, 수정하기 전에 LC_ALL 환경 변수를 적절하게 바꾼다. 나머지 2개의 파일은 수정할 부분을 영문으로 표기하지 않았으므로, msg/en_US/utils.msg 파일에서 해당하는 메시지 번호(위 출력한 내용을 보면 29가 보일 것이다. -> 28, 29)를 잘 적어 두었다가 한글 파일에서 찾는다.

빌드하기 

수정을 다 했으면 빌드하고 제대로 수정이 되었는지 확인해 보자.
소스 다운로드 및 빌드 방법를 참고. 

개발 프로세스 따르기  


make install 실행하기

make install을 하더라도 설치된 CUBRID를 실행할 수 없을 것이다. CUBRID를 실행하기 위한 환경 변수를 설정해야 한다. 일반 사용자들은 설치 패키지에서는 환경 변수를 설정해 주기 때문에 설정해 본 적이 없을 것이다. 다음의 환경 변수를 설정하자.

CUBRID: 시스템이 설치된 위치
CUBRID_DATABASES: 데이터베이스 위치 정보 파일의 위치
CUBRID_LANG: 시스템이 사용할 언어 지정

본인은 bash를 사용하였기 때문에 아래와 같이 환경 변수를 설정하였다.

export CUBRID=/home/idjung/cubrid
export CUBRID_DATABASES=$CUBRID/databases
export CUBRID_LANG=en_US
export PATH=$CUBRID/bin:$PATH

자세한 것은 CUBRID 매뉴얼의 "CUBRID 시작>꼭 알아 두어야 할 것>환경 변수" 부분을 참고하자.

프롬프트에서 cubrid repl_server 유틸리티와 cubrid repl_agent 유틸리티를 실행하면 usage가 바뀌어 있는 것을 확인할 수 있다.

간단한 이슈를 해결해 보았다. 다른 복잡한 이슈를 해결할 때도 위에서 소개한 순서로 진행하면 된다. 어렵게 생각하지 말고 용기를 가지고 도전해 보자.

A civilization might or might not continue to thrive, depending on the challenges it faced and its responses to them. - Toynbee,A.J