2011년 2월 22일 화요일

페이스북 힙합

페이스북이 PHP 코드를 네이티브 바이너리로 바꾸는 컴파일러, '힙합'을 출시했습니다. 힙합은 오픈 소스 PHP 라이선스로 공개됩니다.

PHP 컴파일러 '힙합' 로고

PHP는 스크립트 언어이기 때문에 컴파일드 언어에 비해 수십 배 가량 느립니다. 그럼에도 스크립트 언어를 사용하는 이유는 개발 편의성과 비용 면에서 뛰어나기 때문이죠. 페이스북은 이 문제로 고민을 많이 했나 봅니다. 지난 2007년부터 여러 가지 방법을 시도해봤다는군요.

페이스북을 자바나 C# 같은 빠른 언어로 다시 만드는 것이 가장 보편적인 방법이지만, 사이트의 복잡도와 개발 속도 때문에 극복하는 데 시간이 걸릴 것으로 보았습니다. PHP의 젠드 엔진을 개조하고 패치를 보내기도 했지만, 필요한 만큼의 성능 향상을 이룰 수 없었습니다. 힙합은 이러한 문제를 해결하기 위해 페이스북이 꺼낸 카드입니다.

PHP 컴파일러 '힙합' 변환 과정

힙합은 PHP 코드를 C++ 코드로 바꿔주는 코드 변환기입니다. 변환된 코드는 C++ 컴파일러(g++)를 이용하여 네이티브 바이너리가 되죠. 즉, 중간 언어로 C++를 사용하는 컴파일러입니다. 이렇게 되면 PHP 코드를 PHP 인터프리터가 해석할 필요가 없어지기 때문에 빨라지죠.

이를 위해 힙합은 PHP와 C++의 간격을 줄이는 것을 목표로 합니다. PHP는 동적 타입 언어고, C++는 정적 타입 언어이기 때문이죠. 또한 프로그래머가 '쓸 법한' 코드를 C++로 그대로 옮김으로써 성능 향상을 꾀한다고 합니다. 예를 들어, if (...) {...} else {...} 를 쓰는 사람이 function foo($x) { include $x; } 를 쓰는 사람보다 훨씬 많은 것처럼요. 그래서 가능하면 함수와 변수에 대해 정적 바인딩을 사용합니다. 이를 위해 타입 추론도 쓰고요. 자주 안 쓰는 몇몇 기능은 희생되기도 하는데, eval()이 그렇습니다. 이건 PHP 인터프리터 없이 정적으로 결과를 내놓기가 매우 어렵지요.

페이스북에 따르면, 힙합의 최대 장점은 매우 투명하다는 것입니다. 즉 PHP를 기반으로 한 기존 개발 방식을 바꿀 필요가 없습니다. 또한 실험실에서만 머무는 프로젝트도 아니고, 이미 실제 산업에서 쓰이고 있습니다. 페이스북은 이미 6개월 전부터 상용 서버에 힙합을 적용했다고 합니다. 현재 페이스북 트래픽의 90% 이상을 힙합을 통해 제공하고 있다는군요.

힙합은 또한 웹 서버이기도 합니다. 아파치는 훌륭한 웹 서버지만, 아파치가 제공하는 모든 기능이 필요한 것은 아니라서 자체적으로 웹 서버를 만들었다는군요. 아쉽게도 힙합은 아직 아파치에서 돌아가지는 않는 것 같습니다. 하지만 힙합이 아파치에서 돌아가게 하는 오픈 소스 프로젝트가 생기기를 바란다는군요.

가장 기쁜 것은 이 모든 것이 오픈 소스 프로젝트라는 것입니다. 깃허브(GitHub)에 소스 코드가 올라올 예정이고, 위키메일링 리스트도 개설되었습니다. 아직 힙합이 기존 코드와 얼마나 호환성이 있는지, 속도 향상은 정확히 어느 정도인지 모르지만, 큰 무리가 없다면 바로슬닷컴에도 도입하고 싶군요.