차근차근 오픈소스에 기여해보기 (동기부여 편)

들어가며

요즘은 새로운 것을 학습하고 정리하여 공유하거나 글을 번역하는 작업을 예전보다 못하고 있어서 아쉽습니다. 하지만 일을 하면서 배우는 것도 있고, 별도로 다른 오픈소스 프로젝트의 코드를 살펴보는 일도 시간이 되는 대로 틈틈이 하고 있습니다.

오늘은 제가 조금이나마 오픈소스에 기여하는 경험에 대해서 이야기하고 혹시 오픈소스 프로젝트에 기여하고 싶은 생각이 있는 분들에게 참고가 될 만한 내용을 공유해보고자 합니다.

오픈소스 기여를 왜 하는가

이미 많은 글을 통해 오픈소스에 왜 기여를 해야 하는지 접하셨으리라 생각합니다. 하지만 이 글을 통해 가볍게 다시 한번 정리 해 보겠습니다. 아래의 링크를 참고했으므로 시간이 되면 같이 읽어주시면 좋습니다.


  1. 가장 간단한 것 부터 시작하겠습니다. 여러분들이 사용하는 수 많은 라이브러리나 프레임워크 중에 하나도 오픈소스로 이루어지지 않은 경우는 거의 없으리라 생각합니다. 저는 가능한 한 그 프로젝트에 기여하는 것이 개발자의 의무 중 하나라고 생각합니다. (기여의 형태는 아주 다양하고, 단순히 코드를 기여하는 것이 전부가 아닙니다)
  2. 개발자 개인의 시각으로 접근해 본다면, 혼자서는 쌓기 어려운 지식을 오픈소스 기여를 통해 얻을 수 있습니다. 규모에 따라 다르겠지만 평소에 단순한 토이 프로젝트 수준으로는 겪어볼 수 없었던 설계에 대한 고민이나, 실무에서 사용해보기 어려웠던 API 사용 등 많은 것을 느껴보실 수 있습니다. 좀 더 현실적으로 이야기하자면 오픈소스 기여를 통해 얻은 경험이 여러분의 커리어에 도움이 될 수 있습니다. 물론 지금 자신의 현재 상황과 맞지 않는 프로젝트를 살펴보게 되면 이해가 어려울 수도 있습니다. 이 때 필요한 것은 프로젝트에 대한 흥미입니다. 나중에 다른 단락에서 더 자세히 이야기하겠습니다.
  3. 그리고 개발자 개인의 범주를 넘어 개발자간의 커뮤니티를 형성하거나 그 커뮤니티에 참여할 수 있습니다. 서로 존중하고 함께 성장하고자 하는 문화 속에서 자신과 비슷한 사람을 만나거나, 멘토를 찾거나 혹은 다른 사람들을 가르칠 수도 있습니다. 그리고 프로젝트에 깊게 참여하게 될 수록 평소에는 도전해보기 어려울 수도 있는 프로젝트 관리 영역에까지 영역을 넓힐 수도 있습니다. 조금 더 이야기하자면 오픈소스 커뮤니티는 개발자로 살아가는 동안 자신의 삶에 활력소가 될 수도 있다고 생각합니다. 자신이 어디에 있던지 상관 없이 인터넷만 연결되어 있으면 많은 사람들과 지식, 통찰을 주고받을 수 있습니다. 가끔 친절하지 않은 사람들도 있습니다. 하지만 대부분의 커뮤니티는 부적절한 행동을 방지하고자 최선의 노력을 다하고 있습니다.

    1. 예를 들어 지금 이 블로그를 만드는데 사용되고 있고 정적 사이트 생성기(Static Site Generator)로 크게 유명세를 얻은 Gatsby의 경우 코어 팀과 페어 프로그래밍 세션을 운영하고 있습니다.

어디까지나 오픈소스에 기여하는 행위는 강제로 하는 게 아닙니다. 사람들은 각자 수 많은 이유로 자신의 삶 하루하루를 살아가기에 벅차기도 합니다. 오픈소스에 기여하는 사람들도 똑같은 사람들입니다. 다만 나름의 뜻이 있어서 기여를 하고 있겠지요. 그 사람들을 존중하고 격려해줄 수만 있어도 큰 힘이 되리라 생각합니다. (금전적인 도움이라면 좋고요)

어떻게 오픈소스 기여를 하는가

위에 제가 설명한 내용과 링크 글로 충분히 공감이 되셨다면 오픈 소스에 어떤 방식으로 기여를 할 수 있는지 궁금함을 느끼실 겁니다. 프로젝트를 선정하기 전에 기여하는 방법을 몇 가지 예시를 통해 알려드리겠습니다.

  • 프로젝트 자체를 여러 사람들에게 널리 알리는 방법이 있습니다. 글을 작성하여 공유하거나, 발표를 하거나, 튜토리얼을 제공하는 방식입니다. 프로젝트에 참여하는 사람들도 자신이 만들어 가꾸고 있는 프로젝트가 많은 사람들에게 유용하게 사용되고 있다고 느낀다면 더 보람을 느끼겠죠.
  • 문서화(Documentation)에 기여하는 방법이 있습니다. 물론 여러 국적의 사람들이 모이는 개발자 커뮤니티에서는 영어가 공용어처럼 사용되는 경향이 있다보니 영어가 어렵다면 도전하기 힘들 수 있습니다. 오히려 이 기회를 이용하여 영여 실력을 끌어올리는 계기를 만들 수도 있습니다. 또한 문서화라는 것이 프로젝트의 설명을 하는 것이나 메뉴얼을 만드는 것 뿐만 아니라 영어로 작성되어있는 문서를 우리말로 번역하는 것도 기여를 하는 방식 중 하나입니다. 처음에는 기계어 번역을 한 다음 조금 다듬는 정도로도 괜찮습니다. 더 많이 알고 있는 사람들의 손을 거쳐 번역의 퀄리티를 올릴 수도 있는거니까요. 예를 들어 리액트 공식 문서도 한국어화가 활발히 진행되고 있습니다.
  • Stack Overflow(이하 SO)같은 사이트에서 자신이 잘 알고 있는 프로젝트의 질문을 해결해 줄 수도 있습니다. 굳이 세부 구현을 알지 못한다 하더라도 다양한 요령을 알고 있다면, SO에 올라오는 기상천외한 질문들에 다른 사람들보다 더 쉽게 답변할 수도 있을겁니다. 참고로 SO도 영어 배움터중에 하나가 될 수 있습니다.
  • 그리고 당연하지만 코드에 기여하는 방법이 있습니다. 코드를 직접 작성하여 리뷰를 요청할 수도 있지만, 다른 사람들이 올린 코드를 여러분이 리뷰할 수도 있습니다. 그럴 때 내용에 따라 개발적으로 활발한 토론이 오갈 수도 있지요.

어떤 프로젝트에 기여를 해야하나

여기서부터 조금 어려워지기 시작합니다. “와 나도 오픈소스에 기여를 해봐야겠다” 라고 생각하면서 Github에 들어가면 수많은 프로젝트들이 있고, 거기서 프로젝트에 따라 작게는 몇 개, 많으면 수백~천 몇백개의 이슈가 생성되어 있습니다. 그나마도 프로젝트 관리자들이 처음 접근하는 사람들이 해결해보기 쉬운 이슈라고 표시해 놓는 “good first issue” 같은 레이블을 기준으로 검색해봐도 … 꽤 많네요. (언어는 자바스크립트로만 필터링 해 봤습니다)

제 경험에 비추어 크게 두 가지 기준을 제안하고자 합니다. 아래의 두 가지가 성립되지 않으면 금새 동력을 잃기 십상입니다.

1. 현재 하고 있는 일에 연관이 있어야 한다

개발자로서 본업이 있는 분들이라면 금방 기여할만한 프로젝트를 찾을 수도 있겠지만, 학생이시거나 개발을 취미로 하시는 분들이 기여할만한 프로젝트를 찾으신다면 조금 어려울 수도 있습니다. 상황이 허락한다면 내가 사용하고 있는 오픈소스 프로그램에 버그 리포팅을 할 수도 있고, 어떤 프로젝트를 연구의 대상으로 삼을 수도 있겠죠.

개발자로 일하고 있는 분들이라면 현재 자신이 하고 있는 업무에 사용하는 오픈소스 프로젝트에 기여하는 것이 현실적으로 가장 쉽게 접근할 수 있는 방법입니다. 하지만 가장 어려운 방법이 될 수도 있습니다.

예를 들자면 제가 지금 회사에서 하고 있는 일은 리액트 기반의 웹 애플리케이션을 만들고 있는 것인데, 리액트에 기여를 해보겠다고 저장소의 코드를 훑어보면 현기증이 나고 뭐가 뭔지 하나도 알 수가 없는 상태에 빠집니다. 하지만 package.json 파일 안에 있는 다른 여러 라이브러리들을 보다 보면, 유용하게 쓰고 있지만 어떤 동작이 버그같이 보이거나 간단히 수정할 수 있는 것인데 아직 특별히 PR(Pull Request)가 올라와있지 않은 부분이 있기도 합니다. 그럴 때 프로젝트의 저장소에 가서 이슈를 발행하거나, 간단한 PR을 올려서 오픈소스에 기여를 할 수 있는 것이죠.

2. 내가 ‘관심을 가지고 있는’ 분야의 ‘재미있는’ 프로젝트여야 한다

흥미가 없는 프로젝트인데 ‘good first issue’ 레이블이 있다고 접근하면 소스 코드를 조금 살펴보다 금방 포기할 수도 있습니다. 사용하는 언어 등의 배경 지식도 관심을 가지고 있을 수록 좋고요. 제가 지금 당장 잘 알지도 못하고 관심도 없는 텐서플로우 프로젝트를 들여본다면 그다지 흥미가 생기지 않겠죠. 어차피 오픈소스 기여 활동은 누가 강요해서 하는 것이 아니라 자발적으로 하는 겁니다. 그런고로 만약에 기여를 하고 싶다면 자신이 가장 해 보고 싶은 분야의 프로젝트를 살펴봐야 합니다.

또한 그 프로젝트가 재미있어야 합니다. 여기서 재미라는 부분은 처음에는 코드의 구성이 깔끔하게 잘 되어있다거나, 평소에 보지 못했던 신기한 패턴들이 적용되어 있어 배울 것이 많아보인다거나 하는 식의 재미일 수도 있고, 커뮤니티가 잘 활성화되어있고 뉴비를 잘 받아들여주어 조금이라도 기여하는데 보람을 느낄 수 있는 경우도 포함됩니다.

그 외에 동기부여하는 방법

저처럼 오픈소스 기여에 대한 글을 작성하여 다른 사람들과 생각을 공유해볼 수도 있습니다. 흔히 말하는 “삽질”을 하면서 어떤 경험을 했는지 다른 사람들과 생각을 나누고 발표를 통해 알려주기도 하면서 재미를 느낄 수 있다고 생각합니다. 또는 명확한 보상이 있는 이벤트에 참여해볼 수도 있습니다.

대표적으로 헥토버페스트가 있습니다. 10월 1일부터 31일까지 기간동안 Github 저장소에 있는 어떤 프로젝트라도 4개의 PR이 머지된다면 보상으로 참여 티셔츠와 스티커 등을 받을 수 있습니다. 저도 작년에 참여하여 받았습니다. 집 안에서 입기 정말 좋은 재질이더군요.

우리나라에서도 정부 지원 하에 오픈소스 기여를 장려하는 여러 프로그램이 운영되고 있습니다. 그 중 하나로 올해 열린 공개 SW 컨트리뷰톤이나 이 글을 작성하고 있는 시점에도 아직 참가자를 모집하고 있는 공개 SW 개발자대회등이 있습니다. 조금 더 자세한 지원사업이 궁금하신 분들은 공개 SW 포털에 들어가 보시면 됩니다.

단기적인 보상 뿐 아니라 장기적인 참여를 유도하는 글로벌 전문 개발자 지원사업(구 오픈프론티어)에 참여하실 수도 있습니다. 자신이 기여하고자 하는 프로젝트를 선정하여 구체적인 활동 계획을 세우고 한 해동안 프로젝트에 기여하고 관련된 내용을 공유하는 활동을 하면서 소프트웨어, 클라우드 컴퓨팅, 활동 지원금 등 다양한 지원을 받을 수 있습니다. 저도 올해 추가모집을 통해 파트타임으로 글로벌 전문 개발자 지원사업에 참여하고 있습니다.

마치며

이번 글을 통해 왜 오픈소스 프로젝트에 기여할 필요가 있는지, 어떤 프로젝트를 찾아서 기여하면 좋을지, 별도로 동기부여를 할 방법이 있는지 살펴보았습니다. 다음 글부터 본격적인 제 경험담을 풀어나가면서 어떤 프로젝트를 왜 선정했는지, 기여를 하고자 하면서 어떤 삽질을 했는지 이야기를 풀어보겠습니다.


Dohyung Ahn (rinae)
Dohyung Ahn (rinae)
삽질을 하고, 글을 남기면서 다른 사람들과 함께 자라고 싶어하는 프론트엔드 개발자입니다. 더 좋은 코드와 설계를 항상 고민하며 지식을 어떻게 효율적으로 습득하고, 어떻게 잘 나눌 수 있을지도 고민합니다.

GitHubTwitterFacebook