벤티의 개발 로그

[후기] 첫 오픈소스 기여 at Open Contribution Jam 2024 본문

카테고리 없음

[후기] 첫 오픈소스 기여 at Open Contribution Jam 2024

sonsh75 2024. 11. 24. 19:48

동기

오픈소스 전공 강의에서  '오픈소스에 기여하기'라는 팀 프로젝트 과제가 있었는데, 우리 팀은 오픈소스가 아닌(...) 프로젝트의 번역을 맡았었다. (영어 설명 중, 'Open'과 'Free'라는 단어에 속았다.) 지금은 오픈소스가 주로 GitHub를 통해 형상 관리를 하며, 다른 사람들에게 자유롭게 도움받길 원하는 Issue를 공개하고 프로젝트 내 규칙에 따라 Pull Request를 허용한다는 것을 알기 때문에 같은 실수는 하지 않았겠지만, 그때는 그러지 못했다. 결국 좋은 점수도 얻지 못했고, 그렇게 오픈소스와(?)의 인연은 좋지 않게 시작했다.

 

 

그러다가 작년에 사이드 프로젝트를 진행하면서 오픈소스 라이브러리들을 사용했다. 각 라이브러리들의 README.md, 그리고 Issue에서 자유롭게 토론하는 모습을 보면서 '언젠가는 해봐야지'라는 마음이 들기 시작했다.

 

하지만 너무 막막했다. 어떤 프로젝트를 골라야 할지, 어떤 Issue를 골라서 어떤 기여를 해야 할지부터 정하기도 어려웠지만, 내 실력으로 코드와 관련된 기여를 할 수 있을까라는 마음이 들었다. 그러다 인스타그램에서 Open Contribution Jam 광고를 보게 되었다.

 

Open Contribution Jam 2024

 

짧게 요약하자면, 오픈소스에 기여하고 싶은 사람들을 위한 행사로, Maintainer 분들이 프로젝트를 소개하면 참가자들이 원하는 프로젝트를 선택해서 활동을 시작하는 방식으로 진행됐다.

 

Maintainer 분들의 설명을 듣고, Planetarium 라는 프로젝트 중 Mimir라는 저장소에 기여하기로 했다. 이유는 아래와 같다.

 

1. 프로젝트에 쓰인 언어인 C#이, Java와 유사하여 익숙했다.

C#을 한 번도 사용하지 않아 걱정이 많이 됐지만, 코드를 분석하다 보니 Interface의 존재나 상속할 때 코드를 쓰는 방법이 유사했고, Nullable도 있었다. (다른 프로젝트는 Rust와 TypeScript를 사용했다.)

2. 프로젝트 및 기여 가이드 설명이 자세했다.

나 같은 초보도 프로젝트에 쉽게 기여할 수 있을 만큼 Issue 설명이 자세했다. 다시 한번 문서화의 중요성을 깨달았다.

3. 기여할 수 있는 Issue가 다양했다.

단순한 파일 삭제부터 번역, 코드 추가, 리팩터링까지 Issue의 종류와 개수가 정말 많았다.

 

첫 기여까지

우리 팀은 Maintainer 3명과 Contributor 3명이 모여 한 팀을 이루었다. 덕분에 1대1 과외 느낌으로 오픈소스에 첫 기여를 할 수 있었다. (진짜 많은 도움이 많이 되었다. 😀)

 

3명 모두 오픈소스 기여가 처음이었기에 비슷한 Issue를 할당해 주셨는데, 특정 함수의 Unit Test 코드를 작성하는 것이었다. 1명씩 다른 Issue를 할당받았고, 나는 combinationsSlots과 관련된 Issue를 할당받았다. (정확하지는 않지만 다른 클래스들의 코드를 참고하니, 캐릭터가 쓰는 스킬을 조합하는 함수인 것 같다.)

 

첫 Issue 할당!

 

C#를 처음 실행하기 전에 dotnet과 Rider라는 IDE를 설치해야 했는데, C 드라이브 용량 이슈(...)로 C# Dev Kit를 포함한 모든 파일을 D 드라이브로 옮긴 후 작업을 진행했다. 이 과정에서 Maintainer 분의 많은 도움을 받았다. 내가 할 수 있는 것은 단순한 환경 변수 편집 밖에 없었기에 프로젝트 빌드나 실행, VS Code의 Extension 설치까지 C#으로 코드를 작성할 수 있는 환경을 설정하기까지 많은 도움을 받았다.

 

노트북... 진짜 바꿔야 되나...

 

여기서 1시간이 날아갔다. '오늘 내로 할 수 있을까?'라는 생각이 들었지만 Maintainer께서 기존 코드를 아주 자세하게 설명해 주셔서 내가 무엇을 해야 하는지 이해할 수 있었다. 다행히 내가 작성해야 하는 코드는 Spring에서의 Unit Test와 크게 다르지 않았기에 Issue 설명을 보고 금방 코드를 작성할 수 있었다.

 

verified.txt

 

코드는 금방 작성했지만... Test 성공(verified.txt의 생성)까지 아주 많은 시행착오가 있었으나... 다행히(?) 에러 메시지로 고칠 수 있는 수준이었다. verified.txt란 Unit Test 함수의 실행 결과가 verified.txt의 data 형태대로 맞춰서 나오는 지를 체크해 주는 '답지' 같은 역할을 한다. 다시 말해, 실행 결과에서 빠진 필드나, 의도되지 않게 추가된 필드는 없는지 체크해 주는 역할이다.

 

또, GraphQL은 REST API와 다르게 실행 결과를 여러 필드를 레고처럼 조립하여 개발자가 원하는 형태로 반환하는 것을 목표로 한다는 것도 알려주셨다. REST API의 경우 원하는 형태로 반환해주는 API를 하나하나 다 만들어야 하는데, GraphQL의 경우 그럴 필요가 없다고 하셨다. (레고처럼 조립하는 과정도 사이트로 보여주셨는데, 신기했다! 😀)

 

첫 기여 성공!

 

Main 브랜치 Merge를 위한 Github Actions 워크플로우들도 통과한 후, 드디어 오픈소스에 기여할 수 있었다!

 

후기

다행히, 정말 좋은 팀원 분들을 만나서 처음으로 오픈소스에 기여할 수 있었다. 모르는 부분도 많이 물어볼 수 있었고, 도움도 많이 받은 데다가, 럭키드로우 시간까지 우리 팀은 밝은 분위기 속에서 작업을 했다. (끝나고 사진도 찍었다! 😄) 무릎 담요나 책 같은 경품도 많이 얻었다.

 

느낀 점도 많았다. 일단 뿌듯했다. 예전에 세웠던 목표를 이루어서 그런 것 같고, 내 작업 내용이 다른 프로젝트에 도움이 된다는 것이 보람찼다. 또, 오픈소스에 기여하기까지 기존 코드를 분석하는 과정도 도움이 되었다. 특히, 나는 코드를 작성할 때 interface를 거의 쓰지 않기 때문에 interface를 어떻게 자유롭게 사용하는지를 배울 수 있었다. 전날 SOLID 원칙에 대해 공부했는데, 그 때문인지는 몰라도(OCP 원칙) 앞으로 interface를 적극적으로 활용해야겠다고 다짐했다. 앞으로 이런 기회가 또 생긴다면, 참여할 것 같다! 😀