1. CUBRID Contribution Guideline
CUBRID는 JIRA
를 사용하여 프로젝트를 관리하며 모든 변경사항은 이슈를 단위로 하여 관리한다. JIRA 이슈는 진행 상황에 따라 아래 그림과 같이 7가지의 상태 (OPEN, CONFIRMED, IN PROGRESS, REVIEW IN PROGRESS, REVIEWED, RESOLVED, CLOSED) 를 가지며, 이슈 진행 상황에 따라 상태를 변경하여 관리합니다. 처음 이슈를 생성하면 “OPEN” 이고, “CLOSED” 로 모든 기여 작업이 완료된다.

CUBRID 개발 프로세스는 다음 두 도구를 기반으로 운영된다.
- Issue Tracking :
JIRA
(jira.cubrid.org)
- Code Repository and Code Review :
Github
(github.com/CUBRID)
CUBRID의 모든 프로젝트, 기능추가, 버그수정은 JIRA 이슈 생성으로부터 시작한다. JIRA의 Issue workflow에 따라 문제를 정의, 분석하는 단계를 지나 설계 및 구현을 시작하게 된다. 설계 및 구현 단계에서는 Github에서 브랜치 생성, Pull Request, 코드 리뷰를 통해 검토/검증 과정을 거친 후 CUBRID에 코드를 반영한다.
2. Workflow (JIRA & GITHUB)
- jira.cubrid에 접속해 로그인한다. (계정이 없으면 Sign up)

- 로그인 후 "Create" 버튼을 클릭해 새로운 이슈를 만든다.

- Contribution Guidelines을 참고해 이슈 작성 절차를 따라 양식에 맞게 항목을 채워 넣고 Create한다.

- 프로젝트 메인테이너가 “Open” 상태에서 이슈 진행 선별 과정(Triage)를 통해 “Confirmed” 상태로 바꿔준다.

- 이슈를 생성한 후 담당자로 지정받아 최종적으로 CUBRID Contributor가 되시기 위해서는 권한(인증)이 필요하다. CUBRID 홈페이지의 contributor agreement를 참고하여 아래 절차를 진행하여
ICLA
권한을 획득한다.

- Github의 CUBRID 레포를 Fork한다.

내 레포로 Fork된 상태

- 로컬에 Fork된 레포를 클론받는다.

- 할당된 이슈번호로 새로운 브랜치를 만들고 코드를 수정하고 정상적으로 빌드가 되는지 확인한다.

- 이상이 없으면 push한다.

- Push한 브랜치 -> CUBRID/develop 브랜치로 pull request를 보낸다.

- Pr-Guide를 참고해 양식대로 내용을 구성해 pull request를 생성한다.

- Pull request가 정상적으로 open되었음을 확인한다.

- 효과적/효율적인 코드 리뷰를 위해 Github PR에 여러 자동화 도구들을 도입하고 있다. 이 도구들은 코드의 품질을 높이고 리뷰어가 단순 실수가 아닌 설계 디자인과 로직 문제에 집중할 수 있도록 도와준다. Pull Request 하단에 각 자동화 도구의 성공여부가 표시되고, Details를 통하여 자세한 정보를 확인할 수 있다. 하나라도 실패가 있다면 PR을 반영하는 “Squash and Merge” 버튼이 비활성화 된다.

.png)
- 자동화 도구에서 모두 검증되었고, 리뷰어가 모두 “Approved” 한 경우에 머지가 진행된다.

-
Pull Request를 생성하면 Github hook을 통해 JIRA에서 자동으로 “IN PROGRESS” 상태로 변경된다. Review 준비가 되었을 경우 “Submit a fix” 버튼을 눌러 “REVIEW IN PROGRESS” 상태로 변경한다.

-
리뷰를 정상적으로 받았다면 "Acccpt the fix" 버튼을 누른다. 해당 Pull Request에 대하여 Review를 완료하고 반영(merge)되면 Github hook을 통해 JIRA에서 자동으로 “REVIEWED” 상태로 변경된다.

- 리뷰가 완료 (“REVIEWED”) 된 이후에 “Check-in Fix” 버튼을 눌러 항목을 작성한다.

"Check-in Fix" 작성 항목

- "Check-in Fix"를 통해 이슈를 “RESOLVED” 상태로 변경하고, 해당 이슈를 QA 메인테이너에 이관한다.

3. 내 Issue 및 PR
나는 총 2개의 이슈를 할당받아 해당 2개의 이슈 모두 정상적으로 완료해 코드를 머지시켰다.
첫 번째 이슈
첫 번째 PR
두 번째 이슈
두 번째 PR
3달간의 스터디를 통해 DB엔진을 직접 분석하며 많은 걸 배웠고 직접 오픈소스에 기여할 수 있는 값진 기회도 얻게 되어 힘들었지만 유익했다.
CUBRID Contribution Guidelines