페이스북을 자바나 C# 같은 빠른 언어로 다시 만드는 것이 가장 보편적인 방법이지만, 사이트의 복잡도와 개발 속도 때문에 극복하는 데 시간이 걸릴 것으로 보았습니다. 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)에 소스 코드가 올라올 예정이고, 위키와 메일링 리스트도 개설되었습니다. 아직 힙합이 기존 코드와 얼마나 호환성이 있는지, 속도 향상은 정확히 어느 정도인지 모르지만, 큰 무리가 없다면 바로슬닷컴에도 도입하고 싶군요.