주니어 개발자가 오픈소스에 기여하는 현실적인 방법

Posted by Pando on June 20, 2020

주니어 개발자가 오픈소스에 기여하는 현실적인 방법

목차

  • 0. 들어가기에 앞서
  • 1. 일단 시작
  • 2. Issue 정하기
  • 3. 개발!
  • 4. 드디어 기여
  • 5. 달라진 점 및 느낀 점

0. 들어가기에 앞서

이런저런 일 때문에 글을 드디어 쓰게 된다.
나처럼 오픈소스를 처음 시작하는 사람을 위해서 현재 내 간단한 약력을 적어보겠다.
나는 컴퓨터과학과이며, 백엔드로 이제 만1년 차인 평범한 Python 개발자이다.
나와 비슷한 주니어 개발자 혹은 이제 막 시작하는 개발자에게 어떻게 오픈소스에 기여하게 되었는지 말로만 거창한 그 여정을 적어보겠다.
나도 이런 말을 할 줄 몰랐지만 사실 별거 없다..

1. 일단 시작

오픈소스라는 거창한 말 때문에 항상 언젠가는 시작해봐야 한다는 생각을 머릿속에 항상 가지고 있었지만, 내가 할 수 있을까? 그거 할 시간에 모르는 코드를 한 줄 더 읽는 게 낫지 않을까? 하는 여러 가지 이유로 미루기 일쑤였다.
예전에 여러 커뮤니티에 참여하면서 오픈소스 모임도 참여했었지만 ‘와.. 다들 대단하다.’라며 작아지는 모습만 가지고 돌아왔던 기억이 있다.
시간이 될 때, 실력이 좀 더 컸을 때 시도하겠다는 말만 되풀이했었다. 이런 경우에는 그냥 안 하겠다! 라고 말하는 게 더 심신에 이롭다. 괜히 스트레스만 받았다.
그러다 회사에서 하는 스터디 마지막 과제가 오픈소스에 기여하기였고 이제는 더는 피할 수 없는 운명이었다.
겁이 난다고도 CTO님께 솔직하게 말했지만, 모두가 하니까 나만 안 한다고 할 수가 없었다. (스터디에는 강력한 벌금이 있었다)
그렇게 오픈소스를 시작하겠다는 마음을 먹었다.

2. Issue 정하기

이제 큰 산은 넘었다. 죽이 되든 밥이 되든 시도는 해봐야 한다. 그런데 그다음 문제가 발생했다. 무엇을? 어떻게? 기여할 것인가이다. 오픈소스의 기여는 다양하다. 문서화에 기여하여 한국어로 번역할 수도 있고, 코드에 기여할 수도 있다. 나는 코드를 수정할 수 없을 거라는 생각에 번역이 제일 시도하기 좋을 것 같다고 생각하면서도 또 그놈의 ‘이왕 할 거면 코드를 고쳐보자!’라는 마음이 계속 고개를 내밀었다. 그래서 Django와 같은 큰 오픈소스가 아니라 라이브러리로 많이 썼던 것 중에서 찾고 찾았다. 내가 선택한 건 파이썬에서 정적타입을 검사해주는 mypy라는 라이브러리를 선택했다. 이유는 사람들이 1) 어느 정도 많이 쓰고 2) 이슈도 많아서 해결할 문제들도 다양했다.

mypy

이슈는 1,000개가 넘고 스타가 8,800개였다.

mypy issues

이슈 탭을 눌러보면 다양한 이슈들이 여러 가지의 우선순위의 태그로 달려있다.

이슈들의 태그를 꼼꼼히 단 Repository일수록 그 안에 컨트리뷰터가 얼마나 신경 써서 관리하는지 알 수 있다. 나는 good-first-issue 라는 처음 시작하기에 좋은 난이도가 쉬운 Issue를 선택했다. 여기서 중요한 건 하기로 선택한 Issue를 먼저 진행하겠다고 댓글을 다는 것이다. 그렇지않고 작업을 시작한다면 다른 사람이 먼저 작업해서 해결할 수 있기 때문이다. mypy select issue

간단한 영어여도 처음이다 보니 매우 신중하게 해당 문장이 맞는지 파파고로 돌려서 다시 한번 더블 체크, 구글 번역기로 트리플 체크로 글을 올렸다.

3. 개발!

사실 이걸 해결하겠다고 적는 것도 나름 떨렸다! 하지도 않았는데 벌써 성장한 느낌이 들었다. 그렇지만 회사 일은 바쁘고 세상에 많은 재밌는 일 때문에 오픈소스 개발은 하지도 않고 시간은 하염없이 흘렀다. 그러던 중, 내 이슈가 오래 해결되지 않는 걸 보자 다른 사람이 ‘너 이거 해결하는 거니?’라고 댓글이 달렸다. 하나도 안 했지만 (죄송합니다) ‘그럼! 하고 있지’라고 답을 했다. 이제는 더는 도망칠 곳이 없었다. mypy comment issue 내 이슈는 mypy에서 좀 더 자세하게 오류를 반환하도록 해달라는 이슈였다. 일단 mypy Repository를 Clone 받고 이 프로젝트 자체에서 mypy를 실행하는 법을 찾았다. 생각해보니, 프로젝트에서 pip로 라이브러리를 다운만 받아서 써봤지. 라이브러리 자체를 사용해본 적이 없었다. (정말 안 해본 게 많구나) 모르는 부분은 Docs에 상세하게 쓰여 있지만 해석하는데 시간이 걸렸다. 영어 공부해야겠다. (ㅎㅎ 안 할 거 아시죠?)

일단, 내 목표는 이슈에서 적힌 대로 좀 더 자세하게 오류 메시지를 반환하도록 코드를 수정하고, 깨지는 테스트만 해결하고, 커밋 후 Push를 해서 거기서부터 핑퐁으로 컨트리뷰터에게서 ‘이런 코드를 고쳐야지’ ‘저런 코드를 수정해야지’ 하는 답변을 받으려고 했다. 드디어 Pull Request를 날렸다. 내용은 이슈 번호를 적고 해결했다는 게 전부였다. mypy pull request

4. 드디어 기여

코드를 올린 지 며칠이 지났고, 답변이 없어서 기다리고 기다리다가, 컨트리뷰터에게 태그를 하고 ‘내 코드 좀 봐줘’라고 했다. 그리고 잠시 시간이 지난 뒤 머지가 되었다. 응???? 응???????????????? 응????????????????????????? 이렇게 쉽게 된다고? 입가에 미소가 번졌다.

사실 매우 간단한 이슈를 고쳤기 때문에 엄청 어려운 작업은 아니었지만 오픈소스를 한 번도 안 해본 나에게 했다는 건 0에서 1이 된 거다. 나는 그렇게 오픈소스에 첫 기여를 할 수 있게 되었다. mypy contribute

5. 달라진 점 및 느낀 점

  1. 처음으로 오픈소스 Repository를 Fork해서 Pull Request를 날려봤다.
  2. Python에서 항상 pip로 받던 라이브러리 코드 자체를 Clone 받아서 실행시키는 방법을 알게 되었다.
  3. Python에서 다른 테스트 프레임워크를 실행해보았다.
  4. 내 Github에 Python Organization이 생겼다!! (이게 제일 기분 좋다.)

python contributer

실력이 많이 향상되었다는 건 아니다. 어려운 작업이 아니었으니까, 그러나 막연한 두려움이 조금 사라졌다. 나는 영어를 못 하니까 남들보다 개발을 못 하니까 아직은 안되라는 나만의 틀을 조금이나마 깰 수 있었다. 역시 무엇이든 직접 부딪히는 게 최고의 방법이다. 나처럼 자신이 아직 부족하다고 생각하는 사람들은 두려움을 조금 내려놓았으면 좋겠다. 너무 큰 불안과 지나친 겸손이 우리의 성장을 저해할 수 있다.

마무리로는 데미안의 한 구절을 인용하면서 글을 마무리하겠다.

새는 알을 깨고 나온다. 알은 곧 세계이다. 태어나려고 하는 자는 하나의 세계를 파괴하지 않으면 안 된다. 그 새는 신을 향해 날아간다 그 신의 이름은 아프락사스라고 한다.