오픈소스에 기여해보기

White Piano·2024년 6월 23일
2

오픈소스

목록 보기
1/1

이 글에서는 오픈소스 기여에 도전하면서 느낀 점과 이로 인한 관점의 변화를 다룹니다. 제가 어떤 오픈소스에 기여하고자 했는지, 그리고 그 방법은 어떠한지 기술적으로 관심이 있으시다면 다음의 노션 페이지를 참고해 주세요

개발자 생태계는 늘 열려 있다

개발을 공부하다 보면 자주 놀라게 된다. "이것도 오픈소스야?" "이런 자료가 공개되어 있어?" 개발 생태계란 정말 신기한 동네다.

공부하는 학생이기에 이러한 열린 생태계의 도움을 자주 받는다. 사용하는 많은 패키지가 오픈소스이고 Github이나 Jetbrain과 같은 기업은 학생을 위해 무료 플랜을 제공한다. MIT라고 하는 라이선스가 제작되어 널리 사용될 정도이니 말 다했지 않을까.

당연한 듯 사용하고, 순간순간 신기하다 느끼고, 그렇게 지내다 보니 어느 순간, 나도 열린 생태계에, 오픈소스에 기여하고 싶다는 생각이 들었다. 뭔가 큰 배포가 있어서도 아니고, 특별히 나눔을 좋아하는 선량한 사람도 아니지만, 내가 받아온 만큼은 아니더라도 내가 할 수 있는 만큼 기여할 수 있다면 내게도 기쁨이지 않을까?

물론 오픈소스에 기여하는 과정에서 내가 얼마나 성장할 수 있을지에 대한 기대도 컸고, 시간이 흐를수록 무언가를 제대로 이해하려면 직접 만들어보는 과정이 필요함을 여실히 느꼈기 때문이기도 하다.

하지만 어떻게 해야 하지...?

'오픈소스 기여' 말은 쉽지... 막상 하려고 보면 굉장히 막막하다. 그리고 나라는 사람은 또 욕심이 있어서 자주 쓰는 좀 굉장해 보이는 프로젝트에 기여 하고 싶었다. 굉장해지려다 보면 프로젝트 규모가 커지기 마련이고, 규모가 큰 프로젝트는 다가가기 더욱 어렵다.

군생활을 하다 정체를 느껴 "뭐라도 해봐야 한다!"는 불안함에 무턱대고 Typescript Repository를 분석하려 한 적이 있었다. 그런데 이게 또... js라는 친구가 c처럼 main 함수가 있는게 아니다 보니 어디서부터 읽어야 할지도 알 수 없었다. 그래서 test folder를 찾아봤는데 이조차도 뭐가 뭔지 잘 모르겠더라. 결국 그냥 때려쳤던 기억이 난다.

그런데 얼마 전 오픈소스 스터디를 알게 되었다. 이 스터디를 하면 나도 오픈소스 컨트리뷰터가 될 수 있지 않을까?

스터디를 진행하며

이슈를 바라보는 시선을 바꾸면

우선 멘토분의 지도에 따라 기여해봄직한 Issue를 탐색했다. 사실 처음에는 좀 긴가민가했다. 내가 해볼 만한 Issue가 있기는 할까? 그렇게 시작된 Issue 탐색은 꽤나 신선한 경험으로 다가왔다.

이전까지 내가 Issue를 찾았던 이유는 사용하던 패키지에 문제가 생겨 해결 방법을 찾기 위해서였다. 그러다 보니 문제의 원인이나 패키지의 구조에 대해서는 크게 관심을 두지 않았다. 중요한건 문제 원인이 내 실수가 아니라 패키지 차원의 버그라면, 버전을 다운그레이드하거나 다른 패키지를 사용하는 등 빠르게 대안을 찾아야 한다는 것이었다.

하지만 이번의 Issue 탐색은 달랐다. 애초에 '문제가 뭔지'부터 이해해야 했다. 그리고 그 원인이 무엇일까 고민해야 했다. Maintainer와 여러 community user의 대화를 읽으며 mainainter의 시각을, 프로젝트의 지향점을 생각해 보기도 했다.

그렇게 다양한 Issue를 찾아다니다 보면, Issue에 Bounty가 결려 있기도 하고 추가 논의를 위한 별도 repository에 discussion을 요구받기도 한다. 때때로 이전에 봤던 user를 다른 Issue에서 발견하기도 하는데, 그럴 때면 왠지 모르게 반갑더라. 서로를 멘션하며 의견을 조율하는 모습이 너무 멋있었다.

오픈소스에도 문제가 많아요

"내가 해결해 봄 직한 Issue가 있을까?"란 고민의 기저에는 오픈소스에는 문제가 잘 없고, 설사 있다 하더라도 굉장히 고치기 어려운 문제일 거라는 믿음이 있었다. 하지만 생각보다 그렇지는 않더라.

난 주로 eslint를 살펴봤는데, 이 오픈소스에 다시 한번 놀란 이유는 Issue가 올라오는 속도만큼이나 Issue가 Close 되는 속도도 빨랐기 때문이다. Maintainer들이 직접 문제를 해결하는 경우도 많았고, 나처럼 기여해보고자 하는 사람도 많았다. 즉, 내가 모르는 사이에 많은 문제가 제기되고, 또 해결되고 있었다.

얘기가 잠깐 다른 길로 샜는데, 결론부터 말하면 생각보다 버그가 많았다.

"천 명의 개발자가 있다는 말은 천 개의 버그가 있다는 말과 같지요."

실제로 함께 스터디에 참여한 분 중 한 분은 무려 Major DBMS의 버그를 해결하셨는데, 버그 원인이 if condition이 반대로(==여야 했는데 !=) 설정된 것이었다. 놀랍게도 년 단위의 꽤 오랜 시간 해결하지 못했던 문제였다고...

이 글을 읽으며 오픈소스 기여를 고민하고 계신다면, 지금 당장 관심 있는 오픈소스의 Issue를 확인해 보시는게 어떠신지? Issue에 문제의 원인으로 짐작되는 코드 영역을 함께 알려주는 경우도 많아서 기여의 허들이 낮은 Issue가 꽤나 있다.

Issue와 PR 작성 방법, Comment

좋아! 이제 해결하고자 하는 문제를 결정했다. 그리고 놀랍게도 해결해냈다! 그런데 또 여기서부터도 막막하다. PR을 올려도 되나? 내용은 어떻게 올려야 하지?

요즘 규모가 있는 오픈소스는 보통 Contributing.md를 넘어서 컨트리뷰터를 위한 별도 문서와 페이지를 운영하는 경우가 많다. 읽어보면 분명히 상세하고 친절하게 안내되어 있지만 막상 하려면 또 막막하다.

이번 스터디를 진행하며 PR을 작성하는 방법에 대해 조언을 들을 수 있었고, 내가 노력해 본 내용, 시도해 본 방법을 Issue에 코멘트로 작성하고 멘션하는 등 간단하지만 낯선 일에 도전할 수 있었다.

Pass 60개의 쾌감

그렇게 작성한 PR을 제출했을 때, 대략 60여 개의 check가 돌고 결국 PASS를 받았을 때! 그때의 쾌감을 나는 아직도 잊지 못한다. 와... 정말 너무 짜릿했다.

오픈소스의 특성인지, 아니면 요즘은 정말 다 이렇게 하는지는 모르겠지만, 단순히 linting과 formatting을 넘어서 PR 안의 오탈자를 찾거나 이미지의 attr을 통해 웹 접근성을 고려하거나, test 시간을 확인하는 등 다양한 관점에서 PR 점검이 이뤄졌다.

나도 저거 따라 해야지...!

꿈이 생겼어요

스터디를 내가 열어봐야지

스터디 멘토분은 과거 멘토분께서 느끼셨던 어려움을 알기에 도움을 주기를 결심하셨다고 한다. 주말 동안 조언을 구하면 정말 상세하고 정성 들여 답해주셔서 너무 감사했던 기억이 난다. 심지어 스터디가 종료되고 한 달 가까이 지난 지금도 조언을 구하면 늘 확인하고 도와주신다.

문득 그런 생각이 든다. 나도 누군가에게 도움을 줄 수 있지 않을까? 나는 현재 GDSC Konkuk이라는 동아리에 소속되어 있고 다음 학기에 스터디를 진행할 계획을 세우는 중이다. 물론 교내 동아리 특성상 주기적으로 진행하기는 힘들겠지만, 학기에 한두 번, 사람들과 모여 오픈소스 기여를 고민하고 PR을 제출하는 스터디를 열면 즐거울 것 같다.

Maintainer가 되고 싶다

아까 얘기했다시피, Issue나 PR을 보면 보이던 분들이 자주 보인다. 꼭 문제를 해결하지 않더라도 Issue를 자주 여는 분들도 눈에 띈다.

다양한 오픈소스에 기여하는 것도 좋겠지만, 하나의 오픈소스를 깊게 파고들며 자주 기여하는 것도 뜻깊겠다는 생각이 들었다. 하나를 깊게 연구하는 만큼, 더 중요하고 큰 영향을 줄 기여를 하게 될지도 모른다! 그러다 언젠가 maintainer가 될 수 있다면, 그러면 정말 만족스럽지 않을까?

번외. 현황

PR을 올리고 시간이 꽤나 흘렀다. (맞다, 그냥 내가 좀 조급했을지도 모른다) 위에서 언급한 대로 다음 기여를 생각하지만, 우선 하나라도 approve를 받고 싶었다. 혹여나 내가 부족한 부분이 있다면 바로 잡고, 다음 PR을 좀 더 제대로 준비하고 싶었기 때문이다.

주변으로부터 "오픈소스는 비동기야. 그냥 PR 하나 올리면 다른 일을 찾아보는게 더 나아."라는 조언을 들을 수 있었지만, 마음이 내키지 않았다. 뭐랄까? 내가 다른 오픈소스에 기여해도 된다는 보증이 필요했다.

그런데,,, 처음 내 PR을 리뷰해 주신 Maintainer가 육아휴직을 떠났다... 생각지도 못해서 너무 당황스러웠는데, 한편으로는 조금 후련한 것도 같다. 이제 더 이상 주기적으로 Review가 달리진 않았는지 확인하며 마음을 졸이지 않아도 될 테니까.

역시 조언대로 다른 기여를 위해 떠나야겠다.

2개의 댓글

comment-user-thumbnail
2024년 10월 8일

https://github.com/typescript-eslint/typescript-eslint/pull/10011

거의 4달이 지나서 많은 논의 끝에 결국 만들어주신 PR이 머지되었네요!
typescript-eslint 컨트리뷰터 되신거 정말 축하드립니다ㅎㅎ

1개의 답글