2013년 8월 27일 화요일

2012년 분야별 최고의 오픈소스 소프트웨어 124선

2012년 분야별 최고의 오픈소스 소프트웨어 124선

Peter Wayner | InfoWorld

 
올해로 6회째를 맞는 '최고의 오픈소스 소프트웨어' 시상, 일명 '보시(Bossies) 2012' 선정 결과를 발표한다. 올해는 인포월드(InfoWorld)의 객원 기고가들과 함께 애플리케이션 개발 툴 등 총 7개 부문에서 100개 이상의 최고 소프트웨어를 선택했다. 특히 올해부터는 게임 부문이 신설됐다.
 
선정 분야가 늘어난 것처럼 전체 오픈소스 소프트웨어의 숫자도 많아졌다. 소스포지(Sourceforge)에 따르면 9월 중순 기준 400만회 이상의 다운로드가 이뤄졌고 3,402건의 개발 의뢰, 722개의 버그 개선 등이 진행됐다. 가장 인기 있는 것은 VLC 동영상 플레이어다. VLC는 다른 상용 플레이어와의 경쟁에서도 승승장구하고 있다. 오픈소스 코드 공유 서비스인 지트허브(GitHub)를 봐도 브라우저(jQuery)와 서버(Node)를 위한 자바스크립트 코드의 다운로드 횟수와 버그 개선 건수가 크게 증가하고 있음을 확인할 수 있다.
 
우리는 이렇게 왕성하게 개발되고 있는 소프트웨어 가운데 가장 흥미진진하고 스마트하며 유용한 오픈소스 소프트웨어를 골라냈다. '보시2012' 선정 결과를 보면 올해 오픈소스 분야의 주요 동향을 함께 이해할 수 있을 것이다.
 
하둡, 탭 댄스를 추며 태어난 코끼리
하둡(Hadoop) 기술을 활용한 일련의 소프트웨어들은 올해 모든 오픈소스 분야를 통틀어 가장 흥미로운 모습을 보여줬다. 기술적으로만 보면 하둡은 특정 문제를 해결하기 위해 수많은 장비를 동원, 막대한 양의 수치계산을 하는거대한  소프트웨어 스택(Stack)의 일부분에 지나지 않는다. 그러나 이미 우리가 알고 있는 것처럼 기업의 주요 임원들이 '하둡'이라는 단어를 캐치 프레이즈처럼 사용하고 있다. 이 때문에 구글 맵 리듀스(MapReduce) 프로그래밍 언어인 피그(Pig), 하둡의 데이터 웨어하우스 솔루션 하이브(Hive) 등 하둡 자체보다 더 유용한 프로그램들을 종종 간과하기도 한다.
 
하둡은 마치 빅 데이터의 표지 모델과 같다. 구글 맵 리듀스 기술에 기반한 소규모 실험으로 시작돼 노드(Node)로 이루어진 랙(Rack) 전반에 분포되어 있는 대규모 데이터 처리를 위한 코드의 집합체로 성장했다. 그 결과는 매우 성공적이어서 맵 리듀스 기술을 주도하고 있는 구글의 엔지니어들이 질투하고 있다는 소문까지 들린다. 구글은 맵 리듀스 프로젝트를 계속 수행하고 있지만 하둡의 오픈소스 특성상 다른 인터넷 기업들도 이를 도입해 빅 데이터라는 가장 어려운 문제를 풀 수 있게 됐다.
 
특히 하둡은 인터넷 업계에서 오랜기간 두각을 나타내지 못했던 야후에게 중요한 의미를 갖는다. 야후는 하둡 초기부터 그 성과에 기대를 걸고 상당한 지원을 제공해 왔다. 야후는 하둡의 성과를 모든 사람들과 공유했고 그들은 다시 그 모든 것을 공유해 완전히 새로운 소프트웨어 생태계를 구축했고 이것은 현재 업계에서 가장 획기적인 트렌드가 되고 있다. 오픈소스 지지자들이 하둡을 오픈소스 전략의 대승리라고 하는 것도 이 때문이다.
 
하둡 진영 내부에서는 오픈소스를 추구하는 쪽과 상용 소프트웨어를 추구하는 쪽 간의 갈등도 고조되고 있다. 많은 신생기업들이 오픈소스인 하둡을 이용해 창업을 한 후 단지 고객을 확보하기 위한 상업적인 노력만 기울이고 있다는 것이다. 호튼웍스(Hortonworks) 정도가 자사의 플랫폼 전체를 오픈소스 그대로 유지하려고 노력하고 있지만 성공 여부는 불투명하다. 한 경쟁업체는 "호튼웍스가 결국 플랫폼을 포기했으면 좋겠다"라고 말했다.
 
하지만 실용주의자들은 이런 긴장감이 새로운 기업들의 탄생을 촉진하는 창의적인 원동력이 되고 있다고 말한다. 하둡 개발 프로젝트 핵심은 '모두의 삶에 기여한다'는 단 하나의 목표를 충실히 따르고 있고 그 나머지는 모든 프로젝트를 운영하고 하둡의 핵심을 유지하는데 기여하고 있다. 프로그래머들은 보상을 받아야 하고 별도의 비밀 소스코드를 제공하는 것이야 말로 하둡 코어를 오픈소스로 두고 발전시키면서 유상 서비스를 정당화하는 가장 좋은 방법이다.
 
행과 데이터 관계성에서부터 키와 열까지
하둡과 관련 소프트웨어들이 단지 복잡한 대규모 데이터 문제를 처리하기 위해 존재하는 것은 아니다.  지난 수십년간 각종 다양한 형식의 데이터를 관계형DBMS(RDBMS)에 축적한 현재에 이르러서야 비로소 전통적인 데이터 저장소를 대신하는 다양한 오픈소스 소프트웨어들에 눈을 돌리고 있다.
 
이것들은 SQL 혹은 un-SQL이 아니라 NoSQL이라고 부르는데 신선할 만큼 간단한 것부터 놀랍토록 복잡한 것까지 다양하다. 이 중 많은 것들이 관계형 데이터베이스의 장점을 포기하는 대신 뛰어난 성능 혹은 수평적 확장성을 제공한다. 이러한 차이는 종종 특정 사용방식을 지원하기 위해 일부 기능을 포기하는 방식으로 개발된다.
 
예를 들어 카우치베이스(Couchbase)와 카산드라(Cassandra)와 같은 키값 저장소는 데이터 사이의 관계를 유지하는 것이 중요하지 않은 분야에서 뛰어난 성능과 높은 확장성을 제공한다. 이 둘은 하둡과 통합되고 반 구조화된 데이터용 웨어하우스로 훌륭하게 활용된다. 카산드라는 행 기반 솔루션을 제공하고 카우치베이스는 문서 데이터베이스로 발전하고 있지만 키와 값을 체계화하는 새로운 방식으로 인식되고 있다.
 
문서 데이터베이스는 그 값이 JSON(JavaScript Object Notation)인 키값 저장소일 뿐이다. 이것들은 객체지향 프로그래밍 방법론에 속하는 것이어서 개발자들이 선호한다. 또한 JSON 문서의 내부 요소를 색인으로 작성하면 검색 속도를 높일 수 있다. 이것들은 블로그 포스트나 환자기록 작성 등 관계형 데이터베이스에 저장하기 힘든 데이터들을 가공하지 않고 그대로 저장할 수 있는 방법이다. 몽고DB(MongoDB)가 인기 있는 것도 바로 이 때문이다.
 
이밖에도 기업 현장에서 부딪히는 다양한 문제를 해결하기 위한 프로젝트들이 진행되고 있다. 그래프 데이터베이스 Neo4j 등은 전통적인 DRBMS의 관계성이 느슨할 때 사용할 수 있다. 과거에는 각 설계자들이 필요에 따라 MySQL이나 오라클의 설정을 서로 다른 방법으로 수정했지만 지금은 설계자들이 완전히 다른 오픈소스 소프트웨어를 선택해 상요할 수 있다.
 
프라이빗 클라우드의 성장
이제는 퍼블릭 클라우드(Public Cloud, 불특정 다수 고객에게 무제한의 공유 자원을 제공하는 것) 서비스 업체들이 축적해 놓은 기술과 아키텍처를 차용해 프라이빗 클라우드(Private Cloud, 단일 기업에 한해 공유된 자원을 제공하는 것) 서비스용 데이터센터에 적용할 수 있으며 이를 위한 일련의 오픈소스 프로젝트들이 생겨나 관련 소프트웨어를 제공하고 있다.
 
특히 오픈스택(OpenStack) 프로젝트는 프라이빗 클라우드 분야에서 놀랄 정도의 세를 얻고 있다. 아파치2 라이센스 하에서 진행된 이 프로젝트는 신원 확인, 모니터링, 셀프 서비스 등의 기능과 함께 가상화된 컴퓨팅 파워와 스토리지, 네트워킹 자원을 관리할 수 있는 프레임워크를 제공한다.
 
지금은 '클라우드 운영체제'로 불리는 오픈스택은 본래 랙스페이스(Rackspace)와 나사(NASA)가 개발한 것이다. 현재는 캐노니컬(Canonical), 시스코, 델, HP, IBM, 레드햇, VM웨어를 비롯해 클라우드 분야의 신생업체 등 192개 이상의 기업이 이 프로젝트에 참여하고 있다. 그러나 그 결과물인 오픈스택은 리눅스 커널과 비교했을 때 일반적으로 다운로드해 현장에 적용할 수 있는 것과 차이가 크기 때문에 많은 기업들이 패키지화된 버전을 별도로 제공할 예정이다.
 
프라이빗 클라우드 시장에 진출한 것은 오픈스택만이 아니다. 가장 널리 알려진 것은 오픈스택의 경쟁자는 캘리포니아 대학(University of California)이 아마존 웹 서비스(AWS)를 모방해 개발한 유칼립투스(Eucalyptus)로 완벽한 API 호환성을 제공한다. 지난 4월 시트릭스가 서비스를 시작한  클라우드스택(CloudStack)도 클라우드 자원을 관리할 수 있는 멋진 웹 UI를 제공해 클라우드 서비스 제공업체들이 사용하기에 적절하다는 평가를 받고 있다.
 

올해가 가기 전에 반드시 배워야 할 6가지 IT 기술

올해가 가기 전에 반드시 배워야 할 6가지 IT 기술

Andrew C. Oliver | InfoWorld
기술은 빠르게 변한다. 그래서 자바 1.3 코드 편집이나 파워빌더(PowerBuilder)에만 집착하면 새로운 취업 기회를 잡기가 점점 어려워질 것이다. 그렇다면 어떤 기술을 배워야 할까? 자신의 경력을 계속 발전시키고 시장 수요에 맞춰 연봉을 높이려면 지금 제시하는 6가지 기술 정도는 알고 있어야 한다.

1. 하둡 : 신기술 시장의 지배자 
아직 하둡에 대해 잘 모르고 있다면 서둘러 하둡(Hadoop)에 통달해야 한다. 맵리듀스(MapReduce) 개념과 이용 방법도 알아야 한다. 하둡은 인기와 수요 등 모든 기준에서 신기술 시장을 지배하고 있다. 다른 기술을 배울 능력도 있을 수 있지만 하둡은 더 어렵다. 'Hello world' 이상을 터득하기 위해서는 더 많은 시간과 노력을 기울여야 한다. 가장 어려운 작업 중 하나는 스스로 공부를 할 간단한 주제를 찾는 것이다.

그러나 이조차도 그리 쉽지는 않다. 충분한 데이터를 확보하는 것도 마찬가지다. 위키피디아(Wikipedia)같이 인기는 있지만, 덩치가 커서 별 쓸모없는 데이터들이 있다. 어쩌면 이를 다른 것들과 결합해, 누가 누구를 '편집하는 것'을 좋아하는지 보여주는 일종의 소셜 그래프를 만드는 것도 방법이다. 호튼워크(Hortonwork)는 깃허브(GitHub)와 관련해 유사한 개념을 입증해 보였다.

일단 '손을 더럽히고 나면' 맵리듀스가 대답할 수 있는 다른 질문 결과를 화면에서 확인할 수 있게 될 것이다. 이 분야에는 호튼워크 같이 하둡에만 전문화된 회사에서 (VM웨어/EMC에서 분사한) 피보탈(Pivotal) 같이 여러 기술을 취급하는 업체, 자신들의 제품에 하둡을 도입하기 시작한 오라클(Oracle) 등 기존 업체까지 많은 기업이 있다. 이 가운데 어떤 회사도 성장 가능성은 무궁무진하다.

2. 몽고DB : 객체지향형 백 엔드의 출발점
하둡만큼 거대하지는 않지만 몽고DB(MongoDB) 또한 중요한 기술이다. 또 훨씬 배우기 쉽다. 몽고DB 같은 문서 데이터베이스는 대형 AJAX 애플리케이션이나 객체 지향형 백 엔드(Back ends)에 적합하다. 또 확장이 쉽다는 장점이 있다. 이런 부분에서 시도해 볼 기술은 여러 가지가 있다. 그러나 출발점은 몽고가 되어야 한다. 경력 관점에서 가장 유리한 기술이기 때문이다. 대다수 기업이 이 데이터베이스에 친숙한 상태이다. 몽고DB 개발사인 10젠(10gen)은 8,100만 달러에 달하는 활동 자금을 보유하고 있다.

3. 스칼라 : 병행성 높은 새 객체지향 프로그래밍 기법
동시(병행) 프로그래밍이 변하고 있다. 개발자로서 구축을 요청받는 애플리케이션 또한 마찬가지이다. 얼마 전까지만 해도 로우 레이턴시(저지연) 애플리케이션에는 C나 C++가 사용됐다. 그러나 지금은 자바가 많이 쓰이고 있다. 병행성이 높고 기능적으로 객체 지향적인 새로운 프로그래밍 기법은 스칼라(Scala)로 개발되는 경우가 많다. 이후 자바나 다른 인기 언어로 공개된다.

스칼라는 하나의 언어 또는 'syntactic candy' 이상이다. Akka와 Play 같은 아이디어와 라이브러리 생태계라 할 수 있다. 스칼라를 좋아하든 싫어하든, 스칼라가 포용하고 있는 아이디어를 이해할 필요가 없다. 스프링 프레임워크(Spring Framework) 창조자인 로드 존슨이 타이프세이프(Typesafe) 이사회에 합류했고, 2,000만 달러의 투자가 확보됐다. 이 역시 주목해야 할 부분이다.

4. Node.js : 이벤트 기반 논블로킹 시스템에 대한 이해
Node.js를 꼽기는 했지만 오해하지 말 것은 자바스크립트(JavaScript) 개발자가 되고 다른 모든 것을 포기하라고 종용하는 것이 아니다. Node.js 같은 이벤트 기반의 논블로킹 시스템과 서버에서 사용되는 자바스크립트 같은 역동적인 언어 하나를 터득해야 한다고 주장하는 것이다. 루비(Ruby)를 배울 수도 있다. 그러나 '이벤트 기반'과 '논블로킹'이라는 부분을 놓치게 된다.

Node.js에는 (싱글 스레드 등) 단점이 있다. 그러나 그보다 많은 장점이 있다. 마이크로소프트에서 클라우드비스(Cloudbees), VM웨어 등 많은 회사와 단체의 사람들이 Node.js를 이용해 개발하고 있다. (1억1,200만 달러 이상의 자본을 가진) Node.js의 개발사인 조이엔트(Joyent)는 Node.js의 상품화를 시도하고 있지 않다. 그러나 클라우드 상품은 Node.js 중심의 PaaS와 차별화가 되어 있다.

5. C/C++ 또는 어셈블리 : 컴퓨터를 이해하는 지름길
필자는 이를 어셈블리(Assembly), 또는 더 나아가 C로 남겨두지 않으려고 노력했다. 잡종인 하이브리드 사촌을 제거하는 것 또한 마찬가지이다 (리누스는 NSFW 주장에서 이것이 최상이라고 말했다). 표준 lib이나 STL, 기타 이런 종류를 통달할 필요는 없다. 그러나 컴퓨터의 작동 원리를 알아야만 한다. 메모리의 작동 원리, 컴파일러의 기능 등을 이해해야 한다는 의미이다.

필자는 수년간 MASM을 사용하지 않았다. 그러나 이때 배운 지식을 꾸준히 응용하고 있다. 기술이 더 높은 수준으로, 그리고 추상적으로 성장하면서, 더 기본적인 단계에서 이해하는 것이 확장성이 높은 고성능 시스템을 개발하거나 디버깅할 때 훨씬 유리하다. 루비 개발자에게 이와 관련된 지식을 요구하지는 않는다. 그러나 이에 대한 지식과 전문성이 있다면 바로 잡아야 할 문제를 더 잘 이해할 수 있다. 이런 방식으로 생각할 수 있는 사람은 시간이 지날수록 스스로에 대한 가치를 입증할 수 있게 될 것이다.

6. 깃 : 효과적인 개발을 위한 필수 툴
아직도 깃(Git)에 대해 알지 못하고, 깃허브(GitHub) 계정을 만들지 않았다면 많이 늦은 것이다. 이미 지난해에 이를 터득했어야 했다. 현재 업무에서 여전히 클리어케이스(ClearCase)를 이용하고 있다면, 아마 상당한 위험수당을 받고 있거나, 더 이상 클리어케이스를 사용할 수 없게 될 때 일을 그만둬야 할 것이다.

현재 수요가 있는 기술은 많다. 그러나 앞서 언급한 6가지 기술을 터득한다면 쉽게 일자리를 찾을 수 있을 뿐만 아니라 연봉도 늘어날 것이다.