php 고급

HipHop VM for PHP By Facebook

 HipHop VM이란?

HipHop VM은 PHP로 만들어진 에플리케이션을 구동시키는 가상머신이다. 알려진 바와 같이 페이스북은 PHP로 만들어졌다. PHP는 빠른 웹개발의 장점이 있지만, 경쟁 언어들에 비해서 느리다는 단점이 있었다. 페이스북에서는 이를 극복하기 위해서 HipHop VM을 만들었다. 높은 퍼포먼스를 내는 것을 목적으로 개발되고 있고, 페이스북의 엔지니어들이 주도적으로 개발하고 있다. 줄여서 hhvm이라고 부른다. 

홈페이지

hhvm은 아직 개발중이기 때문에 레퍼런스가 풍부하지 않다. 아래는 hhvm에 대한 정보를 얻을 수 있는 채널들이다.

동작방식

요청이 요구하는 파일을 찾으면 SQLite 데이터베이스를 조회해서 해당 파일이 컴파일 되었는지를 확인한다. 만약 컴파일 되어 있지 않다면 컴파일을 하고 실행한다. 컴파일 되어 있다면 컴파일된 캐쉬를 실행한다. 컴파일 과정에서 약간의 로드가 발생한다. hhvm은 이렇게 특정 파일에 대한 요청이 있을 때 한번 컴파일을 하고, 그 이후부터는 컴파일된 결과를 리턴하는데 이러한 방식을 Just In Time(JIT) 방식의 컴파일 기법이라고 한다. 자바가 이런식으로 동작한다.

설치방법

각 플랫폼 별로 설치하는 방법은 아래 URL을 참고하자. 필자는 우분투 12.10 버전을 기준으로 설치 방법을 동영상으로 만들었다. 

https://github.com/facebook/hiphop-php/wiki/_pages

작동

서버모드로 동작

hhvm을 동작시키는 방법은 아래의 링크를 참조하자. 

https://github.com/facebook/hiphop-php/wiki/Running-HipHop-VM

다음 명령으로 hello.php 파일을 만든다. 

echo -e "<?php\n echo \"Hello Hiphop-PHP\";\n?>" > hello.php

다음 명령을 실행하면 hhvm이 실행된다. hhvm은 hhvm 가상머신을 동작시키는 명령이고, -m은 hhvm을 서버모드로 동작시키라는 의미다. 마지막의 ./는 hhvm의 document root로 현재 디렉토리를 사용한다는 의미다. 

sudo ~/dev/hiphop-php/hphp/hhvm/hhvm -m server ./

만약  hhvm이 설치된 ip가 192.168.125.143이라면 아래와 같이 접근해서 hello.php 파일을 실행할 수 있다. 

http://192.168.125.143/hello.php 

데몬으로 동작

서버모드는 명령을 실행시키고 중지할 때까지만 지속된다. 이것은 테스트 용도로는 적합 하지만 실제 서비스를 할 때는 daemon으로 동작시켜야 한다. -m daemon을 이용해서 데몬으로 동작시킬 수 있다. 데몬으로 동작시킬 때는 설정 파일을 사용해야 하는데 적당한 디렉토리에 아래와 hhvm.hdf 라는 이름의 파일을 위치시키고 아래와 같이 실행한다. 

sudo ~/dev/hiphop-php/hphp/hhvm/hhvm -m daemon --config hhvm.hdf

다음은 hhvm.hdf 파일의 내용이고 설정파일에 대한 자세한 설명은 RunTime options를 참고한다. 아래 내용은 /var/www를 document root로 하고, 80번 포트에서 hhvm이 대기하고 있겠다는 의미다. Jit=true는 Just In Time 기법으로 컴파일을 하겠다는 뜻이다. 

Server {
  Port = 80
  SourceRoot = /var/www/
}
Eval {
  Jit = true
}
Log {
  Level = Error
  UseLogFile = true
  File = /var/log/hhvm/error.log
  Access {
    * {
      File = /var/log/hhvm/access.log
      Format = %h %l %u %t \"%r\" %>s %b
    }
  }
}

Wordpress 설치

http://www.hiphop-php.com/wp/

댓글

댓글 본문
작성자
비밀번호
  1. 고맙습니다.
  2. doyobu
    안녕하세요~ 지금 hiphop-PHP 에 대해서 좀 배워보고 싶은데 이해가 가질 않는 부분이 있어서 여쭤봐요
    파트 2/3 에서 /dev/hiphop/php 로 시작하시는데 원래 그래야 하나요?
    저는 hello.php 파일을 만들어도 hiphop-PHP 가 작동이 되질 않아서 뭐가 문제인지 모르겠어요
버전 관리
egoing
현재 버전
선택 버전
graphittie 자세히 보기