오픈소스의 확산을 이끈 깃허브 이야기
(학주니 이학준) 오픈소스라고 하면 무엇이 떠오르나요? 공짜 프로그램? 무료 프로그램? 누구에게나 소스를 갖다 쓸 수 있게 해주는 프로그램? 아마도 많은 사람들이 공짜라는 이미지를 갖고 있을 듯 합니다. 이름 자체가 ‘열다’라는 뜻의 Open과 ‘원천’이라는 의미의 Source가 합쳐진 단어이기 때문에 아주 틀린 얘기는 아닙니다. 일반적으로 오픈소스로 된 솔루션은 누구나 갖다 쓸 수 있고 그 안의 내용을 갖고 변형을 할 수 있습니다. 물론 오픈소스라고 해도 다 자기 마음대로 고치거나 할 수 있는 것은 아닙니다. 오픈소스도 요즘은 다양한 라이선스가 존재합니다. GPL, 아파치 라이선스, BSD 라이선스, MIT 라이선스 등 오픈소스에 관련된 라이선스도 꽤 많습니다. 라이선스의 내용에 따라 갖다 쓸 수는 있지만 패키징하거나 솔루션화 하는데 지켜야 할 법들이 존재합니다. 하지만 이렇게 라이선스로 제약을 걸었다고 하더라도 수많은 기업들이 오픈소스를 이용하여 자사의 서비스나 시스템을 만들고 사용자들에게 제공하고 있습니다. 솔루션이나 서비스 제공 회사들 중 요즘은 처음부터 자체적으로 만들어서 제공하는 회사는 그렇게 많지 않습니다. 많은 기업들이 오픈소스를 가져다가 서비스나 솔루션의 기반을 만들고 거기에 기능을 더해서 차별화를 두고 그것을 서비스나 솔루션화 합니다.
개발자들 사이에서는 예전부터 시작된 오픈소스 운동
오픈소스 운동은 개발자들 사이에서는 오래전부터 진행되어 왔습니다. 개발자들은 자기들이 만든 소스를 서로 공유하고 그 안에서 버그를 찾고 그 버그를 고쳐서 그것을 다시 공유함으로 서로의 소스의 품질을 높히는 작업을 지속적으로 해왔습니다. 개발자들이 보통 자기가 만든 소스에 대해서는 버그를 잘 찾지를 못합니다. 개선점을 찾기가 어렵지요. 그래서 그것을 다른 개발자에게 공개하고 자기가 아닌 다른 사람으로부터 버그를 찾고 개선점을 추천받는 작업을 합니다. 해외의 경우에는 이런 작업들이 많이 일반화 되었습니다. 시스템이 아닌 서비스를 제공하는 기업의 경우 플랫폼을 오픈소스로 된 것으로 만들고 거기에 자기들이 필요한 기능을 더하고 커스터마이징을 해서 서비스화 시켜서 제공합니다. 기반이 되는 기능은 오픈소스로 된 솔루션을 이용함으로 전세계의 수많은 개발자들로부터, 또 커뮤니티로부터 버그에 대한 버그픽스(BugFix, 버그를 수정한 내용)를 받아서 적용함으로 손쉽게 문제점을 해결합니다. 그리고 서비스는 그 기반 위에서 자기들이 별도로 만든 기능을 더해서 제공하는 방식을 많이 이용합니다. 그것이 UX가 되었건 아니면 특별한 어떤 기능이 되었건간에 그렇습니다.
한가지 예를 들면 이런 것입니다. 어느 회사에서 온라인 쇼핑몰을 만든다고 할 때 예전 같았으면 온라인 쇼핑몰이 되는 웹서버와 그 안에 필요한 다양한 CMS(컨텐츠 관리 시스템), 결제 시스템 등을 다 만들어야 했습니다. 하지만 요즘의 경우라면 웹서버에 들어가는 하드웨어는 어디 조립용 PC를 이용할 수도 있을 것이고 그 안에 들어가는 OS는 Linux를 쓸 것이며 DB는 MySQL을 쓰고 웹서버는 아파치를 사용할 것입니다. 그리고 CMS는 워드프레스를 사용하며 거기에 워드프레스용으로 나온 쇼핑몰용 플러그인을 사용할 것입니다. 쇼핑몰을 운영할 회사가 할 일은 어떤 식으로 쇼핑몰을 꾸밀 것인지 하는 디자인에 대한 작업과 어떤 것을 팔 것인지에 대한 컨텐츠만 만들면 됩니다. 서비스를 제공하는데 있어서 오픈소스를 이용하면 이렇게 간단하게 작업이 가능합니다.
오픈소스가 기업에 미치는 영향
오픈소스가 기업에 미치는 영향도 대단합니다. 앞서 개발자들 사이에서 먼저 시작된 오픈소스 이야기를 했는데 최근 많은 기업들은 자사의 솔루션을 오픈소스화 시키고 그 솔루션을 기반으로 하는 서비스를 제공하는 방식으로 회사의 수익모델을 취하고 있습니다. 앞서 쇼핑몰의 예도 그렇지만 어떤 시스템을 만드는데 있어서 예전같았으면 시스템을 구성하는 하드웨어와 그 안의 소프트웨어 모두를 만들어야 했지만 요즘에는 오픈소스를 이용해서 만들기 때문에 그렇게 하지 않습니다. 기반이 되는 소프트웨어 플랫폼(OS나 웹서버, CMS, 그 외의 플랫폼이 되는 소프트웨어 들)은 오픈소스를 가져다가 쓰고 그 플랫폼에 해당 회사가 필요한 기능을 만들어서 집어넣고 그것을 구동시키는 하드웨어는 직접 만들어서 파는 방식을 이용합니다. 결국 기업은 하드웨어와 회사가 따로 만든 기능에 대한 비용, 그리고 그 시스템을 유지보수하는 비용을 받는 것입니다. 물론 플랫폼도 직접 만들어서 함께 제공한다면 그만큼 해당 시스템에 더 높은 비용을 책정할 수 있고 수익도 더 많이 나오겠지만 그 플랫폼을 만드는데 들어가는 시간 및 인력 등의 비용과 그 플랫폼을 유지보수하는데 들어가는 비용 보다는 자사가 필요로 하는 기능에 집중해서 나오는 비용이 더 효과가 좋다는 것을 알기 때문에 기업들도 오픈소스를 적극 활용하는 추세입니다. 그리고 또 자사가 만든 플랫폼을 오픈소스화 시키는 경우도 있는데 앞서 얘기했듯 자기들이 만든 플랫폼에 대해서 버그나 개선사항을 도출하는데 있어서 자사 안에서 해결하는데는 한계가 있기 때문에 소스를 공개하여 전세계의 개발자들을 대상으로 오픈 테스트를 시키는 것으로 봐도 좋을 것입니다. 물론 소스를 오픈시켰기 때문에 다른 기업이 그 소스를 가져다가 사용할 수도 있습니다(이 부분 때문에 오픈소스에도 앞서 언급한 것처럼 다양한 라이선스 정책이 존재합니다). 하지만 가져다 쓴 기업은 그 소스를 그대로 상품화 할 수는 없습니다(라이선스 정책 때문도 있고 소스가 오픈되어 있기 때문에 다른 회사도 같은 방식으로 상품화할 것이며 경쟁이 그만큼 치열하기 때문에 쉽지 않은 부분입니다). 그 위에 기능을 얹어서 차별화시켜야 경쟁력이 생기기 때문에 해당 플랫폼에 그래도 가장 많이 아는 회사가 유리하다고 할 수 있습니다. 그래서 많은 기업들이 자사의 솔루션을 오픈소스화 시키고 그 위에 자사만의 기능을 더 얹어서 패키징하여 판매하는 방식을 이용합니다. 라이선스 정책으로 인해 오픈소스화 된 부분은 소스를 공개해야 하니 그 부분은 공개하지만 그 위에 얹어진 기능은 비공개로 진행이 가능하니, 또 그 솔루션을 기반으로 만들어진 서비스에 대해서는 유료 정책을 적용할 수 있으니 그렇게 서비스 사업모델을 만들어 진행하는 것입니다.
앞서 기업에 미치는 영향에 대해서 얘기했는데 기업의 이미지 개선 및 연계 솔루션의 매출 증대에도 영향을 미칠 수 있습니다. 최근 MS가 자사의 운영 플랫폼인 닷넷(.NET) 프레임워크를 오픈소스화 시켰습니다. 원래는 윈도(MS Windows)에만 운영되는 솔루션입니다. 윈도는 유료 OS이기 때문에 닷넷 프레임워크를 이용하려면 유료 OS인 윈도를 구입해야만 했습니다. 하지만 닷넷 프레임워크를 오픈소스화 시킨 후 많은 개발자들이 이 소스를 이용하여 오픈소스 OS인 리눅스(Linux)용으로 포팅(다른 시스템에 이식시키는 작업)을 진행하고 있습니다. 즉, 닷넷 프레임워크 위에 돌아가는 솔루션들이나 서비스들을 이제는 리눅스에서도 구동시킬 수 있게 된 것입니다. MS는 자사의 운영 플랫폼인 닷넷 프레임워크를 기존보다 더 많은 개발자들에게 제공할 수 있게 되었으며 기업들도 유료 OS인 윈도의 구입에 대한 압박을 받지 않고 무료 OS인 리눅스를 이용하여 닷넷 프레임워크로 개발하고 서비스를 제공할 수 있게 됨으로 비용 절감의 효과를 가져오기에 더 많은 기업들이 닷넷 프레임워크를 도입하게 됩니다. 이는 닷넷 프레임워크의 점유율이 올라가고 동시에 MS에 대한 이미지가 좋아진다는 의미며 그 이미지를 활용하여 더 많은 MS 제품들을 구입하고 이용할 수 있는 마케팅 효과를 가져오게 됩니다.
이렇듯 오픈소스 운동이 미치는 영향은 단순히 개발자들이 공개된 소스를 가져다가 쓸 수 있다는 것에 끝나지 않습니다. 개발자들은 자기들의 기술을 업그레이드 할 수 있는 기회가 되는 것이며 기업 입장에서는 좀 더 효율적인 시스템, 서비스, 솔루션 개발을 가져갈 수 있고 플랫폼을 만드는 기업이나 개발자 입장에서는 더 효과적인 유지보수가 가능하게 되며 이미지 개선 및 부가적으로 연계 서비스 및 솔루션 판매에 좋은 영향을 끼치는 등의 선순환적인 효과를 가져올 수 있다는 점에서 오픈소스 운동은 현재 전세계적으로 크게 일어나고 있다고 볼 수 있습니다.
깃의 대중화를 이끈 깃허브
오픈소스 소프트웨어 깃이란
앞서 얘기한 오픈소스를 체계적으로 관리하기 위해서는 소스 버전 관리 시스템을 이용합니다. 오픈소스 뿐만이 아니라 기업에서도 자사의 솔루션을 체계적으로 관리하기 위해 소스 버전 관리 시스템을 이용합니다. 이전에는 CVS를 많이 이용했고 요즘에는 SVN을 많이 이용합니다. 그 외에도 많은 소스 버전 관리 시스템이 존재합니다. 깃(Git)은 CVS, SVN과 같은 소스 버전 관리 시스템으로 오픈소스 OS인 리눅스의 소스를 관리하기 위해 리눅스 커널의 개발자이자 창시자인 리누즈 토발즈에 의해서 만들어진 분산 소스 버전 관리 시스템입니다.
리눅스의 창시자인 리누즈 토발즈는 리눅스 커널을 압축파일과 패치로만 관리를 해왔습니다. 그러다가 체계적인 소스 관리를 위해 2002년에 상용 소스 버전 관리 시스템인 BitKeeper를 이용하게 됩니다. 하지만 2005년에 리누스 토발즈와 BitKeeper의 관계는 틀어지게 됩니다. 오픈소스 OS인 리눅스의 커널 소스 관리를 상용 소스 버전 관리 시스템인 BitKeeper에 맡기다보니 개념 및 의견 충돌이 지속적으로 나왔던 것입니다. 결국 리누즈 토발즈는 BitKeeper의 사용 경험 및 교훈을 바탕으로 오픈소스에 적합한 소스 버전 관리 시스템을 만들게 되는데 빠른 속도와 단순한 구조, 비선형적 개발(동시다발적으로 수천개의 프로젝트를 관리할 수 있도록 브런치 생성)과 완벽한 분산, 대규모 프로젝트에 적합한 규모 등을 목표로 깃을 만들게 됩니다.
편리한 호스팅 서비스 깃허브
깃허브(GitHub)는 깃을 사용하는 웹 기반의 호스팅 서비스다. 즉, 웹 기반의 분산 소스 관리 시스템인데 그 소스 관리 시스템의 엔진을 깃을 사용한다는 것입니다. 깃허브는 루비 온 레일스(Rubi on Rails)를 기반으로 만들어졌으며 영리적인 솔루션 개발을 위한 프로젝트나 오픈소스 프로젝트에 상관없이 무료로 다 제공해주는 서비스입니다.
일반적으로 소스 버전 관리 시스템은 설치해서 사용하게 되는데 기업에서 CVS나 SVN을 이용할 때에도 PC든 서버든 하드웨어에 윈도(Windows)나 리눅스를 설치하고 그 위에 CVS나 SVN 서버 프로그램을 설치해서 사용하게 됩니다. 그러다보니 초기 구축 비용이 들어가게 되고 유지하는데 비용도 들어가게 됩니다. 하지만 오픈소스를 개발하는 커뮤니티 입장에서는 이런 관리 비용을 집행하기가 어려운 것이 사실입니다. 깃허브는 앞서 깃의 목표 중의 하나인 비선형적 개발 기능을 바탕으로 무료로 손쉽게 웹 기반으로 제공해주기 때문에 수많은 오픈소스가 깃허브를 통해 관리되기 시작하면서 오픈소스 진영에서 가장 인기있는 소스 버전 관리 호스팅 서비스로 자리잡게 됩니다. 특히 웹 기반으로 제공해주기 때문에 SVN이나 CVS처럼 따로 클라이언트를 설치해서 사용할 필요가 없이 웹브라우저만 있어도 관리 및 소스 다운로드가 가능하다는 점 때문에 더 인기를 끌게 됩니다(물론 깃허브도 깃허브 데스크탑이라는 클라이언트를 설치하게 되면 웹 화면을 거치지 않고 CVS나 SVN처럼 바로 소스를 수정하고 관리할 수 있습니다). 이제 깃허브는 오픈소스 프로젝트의 소스 관리 시스템의 대명사로 불리는 수준에 오게 됩니다.
깃허브의 특징 및 장점
깃허브가 다른 소스 버전 관리 시스템과 달리 인기를 끌 수 있었던 이유는 앞서 얘기했던 것처럼 무료 호스팅이라는 점과 웹 기반이라는 점이 한몫 했습니다. 하지만 그것만으로는 깃허브가 이렇게 인기를 끌지는 못했을 것입니다. 깃허브의 가장 큰 장점은 손쉬운 참여입니다. 특히나 Fork 기능을 통해 인기있는 깃허브의 오픈소스 프로젝트를 내 저장소로 끌어와서 손쉽게 소스를 다운로드 하거나 문제가 되는(이슈) 부분을 제기하고 혹은 수정해서 제시할 수 있다는 점이 오픈소스의 손쉬운 접근 및 대중화를 이끈 핵심 기능이라고 할 수 있습니다. 기존에는 오픈소스 프로젝트에 참여하기 위해 해당 커뮤니티에 가입하고 또 소스 수정을 위해 권한을 받아야 하는 등 여러가지 해야 할 작업들이 많았습니다. 즉, 참여하기가 어렵다는 불편한 점이 있었습니다. 하지만 깃허브에 있는 오픈소스 프로젝트들은 Fork 기능을 통해 누구나 해당 오픈소스 프로젝트에 참여할 수 있게 되었고 이슈를 제기하고 또 자신이 수정한 이슈 사항을 올려서 손쉽게 반영할 수 있게 함으로 누구나 오픈소스 프로젝트에 참여할 수 있도록 손쉬운 접근 방법을 제시해줬습니다. 오픈소스가 최근 활성화되고 또 규모가 커진 이유 중 하나가 바로 손쉬운 참여라고 할 수 있는데 깃허브는 그 공로자 중 하나라고 할 수 있을 듯 합니다.
초보자를 위한 깃허브 사용법
앞서 누구나 오픈소스 프로젝트에 참여하기 쉽다고 얘기했습니다. 그렇다면 한번 직접 오픈소스 프로젝트에 참여해보도록 합시다. 깃허브를 이용하는 방법 중 2가지가 있는데 하나는 깃허브에 본인이 직접 저장소(레파지토리)를 만들고 거기에 오픈소스 프로젝트를 만들어 등록하는 것입니다. 오픈소스 프로젝트가 아닌 개인이 그냥 재미삼아 만든 프로그램에 대한 소스 관리를 하고 싶다고 한다면 역시나 마찬가지로 저장소를 만들고 프로젝트를 생성하여 저장하면서 관리하면 됩니다. 이에 대한 방법은 깃허브의 Hello World(https://guides.github.com/activities/hello-world/)를 참고하시면 됩니다. 10분 정도만 그 글을 읽으면 손쉽게 깃허브에 저장소를 만들고 소스를 등록하는 방법을 알 수 있습니다.
또 하나의 방법은 앞서 깃허브의 특징 중 하나인 Fork 기능을 이용하여 이미 진행되고 있는 오픈소스 프로젝트를 내 저장소에 끌고와서 참여하는 방식입니다. 오늘은 이 방법에 대해서 설명을 해보고자 합니다. 처음에는 직접 저장소에 프로젝트를 만들어서 사용하는 것보다는 이미 잘 진행되고 있는 프로젝트를 가져와서 쓰는 것이 깃허브에 익숙해지는데 더 용이할 것으로 보여집니다.
- 깃허브(https://github.com)에 접속합니다. 그러면 아래와 같은 화면이 뜨게 될 것입니다.
깃허브에 이미 가입되어 있다면 Sign in으로 들어가서 로그인을 하시면 됩니다. 처음 방문하는 사람이라면 ID와 이메일, 패스워드를 입력하고 Sign up for GitHub를 눌러서 가입하면 됩니다.
- 처음 깃허브를 사용하는 사람이라면 당연히 저장소에 아무것도 없을 것입니다. 그러면 내가 원하는 기능이 있는 오픈소스 프로젝트를 찾아보도록 합시다.
Search GitHub에 들어가서 내가 원하는 기능에 대한 키워드를 입력한 후 찾도록 합니다. 내 경우에는 Json Parser를 찾아봤습니다.
- 검색 결과에 나오는 오픈소스 프로젝트들을 보고 내가 원하는 프로젝트에 들어갑니다. 내 경우에는 Ansi C로 만든 Json Parser가 필요했기 때문에 udp/json-parser를 선택했습니다.
- 해당 프로젝트에 들어가면 가장 먼저 보이는 것이 코드 목록입니다. 그리고 우측 상단에 3개의 아이콘이 보이는데 Watch, Star, Fork입니다. Watch는 해당 이슈에 대해서 늘 체크해보겠다는 의미이며 Star는 이른바 즐겨찾기를 해두겠다는 것입니다. 그리고 Fork는 앞서 설명한대로 내 저장소에 가져와서 보겠다는 것입니다.
Fork를 눌러서 내 저장소에 저장을 해둡니다. 참고로 Download ZIP을 누르면 해당 소스 전체를 ZIP 파일로 다운로드 받을 수 있으며 그 옆의 다운로드 버튼을 누르면 GitHub 데스크탑 어플리케이션을 통해 소스를 다운로드 받을 수 있습니다.
- Fork 이후에 깃허브 메인 화면에 가보게 되면 내 저장소에 Fork로 끌고 온 오픈소스 프로젝트가 보이게 됩니다. 해당 프로젝트에 들어가봅시다.
- 이전에는 해당 프로젝트의 화면이었지만 지금의 화면은 내 저장소에서 내가 관리하는 프로젝트에 끌고 온 오픈소스 프로젝트가 보여지는 화면입니다. 마치 내 프로젝트처럼 이슈를 관리할 수 있습니다. 물론 소스를 수정하고 반영하는 것도 가능합니다.
이렇게 손쉽게 오픈소스 프로젝트를 내 깃허브 저장소에 가져와서 관리할 수 있습니다. 이런 기능 덕분에 수많은 개발자들이 오픈소스 프로젝트에 참여하게 되고 규모가 커지면서 활성화되기 시작했습니다. 이 글을 읽는 많은 분들도 이렇게 손쉽게 깃허브를 이용함으로 오픈소스를 관리할 뿐만이 아니라 개인적으로 진행하는 프로젝트에 대한 관리를 체계적으로 진행해보는 것은 어떨까 하는 생각이 듭니다.
원문 : 오픈소스의 확산을 이끈 깃허브 이야기