[Tips] 오픈소스에 초보 개발자가 기여하는 방법

kshired·2022년 7월 19일
208
post-thumbnail

이번 포스트는 오픈소스에 초보 개발자가 기여하는 방법이라는 주제에 대해서 다룰 예정이다.

내가 어떻게 오픈소스에 기여를 시작했고, 오픈소스 기여를 해보지 않은 사람들이 어떻게 오픈소스 기여를 시작할 수 있을지에 대해 알아보자.

이 포스트는 소문난 주니어 콘퍼런스 ( a.k.a. 소주콘 ) 에서 발표를 하기 위해 만든 자료를 포스트로 옮겨 놓은 것입니다. 그렇기 때문에 조금.. 어색할 수도 있지만 알아보기 쉽게 정리를 했으며, 만약 발표자료 형태로 보고싶으시다면 발표자료 링크를 참고해주세요.

오픈소스 알아보기

오픈소스 기여를 알아보기 전, 먼저 오픈소스란 무엇인가에 대해 알아보자.

오픈소스란?

  • 오픈소스란 오픈소스소프트웨어를 뜻하는 말.
  • 공개적으로 액세스할 수 있게 설계되어 누구나 자유롭게 수정, 배포할 수 있는 코드

라이센스

  • 오픈소스 소프트웨어가 사용될 때, 이를 어디까지 혹은 어느 방식으로 사용할 수 있는 기준
  • 여러가지 오픈소스 라이센스가 존재
  • 대표적인 3가지 라이센스
    • MIT License
      • MIT에서 만든 라이선스 규정
      • 무료
      • 상업적 이용 가능
      • 배포 가능
      • 소스코드 수정 가능
      • 2차 저작물 공개의무 X
      • 라이선스 및 저작권 명시
    • Apache License
      • 아파치 소프트웨어 재단에서 만든 라이선스 규정
      • 무료
      • 상업적 이용 가능
      • 배포 가능
      • 소스코드 수정 가능
      • 2차 저작물 공개의무 X
      • 변경 사항 명시
      • 라이선스 및 저작권 명시
    • GPL ( General Public License )
      • 무료
      • 상업적 이용 가능
      • 배포 가능
      • 소스코드 수정 가능
      • 2차 저작물 공개의무 O ( GPL 라이센스로 공개 -> v3 이상 해당 )
      • 변경 사항 명시
      • 라이선스 및 저작권 명시

기여

Contribution의 번역어로, 기능을 추가하거나 문서를 작성하는 등의 오픈소스에 도움이 되는 행위

오픈소스에 도움이 되는 행위 즉,

코드로 기여하는 것만이 기여가 아니다

오픈소스에 한 발 내딛기

기여를 시작하면 좋은 이유

문제 해결 능력 상승

이슈를 해결하는 과정은 명확한 답이 없는 문제를 해결해나가는 과정

-> 이러한 과정에서 자연스럽게 문제 해결 능력을 상승시킬 수 있음

커뮤니케이션 능력 상승

오픈소스 기여의 과정은 처음부터 끝까지 소통을 기반으로 함

-> 여러 사람들과 소통하는 방식을 배울 수 있음

또한, 대부분의 오픈소스는 영어로 소통하는 경우가 많음

-> 자연스러운 영어 능력 상승을 기대할 수 있음

주변에서부터 찾아보기

사용하는 프로그램 혹은 라이브러리에서 찾기

관심이 있거나 사용하는 라이브러리에 기여하자

-> 관심이 없는 라이브러리는 쉽게 흥미가 떨어지고, 지친다.

실제로 내가 가장 열심히 기여하고 있는 라이브러리는, 내가 하는 게임인 HearthStone Deck Tracker

스스로 불편한 점을 겪고 있는 것에서 찾아보기

사용하는 것에서 스스로 불편하다고 느끼는 것을 고쳐보자

-> 내가 불편하면 의욕을 가지고 고치게 됨

나의 첫 기여도 내가 불편해서 직접 고치고 수정해서 PR을 올렸었다.

큰 프로젝트부터 시작하지 않기

너무 큰 프로젝트는 구조 파악부터 오래 걸린다

실제로 수일 ~ 수주가 걸릴 수 있고, 기여를 시작하려다 지칠 수도 있다.

처음에, 내가 사용하는 라이브러리 중 하나인 Spring, JPA 등과 같이 큰 라이브러리의 구조를 보다가 포기하고 오픈소스 기여 자체를 포기할까 생각했던 적도 있었다.

이러한 이유 때문에 나는 작은 라이브러리부터 기여하는 것을 추천한다.

작은 프로젝트도 오픈소스

작은 프로젝트가 도움이 필요한 경우가 더 많다.

시작한지 얼마 안 된 프로젝트들을 기여자도 적기 때문에, 더 많은 도움을 필요로한다.

이렇게 작은 프로젝트는 프로젝트 파악도 비교적 쉽고, 시작하기도 쉽다.

그렇기 때문에, 나는 작은 프로젝트라도 흥미를 느낄 수 있는 프로젝트라면 기여를 시작하는 것을 추천한다.

오픈소스 기여 시작하기

이제 오픈소스에 대한 정의와 오픈소스 기여를 하면 좋은 이유를 알아보았으니, 오픈소스 기여를 시작할 차례이다.

이에 앞서, 오픈소스 기여는 어떻게 시작하는지와 오픈소스 기여시 알아두면 좋은 것에 대해 살펴보자.

오픈소스 기여과정 알아보기

Issue 작성

문제가 발생하거나, 기능적으로 개선 혹은 추가가 필요한 것을 제보하는 과정

Maintainer가 이해하기 쉽게, 최대한 자세하게 작성하자.

-> Maintainer가 모든 issue를 파악할 수 없다. 그렇기 때문에 최대한 자세하게 작성하고, Issue template이 존재한다면 그 template에 맞게 적자.

( issue template 예시 )

코드 혹은 문서 수정 및 추가

Issue에 제보되어 있는 문제 혹은 제안에 따라 수정 및 추가를 진행

물론, Issue 작성 없이 바로 코드를 수정하고 PR을 작성 할 수도 있음!

PR 작성

Pull Request 의 약자로, 자신이 수정 혹은 추가한 코드 ( 또는 문서 ) 를 병합하기 위한 요청

Issue와 마찬가지로, 무엇을 어떻게 수정하였는지 최대한 자세하게 작성하자

실제로 나는 해결한 문제가 무엇인지, 그것과 관련된 이슈가 있다면 어떤 이슈인지 또 이걸 해결하였음을 보증하는 테스트 코드는 존재하는지와 같은 것들을 언급하며 PR을 작성하는 편이다.

CI

Continuous Integration ( 지속적인 통합 ) 의 약자로, Github Actions와 같은 CI 툴에 의해 코드 스타일 체크 및 테스트등을 수행

위와 같이 코드 스타일 체크 및 테스트를 수행하고, 이 동작이 성공했는지 실패했는지에 따라 CI 성공 실패 여부가 나뉜다.

이런 체크에서 실패하면, 당연히 코드를 수정해야 함!

Review

코드 및 문서의 수정사항을 maintainer가 확인 및 검증

올바르지 않은 코드 혹은 개선이 필요한 코드는 maintainer가 변경을 제안

하지만, 단순히 검사를 받는 것이 아님! 서로간의 소통을 통해 더 좋은 방법을 논의하고 더 좋은 코드를 만드는 과정

Review를 통해 수정이 필요하다면, 수정을 진행. 그 후 수정을 마치고, 새로운 커밋을 푸시하면 다시 CI 과정부터 시작.

Merge

이렇게 Review까지 정상적으로 마친 기여는 대망의 병합 단계로 오게 된다.

PR이 실제 코드에 반영 될 차례!!!

보통 master 혹은 main 브랜치에 merge 되고, 추후 release 됨

코드 작성만이 기여가 아니다

가끔 사람들이 코드의 버그를 고치거나, 기능을 추가하는 것만이 오픈소스 기여라고 생각하는 경우가 있다. 하지만, 아래에서 설명 할 자잘한 문제들도 오픈소스에 기여를 하는 과정이다. 오해하지 말자!

가장 쉬운 기여는 오타 고치기

Docs 혹은 README에 오타가 있는 경우가 다수이다.

당연히, 이것을 고치는 것도 기여!

실제로 나는 이러한 typo도 많이 고쳐서 PR을 올린다.

번역하기

다수의 국가에서 사용되는 프로젝트는 번역이 필요하다.

그렇기에 당연히 번역에 도움을 주는 것도 기여!

어렸을 때부터 영어 교육을 배운 한국인에게 이러한 간단한 문장 번역은 쉬울수도?!

버그 제보하기

사용하는 오픈소스에서 발생한 문제를 리포트하는 것도 하나의 기여 방법이다.

나는 실제로, 위와 같이 실제 겪었던 버그나 문제 점들을 제보하곤한다.

이러한 버그 제보도 오픈소스에 큰 도움이 되는 행위이니 할 수 있다면 해보는 것도 추천한다.

오픈소스 기여시 주의 할 점

올바르게 기여하기

가이드라인 준수

CONTRIBUTING.md 같은 파일의 가이드라인을 확인하고 준수하자

보통 이 파일에 아래의 사진과 같이 PR, Issue 등의 기여를 하는 방법이 적혀있다. 꼭 확인하고 안내된 방법을 따르자.

코딩 스타일 준수

모두가 함께 만들어 가는 오픈소스, 협업을 위해 코딩 스타일을 준수하자.

보통 Linter 혹은 CI를 통해 코딩 스타일 체크 가능하니, 그것을 통해 수정해보자.

기다림은 필수

Maintainer의 직업은 maintainer가 아니예요

대부분의 오픈소스 maintainer는 자신의 본업이 있기 때문에, Review부터 Merge까지 몇달이 걸리는 경우도 있다.

좌절하지 않기

항상 PR이 Merge 될 수 없어요

코드에 문제가 있거나 이런 저런 이유 때문에, PR이 Merge되지 않는 경우도 있음

그렇다해도, 오픈소스 기여를 위한 시도 자체도 의미가 있는 행위니까 좌절하지 말자.

스스로 배운 것도 있을 것이다. 긍정적으로 생각하자.

근데 나는 PR을 올렸는데… maintainer가 로컬에서 이미 1주전에 해결하고 Push를 안한 경우도 있었다. ㅋㅋ ㅜㅜ

Tips!

이제 오픈소스가 무엇이고, 오픈소스에 어떻게 기여하는지 등을 알아봤으니 오픈소스 기여를 시작하기 위한 tip에 대해 알아보자.

Good First Issue

초보자가 고치기 쉬운 이슈로, Github에 대부분 labeling을 maintainer가 해놓거나 Github가 AI를 통해 자동으로 labeling을 해놓은 issue

오픈소스 초보자가 선택하기 좋은 방법이다.

Github에서 Good First Issue를 찾아보자.

위와 같이 Good First Issue를 모아 놓은 사이트도 있다.

Good First Issue와 유사한 Up For Grabs도 있으니 살펴보자.

오픈소스 컨트리뷰톤

오픈소스 진입장벽이 높게 느껴지는 사람을 위한 행사로, 누구나 참여하여 멘토링을 통해 기여를 할 수 있도록 도와주는 프로그램.

매년 진행되고 있으니, 오픈소스에 기여를 하고 싶은데 어떻게 해야 할 지 모르겠는 사람들이 참가해도 좋을 것 같다.

기여를 위한 기여하지 않기

이력서 한 줄을 위해, 억지로 기여하지 말자.

가끔 이렇게 오픈소스에 기여하는것이 취업에 도움이 되지 않을까 억지로 하는 사람을 본 적이 있다.

근데 억지로하면 흥미도 금방 잃고, 재미도 없다.

그러니까!

흥미를 느끼고, 본인이 사용하는 라이브러리에 기여하자!

간단 용어 정리

profile
글 쓰는 개발자

6개의 댓글

comment-user-thumbnail
2022년 7월 20일

와 너무멋져요 역시 크와아아아앙아아앙 🦁

답글 달기
comment-user-thumbnail
2022년 7월 20일

와!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1오소리!!!!!!!!!!!!!!!!!!!!!11111

답글 달기
comment-user-thumbnail
2022년 7월 25일

좋아요

답글 달기
comment-user-thumbnail
2022년 7월 25일

Your writing is really informative, especially because it's so meaningful and updated. Thanks for sharing this wonderful post!

Your writing is really great. I’m so glad I read it. It kept me hooked the whole way through.

Thanks for this information. I really appreciate the information that you have provided.

https://www.tcswebmail.info/ https://www.upsers.fyi/ https://www.prepaidgiftbalance.fyi/

답글 달기
comment-user-thumbnail
2022년 7월 28일

잘보고가요 !

답글 달기
comment-user-thumbnail
2022년 7월 28일

좋은 글 써주셔서 잘 읽고 갑니다! 감사합니다.

답글 달기