주목해야 할 오픈소스 프로그래밍 툴 11선

InfoWorld

리누스 토발즈는 오픈소스가 사무실의 데스크톱을 지배하는 날은 절대 오지 않을 것이라 예언했다. 그러나 프로그래머들은 그의 예언을 과거의 우화로 바꾸어 놓았다.
 
오늘날의 오픈소스 모델(open source model)에서 가장 크게 주목받는 영역을 꼽으라면, 프로그래밍 툴(programming tool)이 될 것이다. 오픈소스는 상표 스택(proprietary stack)의 가장 깊숙한 곳에서도 발견되며, 종종 해당 영역을 지배하는 모습까지도 보여준다. 이유는 분명하다. 오픈소스 라이선스(open source license)는 사용자들이 자신들의 코드를 수정, 조작, 확장할 수 있도록 설계됐기 때문이다.

당신이 IT전문가가 아니라면, 아마도 코드를 작성하는데 익숙하지 않을 것이다. 그러나 프로그래머들은 자신들의 툴을 활용해 코드를 조작하는 방법을 이해하고 있다. 그리고 이처럼 ‘가려운 곳을 긁을' 줄 아는 개발자들의 열정은 비옥한 기술 생태계를 구축하는 자양분이 됐다. 여기 우리의 눈을 사로잡은 주요 오픈소스 툴에 관련한 매우 비 과학적인(그러나 충분히 다룰 가치가 있는,) 조사 결과를 소개한다. 여기 소개된 툴들은 대부분 최신의 것들이며, 나머지는 최신의 프로그래밍 트렌드를 지원하도록 자신들을 변화시켜 우리에게 놀라움을 선사한 것들이다. ciokr@idg.co.kr

로모바일 로즈(Rhomobile Rhodes) 루비(Ruby)는 기트허브(Github)에서 두 번째로 대중적인 언어일 것이다. 그러나 당신이 아이폰용 프로그램을 원한다면 이는 많은 도움이 되지 못할 것이다. 이들 플랫폼은 넥스트(NeXT)의 표준 프로그래밍 언어인 오브젝티브-C(Objective-C)를 선호하기 때문이다. 로모바일 로즈는 루비 웹사이트(website)들을 구성하고 이들을 아이폰 애플리케이션들 속에 집어넣는데 쓰이는 오픈소스 플랫폼이다. 원한다면 레이아웃을 다루는데 제이쿼리 모바일(jQuery Mobile)을 사용할 수도 있다. 이는 웹 앱(Web app)을 구성하는 과정과 유사하지만, 당신은 사용자들이 정교한 마우스 포인터(mouse pointer)가 아닌 두터운 손가락으로 이를 다룬다는 사실을 염두 해야 할 것이다.

지트(Git) 여전히 많은 개발자들이 CVS와 서브버전(Subversion)을 사용하고 있긴 하지만, 많은 프로젝트들이 지트로 옮겨가는 것은이 사실이다. 지트는 지배적인 중앙 저장소가 존재하지 않는 분산된 IT부서에서 뛰어난 성능을 보여주는 소스 통제 툴(source control tool)이다. 지트는 중앙 저장소에 거의 모든 요소를 복제해 보관하고, 확산 병합(proliferation merging)에 필요한 정교한 툴을 제공한다. 일반적으로 사용자들은 SVN이나 CVS를 활용해 센터 응답에 필요한 복제 파일을 확인한다. 그러나 지트 사용자들은 센터의 모든 권한을 부여 받아 독립형 저장소를 생성한다. 바꿔 말해, CVS를 봉건제 사회에 비유한다면, 지트는 민주주의 사회라 표현할 수 있을 것이다.

게리트(Gerrit) 대형 개발사들에서 진행되는 코드 리뷰의 유일한 귀결점은, 프로세스의 자동화를 구현하는 툴 개발일 것이다. 그렇다면 게리트의 정체는 무엇인가? 지트 및 리포(Repo)와의 긴밀한 협업을 위해 게리트는 코드 검사기들이 중앙 지트 저장소에 코멘트(comment)를 전송할 수 있도록 함으로써 코드 자체에 대해 상부에 논의하기 위한 대규모의 메타 레이어(meta layer)를 제작했다. 과거 이러한 논의들이 진행되는 지점은 헤더 코멘트(header comment)였다. 그러나 게리트는 코멘트를 전용 레이어로 분리해 미래의 리더(reader)들이 코드에 접속하기 전까지 과거의 변화 논의를 처리하지 않도록 함으로써 보다 정교한 논의를 가능케 했다.

하둡(Hadoop) 하둡은 하나의 작업을 여러 조각으로 분할하고 각각의 조각을 분리된 서버에서 처리한 뒤 다시 통합해 최종 결과물을 제작하는 과정을 지원하는 툴 킷(tool kit)이다. 이와 같은 아이디어를 주도적으로 이끈 것은 구글이었다. 그들은 이를 통해 방대한 규모의 서버들이 웹을 탐색하는 과정을 지휘하였다. 그리고 이제, 하둡은 이와 유사한 상황에 활용되는 기본 프레임(general framework)를 제공하고 있다. 하둡을 다른 코드와 결합하는 것은 특수한 문제를 관리하는 과정에 많은 파생 효과를 가져다 준다. 머하웃(Mahout)은 대용량 자료 내 패턴(pattern) 분석을 지원하는 확장성 기계 학습 프레임워크(scalable machine-learning framework) 다. 하이브(Hive)는 많은 양의 웹 로그(Web logs)를 다루는 대표적 방식인 하이브QL(HiveQL)을 활용한 병렬 검색을 통해 질문이 이루어질 수 있는 데이터웨어하우스(DW)를 제공한다.

제이쿼리(jQuery) 오늘날 많은 웹 개발자들은 순수 자바스크립트(JavaScript)를 이해하기에 앞서 제이쿼리를 공부한다. 그 이유는 DOM 조작 과정에서 보여지는 제이쿼리의 편리성과 효율성에 있을 것이다. 이의 성공에는 또한 수 많은 추종자들에 의해 제작된 플러그인(plug-in) 레이어의 기여가 있었다. 이들 플러그인은 웹사이트를 변화, 발전시켜 줄 창조적 툴들로 채워져 빠른 변화 속도를 보여주는 생태계를 구성하였고, 또한 상호 간의 다양한 결합을 통해 일관성 있는 디스플레이를 구현하는 데에도 널리 활용되고 있다. 여기에는 위젯(widget)과 조화를 이루는 더욱 많은 플러그인들이 존재한다. 예를 들어, 제이쿼리 모바일의 경우 스마트폰의 소형 액정에서도 뛰어난 구현성을 보여주는 애플리케이션 제작에 많은 도움을 주고 있다.

이클립스(Eclipse)와 이클립스 마켓플레이스(Eclipse Marketplace) 이클립스를 언급하지 않고 프로그래밍 툴에 관하여 논의하기는 어려울 것이다. IDE는 이미 확고한 자신들만의 영역을 확보하고 있지만, 플러그인들은 여기에 지속적으로 활기를 불어넣고 있다. 플러그인들은 시장의 모든 주요 실용 언어들을 위해 존재한다. 지속적인 플러그인 생태계의 지원에 힘입어, PHP나 루비, 파이썬(Python), 그리고 C모두는 IDE의 생태계 속에서 안정적으로 살아가고 있다. 그에 못지 않게 중요한 또 다른 요소는 이들 플러그인을 지원하는 (오픈소스를 주축으로 구성된) 정교한 생태계다. 이클립스 마켓플레이스는 사용자들이 그들이 필요로 하는 툴을 발견할 수 있도록 지원하는 사이트 중 하나이다. 이 사이트는 사용자들에게 단순히 어떤 플러그인이 가장 인기 있고 가장 많이 다운로드 됐는지에 관한 목록뿐 아니라 누가 특정 플러그인을 좋아하는지, 그리고 어떠한 플러그인들이 유사한, 혹은 반대되는 솔루션을 지원하는지 등의 정보를 제공하는 소셜 네트워킹 레이어를 포함하고 있다.

파이어버그(Firebug) 브라우저 내부에 직접 탑재돼 있는 툴을 활용하는 프로그래머가 늘어나고 있다. 이러한 경향을 주도한 것이 바로 파이어폭스의 플러그인 파이어버그다. 파이어버그는 풍족한 생태계를 구축하고 있다. 그들은 (매우 놀라운 방식으로) 파이어버그 자신을 확장시키는 플러그인들을 모아놓은 하위 카테고리를 갖추고 있기도 하다. 파이어파이썬(FirePython)을 예로 들면, 이는 브라우저 상에 실질적으로 존재하는 대신, 서버에 삽입되어 브라우저에 디버깅(debugging) 정보를 제공한다. 개발자 집단 내부에서 파이어버그가 보여주는 인기에 (어느 정도) 힘입어, 모든 주요 브라우저들은 이미지나 코드의 스크랩(scrap) 등의 상세 정보(보여지는 페이지를 채워주는 요소들)를 제공하기 시작했다. 이러한 방식의 접근은 안정적 브라우저의 증가 추세를 기회로 삼아 더욱 더 많은 소프트웨어가 작성될 경우 보다 일반적인 경향으로 자리잡게 될 것이다.

프리프로세서(Preprocessors) 많은 프로그래머들이 랭귀지 X(language X)의 배포와 신뢰도에 관심을 가지고 있지만, 그들은 신택스(syntax)의 장벽에 가로막히곤 한다. 이제 프리프로세서가 그 해결책을 제시한다. 프리프로세서는 당신이 작성하는 다른 무언가를 컴파일러(compiler)가 제어하기 전에 X로 변환시켜 줌으로써 당신이 랭귀지 X로 프로그램을 작성하는 과정을 지원한다. 커피스크립트(CoffeeScript)는 자바스크립트용 프리컴파일러처럼 보이지만, 사실 이는 풀 컴파일러(full compiler)이다. 이의 제작자는 “이 모든 당혹스런 중괄호와 세미콜론(semicolon) 아래에, 자바스크립트는 언제나 정말이지 굉장한 객체 모델을 지녀왔다. 커피스크립트는 자바스크립트가 지닌 긍정적 측면들을 이해하기 쉬운 방식으로 보여주기 위한 시도로 개발됐다”라고 설명했다. 이는 자바스크립트 작성을 파이썬의 그것과 유사한 방식으로 만들어준다. 스페이스 바(space bar)가 중괄호를 비롯한 여타 구두점의 역할을 수행하기 때문이다.

오픈비디아(OpenVidia) 지금까지 GPU(Graphics Processing Unit)은 전쟁터나 신화 속 세계를 구현하는 도구로만 인식돼왔다. 그러나 이와 같은 인식은 비디오 카드 제작자와 프로그래머들이 이들 칩을 코드 제작을 위한 초병렬 컴퓨터(massively parallel computer)로 인식하기 시작함에 따라 변화하고 있다. 과학자들은 그랜드 테프트 오토(Grand Theft Auto) 등의 게임을 구동하는데 쓰이는 그래픽 카드가 동시에 발생할 수 있는 수 많은 과학적 문제 상황들을 구조화함으로써 질병 치료 시뮬레이션을 구동하는 데에도 뛰어난 성능을 보여준다는 사실을 배워나가고 있다. 오픈비디아 저장소는 이미지 인식과 검색 등을 지원하는 프로젝트들로 채워져 있다. 이는 프로그래머들이 자신의 보스에게 값비싼 그래픽 카드 구매 승인을 받는 데에도 훌륭한 변명거리가 되어 줄 것이다.

NoSQL NoSQL 트렌드는 이미 몇 년 전부터 시작됐지만, 많은 웹사이트 사이에서 자신들의 미래는 오라클과 같은 진지한 데이터베이스가 제공하는 철두철미한 보안을 필요로 하지 않는 막대한 양의 데이터에 있다는 인식이 확산됨에 따라 그 성장세를 멈추지 않고 있다. 최근의 툴들은 NoSQL을 클라우드 안에 배치하는 과정을 좀더 간편하게 지원하고 있다. 아마존의 심플DB(SimpleDB)의 경우 바이트 당 지불이 가능하며, 다른 여러 기관들 역시 추가적 NoSQL 툴 서비스를 지원하고 있다. 예를 들어, 카산드라(Cassandra)는 데이터스텍스(DataStax)의 지원을 받고 있으며, 몽고DB(MongoDB)의 지원을 받고 있는 클라우드 호스트(cloud host) 역시 다수 존재한다. 이들 툴은 그 목록을 헤아릴 수 없을 정도로 확산될 것으로 전망된다.

콘텐츠 매니지먼트 시스템(Content management systems) 아직까지도 대부분의 프로그래머들은 텍스트를 작성하고 버튼을 눌러 코드를 편집하고 실행시킨다. 그러나 사용자들이 자신들이 구동하는 소프트웨어를 변경하는 것과 관련한 권한을 더욱 더 많이 부여 받게 됨에 따라, 이러한 경향은 조금씩 변화하고 있다. 드루팔 웹사이트(Drupal websites)를 예로 들면, 그들은 전통적인 모듈과 추가적으로 삽입된 코드를 혼합한다. 이러한 과정의 대다수는 시스템의 뒷단에서 이뤄지지만, 드루팔은 사용자들이 데이터 필드(data field)에서 PHP 코드를 삽입할 수 있도록 설계되어, 프로그래머들이 구동중인 코드 일부를 즉석에서 업데이트할 수 있도록 지원하고 있다. 일반적인 프로그래머들은 테스트 버전을 통해 이와 같은 과정을 진행하지만, 일부는 실제로 구동중인 코드를 업데이트하기도 한다. 그 작업이 많이 어렵지는 않기 때문이다. 물론 문제될 것은 없다!