본문 바로가기

Study

OpenSource Contribute 후기

시간이 너무 많이 흘러버렸지만... 이제라도 남겨보는 오픈소스 컨트리뷰팅 후기

시작글

막연하게 오픈소스 개발에 대한 욕심이 있었다.

라이브러리 혹은 패키지 없이 개발하는 IT 개발 실무자는 없을 것이다.
어느순간 어쩌면 너무 본인이 라이브러리에만 의존하고 있지 않나라는 생각이 들었다.
아마 이런 죄책감(?)에서 비롯된 욕심이었나보다.
이런 생각에서 비롯되어 실제로 오픈소스 기여에 대한 경험을 정리하여 기록해두고자 한다.

본문

🔎 오픈소스 프로젝트 찾기

본인이 기여할 오픈소스를 찾는게 가장 첫번째였다.
돌아보자면, 이 단계에서 가장 긴 시간이 소요됐다.
나에게 있어 기여할 오픈소스 프로젝트를 찾는다는 건 다음과 같은 기준에 부합하는 프로젝트를 찾는 것이었다.

  1. 흥미로워 보이거나 본인이 평소에 사용했던 프로젝트
  2. 관리가 잘되고 있는 프로젝트
    1. 평소에 잘 사용하고 있던 프로젝트들 중에서도 메인테이너가 손을 놔버린 프로젝트들이 생각보다 많다. 이런 프로젝트에 이슈를 날리거나 pr 을 생성해도 반영이 되지 않으니 시간 낭비이다.
    2.  버그를 발견하고 이슈를 생성하였지만 답변이 없는 경우.. https://github.com/BoxFactura/pulltorefresh.js/issues/122
    3. pr 이 생성되고 머지되는 주기가 짧거나 issue labeling이 잘되어있는지 확인해보면 좋다.
  3. 본인의 역량으로 기여할 수 있는 난이도의 이슈를 가지고 있는 프로젝트
    1.  본인의 역량을 한정지어버리면 안되겠지만 처음부터 너무 어려운 기능을 맡는다는 것은 욕심이라고 생각했다. 후술될 내용이지만 이는 오픈소스 기여 에티켓과도 관련이 있다고 생각한다.

labeling이 잘되어있는 예 (facebook/react)

github explore page

https://github.com/explore

github에서 본인이 관심이 있어한다고 판단한 프로젝트들을 추천해서 보여준다. 본인이 star를 남겼던 프로젝트들과 유사한 프로젝트들을 추천해서 보여주는 듯 하다.

codetriage

https://www.codetriage.com/ 

도움이 필요한 오픈소스 프로젝트들을 모아둔 사이트. 프로그래밍 언어별로 필터링이 되어서 관심있는 언어의 프로젝트를 찾기 용이하다.

🤔 해결할 이슈 정하기

기여할 프로젝트를 정했다면 어떤 이슈를 해결할지 정해야한다.

label: good first issue

처음 접하는 프로젝트는 낯설수 밖에 없다. 처음 기여하고자 하는 사람들이 빠르게 적응할 수 있도록 돕는 비교적 난이도가 쉬운 이슈들을 good first issue로 labeling 해주는 프로젝트들이 있다. 프로젝트 적응겸 해당 labeling 된 이슈들을 먼저 해결해보면 좋다. 

이슈 담당하기

내가 몇일 동안 고민하며 해결 중인 이슈를 누군가 해결하여 pr을 생성한다면 정말 짜증나는 일일 것이다.

그렇기 때문에 해당 이슈의 담당자가 없는지, 없다면 본인이 해당 이슈를 담당해도 되는지 확인이 필요하다.

https://github.com/mui/mui-x/issues/7103#issuecomment-1339293427

🚨 주의

이 과정은 생각보다 인내심이 필요하다. 

대부분의 프로젝트 메인테이너의 나라 시간대가 한국과 다르기 때문에 커멘트 확인 시간에 딜레이가 있을 뿐더러, 

뉴비들에 대한 묘한 경계심이 있다. (라고 나는 느꼈다.. ㅋㅋ)

후에 이슈를 담당받고 몇달간 잠수를 타는 사람도 있고 말도 안되는 pr을 생성하는 사람도 있다는 것을 알게되어 검증되지 않은 사람에 대한 경계심을 갖는 그들의 심정도 이해가 되었다.

프로젝트에 대한 꾸준한 관심을 보이며 기여를 한다면 환영받는 컨트리뷰터가 되리라.

🛠 PR 생성하기

잘 관리되는 프로젝트의 경우 pr 생성 가이드도 잘 기록되어 있다.

https://github.com/mui/material-ui/blob/HEAD/CONTRIBUTING.md

 

가이드 문서에는 코드 강령(규칙), 환경 설정, 테스트 방법 등의 pr 을 생성하기 위한 방법들이 설명되어 있다.

가이드 문서에는 미처 기록되지 않은 혹은 최신화되지 않는 부분들이 있을 수 있지만, 다른 사람들이 생성한 pr을 조금 찾아보면 대충 감이 온다. 

😎 성과

다음은 본인이 기여한 프로젝트 목록이다.

 

mui-x https://github.com/mui/mui-x

PR: https://github.com/mui/mui-x/pull/7125

내용: column 메뉴 명이 prop 설정대로 정렬되지 않고 노출되던 이슈 수정. 테스트 코드도 함께 작성.

 

query-string https://github.com/sindresorhus/query-string

PR: https://github.com/sindresorhus/query-string/pull/355

내용: url stringify 메서드 수행시 fragmentIdentifier (hash query) 를 url encode 해버리는 이슈 수정. 해결 방법은 간단하지만, 해결에 대한 근거를 찾기 위해 node documentation, url spec documentation 을 꼼꼼하게 살펴봐야했다. 해당 내용이 궁금하다면 위 pr 링크를 참고바란다.

 

json-crack https://github.com/AykutSarac/jsoncrack.com

PR: https://github.com/AykutSarac/jsoncrack.com/pull/268

내용: json 객체의 key 순서가 달라질 때, 화면에서 렌더되는 그래프의 모양도 달라지는 이슈 수정. 

PR: https://github.com/AykutSarac/jsoncrack.com/pull/304

내용: edge 를 클릭했을 때, edge에 대한 모달이 popup 되는 feature 개발

 

마치며

요새도 오픈소스 프로젝트 기여를 하고 있냐고 물어보신다면, 그렇진 않다.

요새는 나만의 프로젝트를 개발 중이며 다른 글에서 소개하도록 하겠다.