들어가며
올해 입사한 회사에서 오픈스택을 다루게 되었다. 이왕 시작한 김에 오픈스택에 대한 기술을 좀 더 알고 싶었고 활용하는 것을 넘어 내가 원하는 기능을 추가하고 버그를 수정하고 싶다는 생각이 들었다.
검색을 이어가던 도중 컨트리뷰션 아카데미에서 오픈스택 팀이 참가하고 있었다. 이번 기회에 오픈스택 Upstream에 기여하고 오픈스택이라는 기술을 잘 알게 될 것이라 생각해 지원해 보았다.
컨트리뷰션 아카데미?
컨트리뷰션 아카데미는 오픈소스에 기여할 수 있도록 멘토, 멘티가 힘을 합쳐 오픈소스에 기여하는 경험을 해보는 프로그램이다. 일반적으로 생각하는 코드 기여뿐만 아니라, 문서 번역, 기능 제안, 이슈 리포팅 등 여러 가지 방법으로 오픈소스 문화에 기여할 수 있는 활동이다.
몇 년 전 오픈소스 컨트리뷰톤이라는 이름이었던 걸로 기억하는데 언젠가 이름이 바뀐 것 같다. 3년 전에 컨트리뷰톤에 케라스 기반 챗봇 프로젝트에 참가한 경험이 있었기 때문에 활동에 대해서는 익숙했고, 그때 활동하면서 개인적으로 아쉬웠던 것을 이번에 활동에서 만회할 수 있으면 좋겠다는 생각이 들기도 했다.
오픈소스 컨트리뷰톤 아카데미에 관심이 있다면! (클릭)
참가신청
참가 신청에는 자기소개, 지원동기, 주요 프로젝트에 대한 경험을 작성해야 한다. 각 항목은 1,000자에서 1,500자 정도 되는 분량으로 작성해야 한다(정확하지 않음). 자기소개는 얼마 되지는 않지만, 지금껏 개발자로서 쌓아 올린 커리어와 내가 어떤 기술을 가졌는지 위주로 작성했다. 또한 개발 경력 이외에도 공유하기를 좋아한다는 주제로 나를 소개했다.
지원동기는 오픈스택 생태계의 일원이 되어 성장하고 싶다는 내용을 위주로 작성했다. 내세우는 목표가 추상적이어서 가장 작성하기 힘든 파트였다. 한 가지 팁을 주자면, 오픈소스에 기여하는 것이 자신에게 어떤 의미를 갖는지를 잘 설명하면 좋을 것 같다.
마지막 프로젝트 경험으로는 오픈소스 기여 경험, 그리고 현재 하는 업무에 대해 역할, 성과, 주요 업무로 나누어서 작성했다.
-작성 예시-
<프로젝트 제목>
- 참여인원 : 0
- 역할 : 백엔드 개발
- 성과 :
1. 프로젝트에 대한 설명
2. 사용 기술스택
3. 프로젝트를 통해 얻은 성과
4....
활동 내역
컨트리뷰션 아카데미는 총 13주간 진행되며 Challengers, Masters 두 단계로 이루어지게 된다. 팀마다 각 과정에서 진행하게 되는 내용은 상이하지만 Challengers 과정에서는 프로젝트에 기여하기 위해 알아야 하는 사전지식을 학습한다. 예를 들면 프로젝트에 기여하기 위한 개발 환경을 세팅하고, Git, Github을 사용하는 방법을 학습한다. 또한 과제를 통해 프로젝트에 대한 이해를 높이는 활동을 수행한다.
Masters 과정에선 Challengers 과정을 통과한 사람들이 7주~8주 사이의 짧은 시간 동안 프로젝트에 기여하기 위한 스프린트를 진행하게 된다.
Openstack팀의 챌린저스 과정
Openstack 팀의 챌린저스 과정에서는 오픈스택에 대한 이해를 위한 강의 수강, 개발 환경 세팅 그리고 과제를 통해 프로젝트 기여하는 방법을 학습했다. 오픈스택은 코드에 대한 이해도 중요하지만, 기술에 대한 이해가 필요하기 때문에 멘토님들이 많은 강의를 준비해 주셨다.
기여 프로세스에 대한 실습
오픈스택은 gerrit이라는 코드리뷰 플랫폼을 사용한다. 일반적으로 알고 있는 Github, Gitlab과 차이점이 몇 가지 있다.
Github, Gitlab을 사용할 때 리뷰는 Pull Request, 혹은 Merge Request 단위로 이루어진다. Gerrit에서는 리뷰 요청할 때 review라는 용어를 사용한다.
또한, Gerrit은 코드에 점수를 부여하는 방식으로 리뷰가 진행된다. 점수는 -2점에서 +2점 사이로 부여할 수 있다. 참고로 일반 리뷰어는 +1점까지 부여할 수 있고, 메인테이너가 +2점까지의 점수를 부여할 수 있다.
Verified는 코드가 CI단계에서 수행되는 테스트를 모두 통과했다는 의미이다. Openstack 프로젝트는 Zuul라는 CI도구를 사용해 파이프라인에서 빌드와 테스트를 수행한다. 코드를 push 했을 때 한번 실행되며 통과하면 +1점이 부여된다.
메인테이너가 Code-Review +2점이 된 리뷰를 Merge 하기 위해 Workflow +1점을 부여하고 자동으로 Zuul 파이프라인이 돌면서 한번 더 CI과정이 수행된다. 이때 CI과정이 무사히 통과되면 Verified +2점이 자동으로 부여되고 코드가 Merge 된다.
Fast-forward merge
Openstack 프로젝트는 git의 git-review라는 명령어를 통해 review를 올린다.
git review -s
또한 Openstack 프로젝트는 Fast-forward 머지 전략을 사용해 메인 브랜치의 커밋을 관리한다. 따라서 Merge Conflict는 rebase로 해결해야 한다. 그리고 하나의 reivew에는 하나의 commit을 남겨야 review가 반영될 수 있도록 만들어져 있기 때문에, 수정해야 할 내용이 생이면 amend 명령어로 기존의 커밋을 수정한다.
git rebase master
git commit --amend
이외의 활동
이외에도 챌린저스 기간 동안 다음과 같은 활동을 하였다.
- 컨트리뷰션활동에 대한 이해
- 오픈스택의 역사와 기본 개념, 작동 원리에 대한 강의 수강
- python-openstackclient에서 명령어가 처리되는 흐름에 대한 강의 수강
- Ceph에 대한 소개 및 작동원리 강의 수강
- Openstack 테스트코드의 기본적인 구조에 대한 강의 수강
Challengers 과정 동안 오픈스택에 대한 강의를 수강하고 실습과 과제를 거치면서 오픈스택 전반에 더 많은 정보와 지식을 얻을 수 있었다. Openstack SDK, CLI에 대한 과제를 통해 해당 프로젝트의 동작 원리, 테스트코드 작성 방법을 더 잘 이해할 수 있게 되었으며, Gerrit을 사용법을 실습해 오픈스택에 기여할 수 있는 사전 준비를 마칠 수 있었다.
Openstack 팀의 마스터즈 과정
마스터즈 과정을 시작하며 팀마다 팀장을 선별하게 되었는데 내가 SDK/CLI팀의 리드 멘티로 선발되게 되었다. 개인적으로 컨트리뷰션 활동을 더 열심히 하고 싶다는 생각과 더불어 팀원들과 많이 소통하면서 기여를 하고 싶다는 생각이 들어서 리드 멘티에 지원하게 되었다. 리드 멘티가 되어 매주 진행 상황을 검토하고 기여 과정에서 얻은 노하우를 공유하는 역할을 수행했다.
패치내용
마스터즈 과정 동안 총 2건의 패치를 올려 Openstack CLI에 기여하였다. 두 개의 패치 셋 모두 Heat 컴포넌트의 Orchestraion에 관련된 내용이었고 현재 두 개의 패치 셋 모두 반영되었다.
1. [Heat] Orchestration stack._action() 예외처리 로직 추가
- stack에서 API를 호출하는 함수인 _action()에 상태코드(400,401,404)에 따른 예외처리 로직을 추가
패치 링크 : https://review.opendev.org/c/openstack/openstacksdk/+/891089
2. [Heat] Orchestration stack suspend, resume 기능 추가
- stack 리소스에 대한 suspend(멈춤), resume(재시작) 기능 구현
패치 링크 : https://review.opendev.org/c/openstack/openstacksdk/+/892156
패치 셋을 만들면서 가장 중요하게 생각했던 부분은 기능에 대한 커밋 메시지를 명료하게 남기는 것과, 테스트 코드를 꼼꼼히 작성하는 것 이었다. 코드 리뷰는 피로도가 높은 작업이다. 다른 사람의 코드를 이해하고 피드백을 남기는 과정에서 모호하거나, 난해한 부분이 있다면 빠르게 코드 리뷰를 남길 수 없다.
테스트 코드는 내가 만든 코드를 뒷받침해주는 검증 도구이다. 테스트가 잘 작성되어 있으면 리뷰어는 패치 셋으로 올라온 코드가 잘 작동하는지 신경 쓸 필요가 없어진다. 특히 오픈소스로 관리되는 프로젝트들은 여러 사람이 함께 작업하기 때문에 코드에 대한 유지보수를 테스트에 의존할 수밖에 없다. 그렇기 때문에 잘 만들어진 테스트로 검증된 소스는 Merge 되기 쉬워진다.
그리고 Review도 계속 관리해 줘야 한다. master 브랜치에 코드가 계속 반영되기 때문에 먼저 반영된 코드와 Conflict가 발생할 수 있다. 만일 Conflict가 발생했다면, rebase 해서 내 commit을 최신으로 유지해야 한다.
Review가 끝나고 코드가 반영될 때까지 생각보다 많은 시간이 소요되기 때문에 인내심이 필요하다. 코드 리뷰를 +2점 받아 언제든 Merge 돼도 이상하지 않은 패치 셋이 오랫동안 Merge 되지 않고 방치(1년 이상 방치되는 경우도 존재)되는 경우도 있다. 패치셋이 방치되지 않도록 계속 rebase 해서 관리해 줘야 한다.
성과공유회
성과공유회는 13주간의 활동을 마무리하는 자리이다. 20개의 팀들이 모여 오픈소스에 어떤 기여를 했는지 소개하고 어떤 성과를 냈었는지 발표한다. 감사하게도 우리 팀의 멘토, 멘티분들이 나를 발표자로 추천해 주셔서 오픈스택팀의 활동을 발표할 수 있는 기회를 얻을 수 있었다.
성과공유회에선 10분 정도의 발표시간 동안 우리 팀의 활동 내용을 압축해서 공유해야 한다. 발표는 오픈스택 프로젝트에 대한 간단한 소개와 Challengers, Masters 과정을 거쳐오면서 우리 팀이 얼마나 열심히 활동했는지 그리고 어떤 결과물을 얻었는지에 대한 설명을 위주로 내용을 구성했다. 컨트리뷰션 아카데미가 종료된 이후에도 해야 할 것들을 정리하는 것으로 발표를 마무리했다.
마스터즈 과정을 거쳐오며
오픈스택과 같은 대형 프로젝트에 기여할 수 있는 경험은 쉽게 할 수 있는 일이 아니다. 일단 익숙하지 않은 코드리뷰 플랫폼인 Gerrit을 사용하는 것, 개발/테스트 환경을 구축하기 위한 진입장벽이 높기 때문이다. 또한, 기존 코드를 이해하기 위해 오픈스택의 작동원리를 알아야 한다. 그런 의미에서 이번 컨트리뷰션 아카데미 활동이 개발자로서 한걸음 더 성장할 수 있었던 계기가 되었다.
개인적인 성장 이외에도 오픈스택 생태계에 일원이 되었다는 자부심도 생겼다. 컨트리뷰션 아카데미 활동을 통해 오픈스택에 관심이 있는 멘토, 멘티님들을 알게 되었고 함께 성장할 수 있었고 생각한다.
수상!
오픈스택팀이 감사하게도 특별상을 받았다! 수상팀 명단(1 ~ 4등)에는 들지 못해 아쉬워하고 있었는데, 2주 뒤쯤 특별상 명단에 올라갔다. 특별상은 기존에 계획된 것이 아니라 나중에 추가된 것이라고 한다. 갑자기 발표되어 깜짝 선물을 받은 기분이었다.
향후 목표
컨트리뷰션 아카데미 이후에도 오픈스택 관련된 활동을 이어갈 계획이다. 현재 1차 목표는 SDK, CLI 프로젝트의 메인테이너가 되는 것이다. 또한, 오픈스택 기여를 하면서 알게 된 내용을 정리해 포스팅할 계획이다. 그리고 내년에는 오픈스택팀의 멘토로 활동하면서 멘티분들에게 성장의 기회를 줄 수 있도록 준비하려고 한다. :)
'Computer Science > Openstack' 카테고리의 다른 글
[OpenStack] Openstack의 기본개념 (0) | 2023.06.18 |
---|