소스 코드 저장소는 사용자의 소스 코드를 공개 또는 비공개적으로 관리하기 위한 파일 아카이브 또는 웹 호스팅 기능으로 이러한 기능을 공개적으로 서비스 하는 것을 오픈소스 소프트웨어 호스팅(이하 오픈소스 저장소)라 한다. 오픈소스 저장소는 여러 오픈소스 프로젝트들이 다수의 개발자들과 협업하기 위해 주로 사용하고 있으며, 버전관리, 버그 트래킹, 메일링 리스트, 위키 기반 문서작성 등의 기능을 제공한다.
현재 다양한 오픈소스 저장소가 존재하며 대표적인 저장소로 GitHub, SourceForge, Bitbucket, Google Code를 꼽을 수 있으며, 각각의 특징은 아래의 표와 같다.
이름 | Bug tracking | Web hosting | Wiki | Shell Server | Private Branch | Etc. |
GitHub | O | O | O | X | O (Paid) | - Public API - static web-page hosting - pastebin service Gist - 3D model support - support for OAuth 2.0 and SSH keys - Automatic Page Generator |
Source Forge | O | O | O | O | O | - Public API - Help Wanted - OpenID Relying Party - Piwik Web Analytics |
Bit bucket | O | O | O | X | O (Limitedor Paid) | - OpenID - visualizations |
Google Code | O | X | O | X | X | - Public API - Instant project creation on any topic - 2GB of storage space |
*출처 : http://en.wikipedia.org/wiki/Comparison_of_open-source_software_hosting_facilities
가. 오픈소스 프로젝트 검색
현재 오픈소스 프로젝트는 셀 수 없을 정도로 많으며, 해당 프로젝트가 관리되고 있는 저장소도 각각 다르다. 이렇게 많은 프로젝트들 중 특정 프로젝트를 찾기 위해 다음과 같은 방법을 사용할 수 있다.
(1) 구글링
잘 알려진 유명한 오픈소스 프로젝트들은 타이틀만으로도 구글링을 통해 충분히 검색할 수 있다.
(2) 오픈소스 저장소 내 검색
GitHub, SourceForge, Bitbucket, Google Code 등 오픈소스 저장소에 접속하여 직접 검색한다.
(3) 오픈소스 재단 내 검색
아파치 재단, 리눅스 재단, 모질라 재단 등 오픈소스 재단에 접속하여 직접 검색한다.
그 밖에 http://www.findbestopensource.com, https://www.openhub.net/ 등의 사이트에서도 검색할 수 있다.
나. 오픈소스 프로젝트 참여
오픈소스 프로젝트에 참여하는 방법은 다음과 같이 아주 다양하다.
ㅇ 버그 리포트
ㅇ 커뮤니티 활동을 통한 의견 교류
ㅇ 프로젝트 문서 수정 또는 번역
ㅇ 기능 등록 및 수정 요청
ㅇ 패치 요청
ㅇ 커미터 또는 컨트리뷰터 활동
* 커미터(Committer) : 프로젝트내에서 직접 코드를 push할 수 있는 권한을 가진 사람
* 컨트리뷰터(Contributter) : 패치 등의 소스 코드를 제공하는 사람
즉, 반드시 코드를 수정, 작성해야만 프로젝트에 참여하는 것이 아니고 자신이 할 수 있는 부분에서 꾸준한 관심과 희생정신을 가지고 활동하는 것이 바람직하다.
개발자에게 있어 커미터 또는 컨트리뷰터가 되는 것이 가장 이상적인 참여 방법이 될 수 있으며, 일반적인 과정은 다음과 같다.
(1) 기술 및 사용법 습득과 개발환경 구축
오픈소스 프로젝트에서 사용하는 언어 및 프레임워크 등의 기술을 습득하고 해당 오픈소스 프로젝트를 활용할 수 있어야 하며 “3.4. 오픈소스 개발자 환경의 구축”을 참고하여 개발환경을 구축한다.
GitHub의 경우 개발환경 구축 시 프로젝트를 개인 저장소로 복제하기 위해 Fork를 수행한다.
Watch, Star, Fork는 GitHub의 소셜 기능으로써 Watch는 해당 프로젝트를 지속적으로 관찰하겠다는 의미로 이 기능을 활성화 시키면 해당 프로젝트가 처리하고 있는 이슈들에 대해서 알림이 오게 된다. Star는 해당 프로젝트에 관심을 나타내는 것으로 별점과 비슷하다. Star가 많은 프로젝트들은 월간, 주간, 일간으로 분류하여 인기 프로젝트로 선정되며 Explore 메뉴에서 보여진다. 마지막으로 Fork는 해당 프로젝트를 내 계정에 그대로 복사하는 기능으로 해당 프로젝트에 Push 권한이 없다면 복제된 프로젝트에 기능을 추가, 수정하고 Pull Request로 변경사항을 적용 요청할 수 있다.
(2) 메일링 리스트 구독 및 커뮤니티 활동
메일링 리스트를 구독함으로써 프로젝트 관련 정보를 받아볼 수 있으며, 커뮤니티 활동으로 구성원들과의 의견 교류를 활발히 한다.
(3) 버그 리포트 & 기능 제안
재현할 수 있는 버그에 대해 상황과 상태를 자세히 기술하며, JIRA나 GitHub 이슈 등의 공식 이슈 트래커를 사용하여 리포트한다. 단, 버그 리포트를 등록하기 전 유사한 버그가 있는지 확인하고 이미 존재한다면 기존 내용에 코멘트 등으로 부가 설명 후 vote나 watch 등으로 관심을 표현하는 것이 좋다.
기능 제안도 버그 리포팅과 마찬가지고 이슈 트래커를 사용하며, 유사한 이슈가 있는지 확인 후 등록한다.
(4) 패치 등록 / Pull Request
버그, 기능 개선, 신규 기능 등을 위해 등록된 이슈에 패치를 첨부하면 커미터들이 패치를 검토한 후 적용하게 된다. GitHub가 사실상 오픈소스 코드 저장소의 표준이 되었기 때문에 요즘은 패치를 보내는 일은 많지 않고 대부분 GitHub의 Pull Request를 이용한다.