오픈소스에 기여하기
오픈소스 프로젝트에 기여하는 방법과 과정을 정리하여 소프트웨어 개발 실력을 향상시키세요.
개요
우연히 오픈소스 프로젝트에 참여할 좋은 기회를 얻게되었습니다.
오픈소스라는 것과 깃허브에 잘 공개된 오픈소스들이 많다는 것만 알 뿐, 해당 프로젝트에 기여나 수정할 것들을 한번도 생각해본적이 없었습니다. 마침 좋은 기회를 얻게되어 오픈 소스에 기여하는 방법에 대해 알아보고 진행하며 얻었던 인사이트들을 정리하기위해 작성하였습니다.
오픈소스 컨트리뷰션이란?
오픈소스 컨트리뷰션은 소프트웨어 개발 기술을 향상시키고, 포트폴리오를 구축하며, 개발자 커뮤니티에 참여하는 좋은 방법으로 알려져있습니다. 일반적으로 다음과 같은 행위를 일컫습니다.
- 코드 기여: 새로운 기능 추가, 버그 수정, 성능 개선 등의 코드 작성
- 문서화: 프로젝트 사용법, API 문서, 튜토리얼 등 작성 및 개선
- 번역: 다양한 언어로 문서나 인터페이스 번역
- 버그 리포팅: 발견된 문제점을 상세히 보고
- 코드 리뷰: 다른 사람의 코드를 검토하고 피드백 제공
- 디자인: UI/UX 개선이나 그래픽 디자인 작업
- 테스트: 테스트 코드 작성이나 품질 보증 작업
Github에 공개된 오픈소스 컨트리뷰션 과정
여러 블로그와 문서들을 참고했을 때 다음과 같은 워크플로우를 따릅니다.
1. 관심있는 프로젝트를 탐색합니다.
자신이 관심 있거나 사용해본 프로젝트를 찾습니다. 해당 프로젝트를 GitHub에서 검색하거나 "good first issue", "help wanted" 같은 태그가 붙은 이슈들이 존재하며, 해당 이슈들을 통해 아주 작은 수정부터 시작하는 것이 좋습니다.
2. 프로젝트 이해하기
선택한 프로젝트의 README.md, CONTRIBUTING.md, CODEOFCONDUCT.md 파일이 있다면 반드시 읽어보세요. 이 문서들은 프로젝트의 목적, 기여 방법, 코드 스타일, 커뮤니케이션 방식에 대한 중요한 정보를 담고 있으며 대부분의 경우 해당 플로우를 따라가면 원활히 진행할 수 있습니다.
3. 프로젝트 포크(Fork)하기
GitHub에서 프로젝트 페이지 오른쪽 상단에 있는 'Fork' 버튼을 클릭하여 프로젝트의 복사본을 자신의 GitHub 계정에 만듭니다. 이렇게 하면 원본 프로젝트에 영향을 주지 않고 변경사항을 테스트할 수 있습니다.
4. 로컬에 클론(Clone)하기
git clone https://github.com/당신의유저네임/프로젝트이름.git
cd 프로젝트이름
이 명령어로 포크한 프로젝트를 로컬 컴퓨터에 다운로드합니다.
5. 원본 저장소를 업스트림(Upstream)으로 설정하기
git remote add upstream https://github.com/원본계정/프로젝트이름.git
이 단계는 원본 프로젝트의 최신 변경사항을 쉽게 가져올 수 있게 해줍니다.
- 오리진(origin): 사용자가 포크한 저장소로, 사용자의 GitHub 계정에 있습니다. 기본적으로
git clone
을 실행하면 자동으로 "origin"이라는 이름으로 설정됩니다. - 업스트림(upstream): 원본 프로젝트 저장소로, 사용자가 포크한 소스입니다. 이것은 수동으로 추가해야 합니다.
기본적인 데이터 흐름은 다음과 같습니다.
[업스트림(원본 프로젝트)] ← pull ← [로컬 저장소] → push → [오리진(내 GitHub)]
- push(푸시): 여러분의 변경사항은
git push origin 브랜치이름
명령어를 통해 여러분의 GitHub 계정(오리진)에 업로드됩니다. 원본 프로젝트(업스트림)에는 직접 푸시할 수 없습니다(보통 권한이 없기 때문). - pull(풀) 또는 fetch + rebase:
git pull upstream main
또는git fetch upstream;
git rebase upstream/main
명령어를 사용하면 원본 프로젝트(업스트림)에서 최신 변경사항을 여러분의 로컬 저장소로 가져옵니다.
6. 브랜치(Branch) 생성하기 - (권장)
git checkout -b 브랜치이름
항상 새로운 브랜치에서 작업하는 것을 권장드립니다. 브랜치 이름은 작업 내용을 간략히 설명하는 것이 좋습니다 (예: fix-login-bug, add-dark-mode).
7. 변경사항 작업하기
코드 편집기(IDE)를 사용하여 필요한 변경사항을 구현합니다. 2. 프로젝트 이해하기의 코딩 스타일과 가이드라인을 따라야 합니다.
8. 테스트하기
변경사항이 제대로 작동하는지 확인하기 위해 테스트를 실행합니다.
많은 프로젝트가 자체 테스트 스위트를 제공하며, 이를 실행하는 방법은 프로젝트 문서에서 찾을 수 있습니다.
9. 변경사항 커밋(Commit)하기
git add .
git commit -m "설명적인 커밋 메시지"
커밋 메시지는 변경 내용을 명확하게 설명해야 합니다. 일부 프로젝트는 특정 커밋 메시지 형식(예: 컨벤셔널 커밋)을 요구할 수 있습니다. 잘 알려진 Commit conventions는 다음과 같습니다.
10. 최신 변경사항 가져오기
작업하는 동안 원본 프로젝트가 업데이트되었을 수 있으므로, 최신 변경사항을 가져옵니다:
git fetch upstream
git rebase upstream/main
충돌이 발생하면 해결해야 합니다.
11. 변경사항 푸시(Push)하기
git push origin 브랜치이름
이 명령어로 변경사항을 GitHub의 포크된 저장소에 업로드합니다.
12. 풀 리퀘스트(Pull Request) 생성하기
GitHub에서 포크된 저장소로 이동하면 "Compare & pull request" 버튼이 표시됩니다. 이 버튼을 클릭하여 변경사항에 대한 설명을 작성하고 풀 리퀘스트를 제출합니다.
13. 코드 리뷰 및 토론 참여하기
프로젝트 메인테이너나 다른 기여자들이 코드를 검토하고 피드백을 제공할 것입니다. 인내심을 가지고 건설적인 방식으로 토론에 참여하세요. 변경 요청이 있으면 추가 커밋을 통해 반영합니다.
14. 변경사항 병합(Merge)
모든 리뷰가 통과되면 프로젝트 메인테이너가 변경사항을 병합하게 됩니다. 병합이 완료된다면 이제부터 오픈소스 컨트리뷰터로써 리포지토리에 기록되게 됩니다.
15. 정리하기
git checkout main
git pull upstream main
git push origin main
git branch -d 브랜치이름
이 명령어들로 작업이 완료된 브랜치를 정리하고 로컬 저장소를 최신 상태로 유지합니다.
이 과정은 기본적인 GitHub 오픈소스 컨트리뷰션 워크플로우입니다. 각 프로젝트마다 세부적인 기여 과정이 다를 수 있으므로, 항상 프로젝트의 공식 기여 가이드라인을 따르는 것이 중요합니다.