Windows Cache Extension
은 Windows 플랫폼에서 실행되는 애플리케이션의 속도를 향상시키는 데 사용되는 PHP 가속기(accelerator)다. PHP 엔진에서 Windows Cache Extension을 활성화하고 로드하면 애플리케이션은 코드를 수정하지 않고도 이 확장 기능을 활용할 수 있다.
Windows Cache Extension은 5가지 종류의 캐시를 포함한다. 각 캐시의 용도와 특징은 다음과 같다.
- PHP Opcode 캐시(PHP Opcode Cache) - PHP는 텍스트 및 PHP 명령을 포함하는 데이터의 입력 스트림을 읽고 주로 HTML 형식으로 데이터 스트림을 만들어 내는 스크립트 처리 엔진이다. 즉, 웹 서버에서 PHP엔진은 웹 클라이언트가 요청할 때마다 PHP 스크립트를 읽고, 파싱하고, 컴파일하고, 실행한다. 이렇게 읽고, 파싱하고, 컴파일하는 작업은 웹 서버의 CPU와 파일 시스템에 추가적인 부하를 줘서 PHP 웹 애플리케이션의 전반적인 성능에 영향을 미친다. PHP 바이트코드(opcode) 캐시를 사용하면 컴파일된 스크립트 바이트코드를 공유 메모리에 저장하므로 PHP 엔진은 이후 동일한 스크립트를 실행하는 데 이를 재사용할 수 있다.
- 파일 캐시(File Cache) - PHP opcode 캐시가 활성화되어 있어도 PHP 엔진은 파일 시스템에 있는 스크립트 파일에 접근해야 한다. PHP 스크립트가 원격의 UNC 파일 공유에 저장되면 파일 연산 시 심각한 성능 과부하가 발생한다. PHP용 Windows Cache Extension은 PHP 스크립트 파일의 내용을 공유 메모리에 저장하는 데 사용되는 파일 캐시를 포함하므로 PHP 엔진에서 수행하는 파일 시스템 연산의 양이 줄어든다.
- 파일 경로 변환 캐시(Resolve File Path Cache) - PHP 스크립트는 종종 상대 경로를 사용해서 파일을 포함하거나 연산 작업을 수행한다. 모든 파일 경로는 PHP 엔진에서 절대 경로로 정규화해야 한다. PHP 애플리케이션이 상대 경로로 여러 개의 PHP 파일에 접근하고 파일을 사용하면 상대 경로를 변환하는 작업 때문에 애플리케이션의 성능에 악영향을 줄 수 있다. PHP용 Windows Cache Extension은 파일의 절대 경로와 상대 경로 간 매핑 내용을 저장하는 파일 경로 변환 캐시를 제공하므로 PHP 엔진이 수행해야 할 경로 변환 작업의 부담을 덜어준다.
- 사용자 캐시(User Cache, 1.1.0 버전부터 사용 가능) - PHP 스크립트는 사용자 캐시 API를 사용해서 공유 메모리 캐시를 활용할 수 있다. PHP 객체와 변수는 사용자 캐시에 저장했다가 이후 요청 시 재사용할 수 있다. 사용자 캐시를 사용해서 PHP 스크립트의 성능을 향상시키고 여러 PHP 프로세스 간에 데이터를 공유할 수 있다.
- 세션 핸들러(Session Handler, 1.1.0 버전부터 사용 가능) - Wincache 세션 핸들러를 사용해서 PHP 세션 데이터를 공유 메모리 캐시에 저장할 수 있다. 그러면 세션 데이터를 읽고 쓰는 데 소요되는 파일 시스템 연산이 줄어들어, PHP 세션에 대용량 데이터가 저장되었을 때 성능을 향상시킬 수 있다.
Wincache를 설치 및 설정하려면 먼저 FastCGI를 사용해서 PHP가 IIS에서 동작하도록 설정해야 한다:
http://learn.iis.net/page.aspx/246/using-fastcgi-to-host-php-applications-on-iis/#Overview
중요: Wincache는 PHP의 Non Thread Safe 빌드에만 사용할 수 있다. 또한 PHP 5.4는 아직 Wincache에서 지원되지 않으므로 PHP 5.4 이전 버전을 다운로드해야 한다.
Wincache 설치 절차:
1. 다음 경로에서 wincache 확장 기능 설치 파일인 .dll을 다운로드한다: http://pecl.php.net/package/wincache이 확장 기능에는 두 가지 패키지가 있다.
PHP 5.2.X 버전용과 PHP 5.3.X 버전용이다. 자신이 설치한 PHP 버전에 적합한 패키지를 선택한다.
2. 다운로드한 패키지의 압축을 해제한다.
3. php_wincache.dll 파일을 PHP extensions 폴더로 복사한다. 보통 이 폴더를 "ext"라고 부르며, PHP 바이너리 파일과 같은 폴더에 있다. 예) C:Program FilesPHPext.
4. 텍스트 에디터를 사용해서 php.ini 파일을 연다. 이 파일은 보통 PHP 바이너리 파일과 같은 폴더에 있다. 예) C:Program FilesPHPphp.ini.
5. php.ini 파일의 끝에 extension = php_wincache.dll을 추가한 후 파일을 저장하고 닫는다.
6. PHP용 IIS 응용 프로그램 풀(IIS Application Pool)을 재생해서(IIS 서버 재시작) 설정 변경 내용을 적용한다. 확장 기능이 활성화되었는지 확인하기 위해 phpinfo.php라는 파일을 생성하고 파일 내용에 phpinfo() 함수를 호출하는 PHP 코드를 작성해 넣는다.
7. PHP를 사용하는 IIS 웹 사이트의 루트 폴더에 phpinfo.php 파일을 저장한 후 브라우저를 열어 'localhost/phpinfo.php'를 요청한다. 반환된 웹 페이지에서 wincache라고 된 섹션을 검색한다. 확장 기능이 제대로 활성화되었다면 phpinfo 출력에서 다음 그림과 같이 Wincache가 제공하는 설정 내용이 표시된다.
XE에서 Wincache를 사용하도록 설정하는 방법
XE(Xpress Engine)는 Wincache의 사용자 캐싱과 템플릿 캐싱을 지원한다.
단계:
1. XE를 설치한다. 설치 파일은 http://www.xpressengine.com/에서 다운로드한다. 다운로드한 파일의 압축을 해제해서 inetputwwwroot 폴더에 넣는다(예: C:inetpubwwwrootxe). 브라우저를 열고 'localhost/xe'로 가서 설치 절차에 따라 설치한다.
2. IIS를 사용하기 위해 URL Rewrite Module을 설치해야 한다. 설치 파일은 http://www.iis.net/download/urlrewrite에서 다운로드한다. 설치 완료 후 IIS Manager에 아래와 같이 URL rewrite 아이콘이 생겼는지 확인한다.
3. XE가 제대로 작동하도록 rewrite rule을 설정해야 한다. IIS Manager에서 웹 사이트 애플리케이션을 선택하고 URL Rewrite를 클릭한다.
IIS Manager 창의 오른쪽에 있는 Import Rules를 클릭한다. XE 설치 폴더에서 .htaccess 파일을 찾아 Import를 클릭한다. 다음과 같은 화면이 표시된다.
rules를 가져온 후 반드시 Apply를 클릭해야 한다.
4. XE 폴더는 IIS_IUSRS 사용자에 대해 모든 권한이 있어야 한다. XE 설치 폴더를 마우스 오른쪽 버튼으로 클릭하고 다음 그림과 같이 Properties > Security를 선택한다.
5. XE 설치 폴더, C:inetpubwwwrootxefilesconfig에서 텍스트 에디터를 사용해 db.config.php를 열고 PHP 코드에 아래 내용을 추가한다.
$db_info->use_object_cache = 'wincache';
$db_info->use_template_cache = 'wincache';