호스팅2009. 4. 1. 16:28

웹 개발 해야지, 하고 마음먹으신 후 해야할 일들을 나열해 볼까요?

PC에 윈도우는 깔려있다고 가정해보죠. IIS 웹서버, DBMS, .NET Framework, 개발툴 등을 별도의 사이트를 찾아다니면서 다운로드 받아서 설치하셔야 하는데, 쉽게 말해 번거롭죠. 시간도 많이 걸리고.
결국 microsoft.com, download 사이트, codeplex.com 등 여기 저기 찾으셨어야 하죠.

마이크로소프트 웹 플랫폼 설치기 2.0 하나면 이런 고민이 다 해결됩니다.
Web Platform Installer 2.0
http://www.microsoft.com/web/downloads/platform.aspx


위의 설치기를 이용하면 PHP 커뮤니티 버전 (5.2.9-1) 역시 함께 설치 됩니다.

  • Internet Information Services (IIS) 5.1 on Windows XP SP3
  • IIS 6.0 on Windows Server 2003 SP2
  • IIS 7.0 on Windows Vista SP1 and Windows Server 2008
  • SQL Server 2008 Express
  • .NET Framework 3.5 SP1
  • Visual Web Developer 2008 Express Edition
  • Various IIS Extensions
  • ASP.NET and features such as ASP.NET MVC
  • Silverlight Tools for Visual Studio

이런 웹 플랫폼 위에서 구동되는 다양한 애플리케이션들을 사용하실 수 있습니다.
http://www.microsoft.com/web/gallery/Categories.aspx
바로 위의 링크를 클릭하시면 찾아 보실 수 있죠.

제로보드, TextCube 등 우리나라에서 인기있는 애플리케이션은 어디 있냐고요?
http://www.windowslovephp.co.kr 에 가시면 매뉴얼을 확인하실 수 있습니다.
PHP on Windows, ASP, ASP.NET on Windows가 이제는 모두 가능하게 된거죠.

Posted by 조이트리
아키텍트2009. 3. 23. 19:33

지난 주 마이크로소프트의 Mix09 행사에서 Windows Azure 클라우드 플랫폼 관련하여 의미 있는 발표가 있었습니다.
첫째, PHP 애플리케이션 개발 지원
둘째, Native 코드와 Full Trust 기능 추가

Windows Azure는 클라우드 상의 운영체제라고 말씀 드렸었죠? 처음 발표 때는 .NET만 가능했지만, 이번에 PHP, 다음에는 Ruby, Java 등이 추가될 것으로 예상됩니다.
IIS7의 FastCGI 기능을 통해 PHP on Windows가 최적화 된 것처럼 Azure위의 PHP도 FastCGI가 지원되고, 스트레스 테스트가 완료된 상태입니다. 현재 보유하고 계신 PHP 기술과 애플리케이션을 Windows Azure위에 올려보시는 것 어떠세요? 나중에 글로벌 서비스가 가능해지면 막대한 비용을 버실 수도 있습니다. 우리나라 뿐 아닌 이웃 나라, 아니 먼 나라에 있는 고객에게 까지 다 서비스가 가능해지기 때문이죠.

Posted by 조이트리
아키텍트2009. 3. 2. 16:27

http://www.windowslovephp.co.kr/

Windows Server와 PHP가 궁합이 잘 맞는다고 전에 글을 올렸었는데요, 그 확실한 증거가 생겼습니다.
대한민국을 대표하는 오픈소스 프로젝트 & PHP 소프트웨어인 Zeroboard XE와 Textcube가 Windows Server 2008을 공식 지원합니다.

친절한 설치 가이드도 제공됩니다. 위의 사이트에 가셔서 구성 가이드, 필요한 소프트웨어를 다운 받으세요.
또한, 천생연분 이벤트를 클릭하시면 Best Story상에는 ASUS 미니노트북 등의 경품 이외에 Story를 올린 선착순 100분에게 무조건 버거킹 주니어 와퍼 세트를 쏩니다.

내용을 보시고, 참여해보세요.

Posted by 조이트리
호스팅2009. 1. 29. 17:07

2주에 한 번씩 위와 같은 Training을 진행하고 있습니다. 호스팅 비즈니스도 변화의 시기가 왔습니다. 웹호스팅,
서버호스팅  외에 애플리케이션 호스팅 등의 영역이 추가되었습니다. 누가 먼저 선점하는지 지켜봐야 할 것 같습니다. 

오늘 진행한 세미나에서는 Windows Server 2008 + IIS7 + PHP + MySQL 환경에서 구동되는 www.zconvert.com 사이트를 소개해 드렸습니다. 이 사이트는 Windows Server 2008의 가상화, Hyper-V 기반위에서 구동되고 있는데 사이트 속도를 보시면 굉장히 빠른 것을 보실 수 있습니다.
PHP on Windows가 좋은 궁합이라는 것을 보여주는 사례라고 할 수 있죠. 

또한, 많은 분들이 잘 모르고 계시는 대역폭을 절감할 수 있는 IIS7의 Bit Rate Throttling 을 통한 비용절감 방안, 애플리케이션 호스팅의 가능성 및 최초 적용 솔루션으로 Dynamics CRM에 대한 소개 등의 시간을 가졌습니다. 
이후에 일정이 잡히면 공지하도록 하겠습니다. 많은 참여 부탁 드립니다. 


Posted by 조이트리
호스팅2008. 11. 25. 11:38

웹 사이트 개발을 시작하려고 할 때 뭐가 필요할까요? 개발도구, 프레임웍, 데이터베이스, 웹서버 등이 있어야 합니다.
이런 다양한 도구들을 사용하려면, 해당 파일이 있는 곳을 찾아서 다운로드, 설치, 셋팅하는 과정을 거쳐야 합니다.
무척 번거롭고 시간이 소요되는 작업입니다. 라이선스까지 필요하다면 더욱 복잡해지죠.

여기서 잠깐! 마이크로소프트의 무료 개발도구, 데이터베이스가 있다는 사실, 설마 아직도 모르시는 건 아니겠죠?
Visual Web Developer 2008 Express SP1, SQL Server 2008 Express Edition이 바로 그 주인공이죠.
물론 Visual Web Developer 2005 Express, SQL Server 2005 Express Edition도 있습니다.
여기에 .NET Framework 3.5 SP1, IIS6.0 이나 IIS7.0이 있다면 웹 개발이 바로 가능해집니다.
ASP.NET만 쓸 수 있는 것 아니냐고요? 천만예요. IIS6.0에는 장착이 필요하지만, IIS7.0에는 이미 내장된 FastCGI 모듈을
사용하면 PHP를 최고의 성능과 안정성을 제공 받으며 개발할 수 있습니다.

그런데, 앞에서 언급했 듯 각각의 도구를 개별적으로 다운, 설치하려면 불편하다는 겁니다.
이런 개발자들의 고민을 단번에 해결해드리는 "마이크로소프트 무료 웹 플랫폼 설치기"가 나왔습니다.
이 설치기를 이용하시면 위에서 언급한 개발에 필요한 모든 도구들을 한 번에 다운받아, 설치할 수 있게 됩니다.

위의 링크에서 Install Now (지금 설치하기)를 누르시면 됩니다. (현재까지는 Release Candidate 버전입니다)
이후의 과정은 "Your Choice"를 선택하신 후 원하는 도구, 프레임웍, 기능들을 선택하신 후 진행하시면
원하는 도구가 다운로드, 설치되는 지 확인하시면 모든 준비가 완료됩니다.


Posted by 조이트리
아키텍트2008. 9. 22. 21:57

PHP Fest 2008

PHP Fest는 PHP 기술을 공유하고 PHP를 즐기기 위한 행사입니다.

오는 9월 28(일)에 첫 번째로 열리는 이번 PHP Fest 는 “PHP 보안과 미래”이라는 주제로 진행됩니다. PHP 개발환경, .Net과의 접목, 프래임웍을 이용한 RAD 등을 공유합니다. 특별히 이번 행사에는 PHP 개발자이자 보안패치 Suhosin 으로 유명한 Stefan Esser 씨의 특별 강연이 준비되어 있습니다.

PHPFest는 앞으로 매년 개최될 계획이며 누구나 참가하여 자신의 기술을 공개하고 나누며 즐기는 공유의 장으로 만들어 나갈 것입니다. PHP Fest가 PHP 개발자에게는 더없이 좋은 행사가 될 것이라 약속 드리며 여러분의 많은 기대와 관심 그리고 참여를 부탁드립니다.

감사합니다.

2008년 9월 28일(일) 한국마이크로소프트 본사

행사일정

시간 (분) 주제 발표자
12:30 - 13:00 (30) 행사 시작 PHPKorea
13:00 - 14:00 (60) 이클립스에서 PHP 개발방법 용영환 (NHN)
14:00 - 14:15 (15) 쉬는 시간
14:15 - 15:15 (60) 함께해요 PHP 신현석,김영욱 (한국마이크로소프트)
15:15 - 15:30 (15) 쉬는 시간
15:30 - 16:30 (60) CakePHP, 실무에 적용하는 가장 쉬운 방법 이삼구 (팔글닷컴)
16:30 - 16:45 (15) 쉬는 시간
16:45 - 18:00 (60) PHP 어플리케이션 보안 Stefan Esser (Hardened-PHP)
18:00 - 18:30 (30) 경품 추첨
18:30 - 19:00   행사 종료 및 다과

발표 내용

이클립스에서 PHP 개발 방법 ( 13:00 - 14:00 )

이클립스는 PHP 개발을 위한 최적의 개발 환경을 마련해 준다. 때문에 이클립스를 통해 PHP 프로그램을 개발하는 경우 생산성을 크게 향상시킬 수 있고 품질도 높힐 수 있다. 이클립스를 통해 PHP 코드를 작성하고 디버깅하고 프로파일링 하는 방법을 설명한다.

용영환 프로그래머의 장점은 자신이 원한다면 무엇이든 만들 수 있는 가능성이라 생각하며 즐기는 프로그래밍을 추구하고 있다. 위키협업, PHPeclipse, Delphi for PHP 등 월간 마이크로소프트웨어 등에 다수 기고를 하였으며 현재 NHN에서 일하고 있다.

함께해요 PHP ( 14:15 - 15:15 )

PHP기반의 웹 사이트에서 마이크로소프트의 RIA(Rich Internet Application)인 Silverlight2를 사용해서 화려하고 정교한 기능을 개발하는 방법과 Windows Server 2008에서 PHP와 ASP.NET을 동시에 호스팅하는 방법을 소개합니다.

또한 새로운 Windows Server 2008 서버의 IIS7 웹서버를 통해 단일 환경에서 Zend사와 공동으로 개발한 FastCGI를 통해 최적의 성능으로 PHP, ASP, ASP.NET 등의 다양한 언어를 운영할 수 있는 방법 소개합니다.

신현석 Web Platform Architect Evangelist, 한국 마이크로소프트 개발자 및 플랫폼 사업총괄에서 인프라스트럭처 아키텍트 전도사로 활동 중. 그린 컴퓨팅을 통한 환경보호 및 전력 절감 등의 지속 가능한 IT, 오픈소스 진영과의 상호운영성, 소프트웨어 플러스 서비스 등을 중점적으로 활동 중 Software as a Service, 클라우드 컴퓨팅 등의 새로운 기술에 대한 개념 전파 및 인프라 구조 전파 등.
김영욱 Enterprise Developer Evangelist, 국내 유수의 대기업 프로젝트에 참여했던 풍부한 경험과 Microsoft MVP로 다양한 활동을 바탕으로 국내 최고의 UX전문가로 자리매김 하고 있으며 현재 한국 마이크로소프트에서 개발자 전도사로 활동 중.

CakePHP, 실무에 적용하는 가장 쉬운 방법 ( 15:30 - 16:30 )

루비 온 레일즈로 인한 고속 개발 프레임웍(Rapid Development Framework)은 이미 세계적인 테마가 되고 있고, PHP에서는 CakePHP가 점유율 면에서 선두를 달리고 있으며, 양질의 코드가 인터넷에 공개되고 있다. 이 섹션에서는 CakePHP를 사용하는 이유와 그 방법에 대한 전반적인 내용을 다루고, 약 1년 동안 실무에 적용하면서 생긴 문제점과 해결 방법 등을 설명한다.

이삼구 개발 기간 대비 효율이 높은 개발 방법론에 심취해 있으며, 현 회사에서 CakePHP 기반으로 트라이블2를 개발하고 있으며, www.fastcode.net을 통해 경험을 공유하고 있다.

인터넷 마케팅과 로그 분석(Google Analytics)에 대한 컨설팅을 제공하는 이삼구 컴퍼니를 운영하고 있다. PC사랑, 전자신문 이버즈의 컬럼리스트로 활동했고, 3년간 "팔글-인사이드 구글" 이외에 세개의 블로그를 운영 중에 있다.

PHP 어플리케이션 보안 ( 16:45 - 17:45 )

웹 서버를 통해 불특정 다수에게 공개돼 구동되는 PHP 프로그램의 특성상 개발자의 작은 실수가 개인정보 유출 등 치명적인 보안 사고로 이어질 수 있다. 이러한 보안 문제를 야기할 수 있는 PHP 코드의 예를 살펴보고 해결 방안을 제시한다.

Stefan Esser PHP 보안 분야 세계 최고 권위자 중 한명이다. 5년 전부터 PHP 커미터로 활동하고 있으며 2006년 말까지 PHP.net 의 보안팀 멤버로 활동했다. 현재는 Hardened-PHP Project 팀을 이끌며 PHP 보안패치인 suhosin 을 개발하여 배포하고 있으며 PHP 보안에 관련된 집필 활동을 하고 있고 있다.
Security Focus 인터뷰 기사 | http://www.securityfocus.com/columnists/432

참가신청

  • 참가 대상 : PHP 에 관심이 있는 개발자, 학생, 일반일
  • 참가 인원 : 130명 ( 참가 신청이 조기에 마감될 수 있습니다. )
  • 신청 기간 : 2008년 9월 16일부터 참가 신청 마감까지
  • 신청 방법 : PHPKorea 포럼에 가입 후 PHP Fest 2008 참가 신청 안내 공지사항에 댓글을 남겨주세요.
    • 추후 참가 신청 확인 메일이 보내질 수 있으므로 정확하게 적어주세요.
    • 이메일은 공개되지 않습니다.
감사합니다.
Posted by 조이트리
마케팅2008. 7. 27. 16:57
몇 가지 고려사항이 있습니다.

첫째, PHP 웹사이트의 보안을 위해 다른 사이트와 격리 시켜야 합니다.
 . 웹사이트 마다 어플리케이션 풀을 각자 할당
 . 어플리케이션 풀 아이덴티티에 사용자 계정 사용
 . 어플리케이션 풀 아이덴티티를 사용하기 위해 Anonymous 사용자 설정
 . FastCGI의 impersonation 설정 확인 (fastcgi.impersonate = 1)

둘째, PHP 프로세스를 재활용 하세요
 . 네이티브 PHP 리사이클링이 시작되기 전에, php-cgi.exe가 항상 리사이클 되도록 하는 것이 좋습니다.
   FastCGI의 프로세스 리사이클링은 instanceMaxRequests라는 파라미터에 의해 결정됩니다.
   리사이클 되기 전에 몇개의 FastCGI 프로세스를 처리할 것인지를 설정하는 역할을 하죠. 이 파라미터 이외에도
   PHP 자체적으로 프로세스 리사이클링을 담당하는 파라미터가 있는데, PHP_FCGI_MAX_REQUESTS가 바로
   그거죠. instanceMaxRequest 값을 PHP_FCGI_MAX_REQUESTS 값보다 작거나 같게 하면 PHP의 네이티브
   리사이클링은 절대 발생하지 않겠죠? 아래와 같이 설정하면 됩니다.

C:\>%windir%\system32\inetsrv\appcmd set config -section:system.webServer/fastCgi /[fullPath='c:\{php_folder}\php-cgi.exe'].instanceMaxRequests:10000

C:\>%windir%\system32\inetsrv\appcmd set config -section:system.webServer/fastCgi /+[fullPath='c:\{php_folder}\php-cgi.exe'].environmentVariables.[name=’PHP_FCGI_MAX_REQUESTS’, value='10000']

※ 미리 값을 설정하지 않으면 기본 설정값은 instanceMaxRequest=200, PHP_FCGI_MAX_REQUESTS=500 으로 할당됩니다.

셋째, PHP의 버전
 . PHP 어플리케이션은 주로 특정 버전의 PHP의 기능 및 특징을 이용하여 개발되죠. 웹호스팅 환경에서, 또는 기업에서 사용하는 PHP 어플리케이션이 다양한 버전의 PHP를 사용한다면, 한대의 서버에서 여러개의 PHP를 지원하는 것은 필수겠지요. IIS7의 FastCGI 핸들러는 여러 버전의 PHP를 지원합니다. PHP4.4.8, PHP5.2.1, PHP5.2.5 non thread-safe 버전이 모두 필요하다면 PHP컴파일러를 파일 시스템에 각각 다운 받아야 합니다. (c:\php4.4.8, c:\php5.2.1, c:\php525nts)를 설치한 후 각 버전의 어플리케이션 풀을 생성합니다.

C:\>%windir%\system32\inetsrv\appcmd set config /section:system.webServer/fastCGI /+[fullPath='c:\php448\php.exe']

C:\>%windir%\system32\inetsrv\appcmd set config /section:system.webServer/fastCGI /+[fullPath='c:\php521\php-cgi.exe']

C:\>%windir%\system32\inetsrv\appcmd set config /section:system.webServer/fastCGI /+[fullPath='c:\php525nts\php-cgi.exe']

site1, site2, site3의 3개의 웹사이트가 있고 각 사이트가 별도의 버전 PHP를 사용한다면 아래와 같이 설정할 수 있을 겁니다.

C:\>%windir%\system32\inetsrv\appcmd set config site1 –section:system.webServer/handlers /+”..[name=’PHP448_via_FastCGI’,path=’*.php’,verb=’*’,modules=’FastCgiModule’,scriptProcessor=’c:\php448\php.exe’,resourceType=’Either’]

C:\>%windir%\system32\inetsrv\appcmd set config site2 –section:system.webServer/handlers /+”..[name=’PHP521_via_FastCGI’,path=’*.php’,verb=’*’,modules=’FastCgiModule’,scriptProcessor=’c:\php521\php-cgi.exe’,resourceType=’Either’]

C:\>%windir%\system32\inetsrv\appcmd set config site3 –section:system.webServer/handlers /+”..[name=’PHP525nts_via_FastCGI’,path=’*.php’,verb=’*’,modules=’FastCgiModule’,scriptProcessor=’c:\php525nts\php-cgi.exe’,resourceType=’Either’]

넷째, PHP 보안강화를 위한 추천 항목
  1. Disable remote URL's for file handling functions:
    • Set allow_url_fopen=Off
    • Set allow_url_include=Off
  2. Disable register_globals:
    • register_globals=Off
  3. Restrict where PHP can read and write on a file system, e.g.:
    • open_basedir="c:\inetpub\"
  4. Disable safe mode:
    • safe_mode=Off
    • safe_mode_gid=Off
  5. Limit script execution time:
    • max_execution_time=30
    • max_input_time=60
  6. Limit memory usage and file sizes:
    • memory_limit=16M
    • upload_max_filesize=2M
    • post_max_size=8M
    • max_input_nesting_levels=64
  7. Configure error messages and logging:
    • display_errors=Off
    • log_errors=On
    • error_log="C:\path\of\your\choice"
  8. Hide presence of PHP:
    • expose_php=Off

감사합니다.



Posted by 조이트리
호스팅2008. 7. 2. 14:57

앞의 글에서 PHP 관련하여 적어보았습니다. FastCGI 설정하는 법과 PHP를 설정하는 법을 살펴보겠습니다.
서버관리자 - 롤 서비스에서 CGI를 선택하세요. CGI와 FastCGI 서비스를 모두 설치합니다.


이제 PHP 엔진이 필요하죠. http://www.php.net/downloads.php를 클릭하셔서 non-Thread safe 버전의 PHP를 다운 받으세요. non-Thread safe와 FastCGI를 함께 사용하셔야 최적의 성능을 보장받을 수 있습니다. Thread safety check를 할 필요가 없기에 시간이 단축되는 것이죠.

1. 파일을 압축해제하세요. C:\PHP 디렉토리를 만드시는 것이 좋습니다. 또한, php.ini-recommended를 php.ini로 파일명을 바꾸세요
2. php.ini 파일을 오픈 한 후 몇 가지 파라미터의 주석을 해제하세요.
    - fastcgi.impersonate = 1
    - cgi.fix_pathinfo = 1
    - cgi.force_redirect = 0
    - open_basedir 설정 (웹 사이트 컨텐츠가 있는 폴더나 네트웍 경로)
3. PHP가 제대로 설치되었는지 확인을 위해 명령문에 아래와 같이 입력
    C:\PHP> php -info

IIS가 PHP 어플리케이션을 처리하기 위해 처리기 매핑(Handler Mapping)을 설정해야 합니다. 주요 목적은 PHP 파일의 요청을 FastCGI를 통해 PHP 엔진으로 보내는 것입니다.




요청 Path: *.php
모듈: FastCGIModule
실행파일: C:\php-cgi.exe
이름: PHP via FastCGi (원하는데로 설정)

대화상자에서 OK를 선택하시면 됩니다.

이후에 c:\inetpub\wwwroot 폴더에 phpinfo.php 파일을 하나 생성합니다.
내용: <?php phpinfo(); ?>

브라우저를 연다음 http://localhost/phpinfo.php를 입력하면 설정이 제대로 되었다면 php에 대한 정보를 보여주는 화면이 나옵니다.

이제 다 끝났습니다. 마지막으로 PHP와 FastCGI 리사이클링을 위한 설정을 해보죠
FastCGI는 native PHP 리사이클링이 이루어지기 전에 php-cgi.exe 프로세스들을 리사이클링 시킵니다. 바로 이 리사이클링은 설정 프로퍼티, instanceMaxRequests에 의해 조절됩니다. 이 값은 FastCGI가 리사이클링 되기 전에 몇개의 요청을 처리할 것인지를 정하는 것이죠. PHP 역시 비슷한 설정값을 가지고 있는데, PHP_FCGI_MAX_REQUESTS가 바로 그것입니다. 만약 instanceMaxRequests의 값을 PHP_FCGI_MAX_REQUESTS의 값보다 작거나 같게 설정하면 PHP의 리사이클은 절대 발생하지 않을 것입니다.
만약, 파라미터 값이 설정되지 않으면 디폴트 값을 사용하게 됩니다.
instanceMaxRequests: 200, PHP_FCGI_MAX_REQUESTS: 500 (대부분의 PHP 빌드에서)

파라미터 값을 설정하려면 아래와 같은 명령문을 사용하시면 됩니다.
c:\>%windir%\system32\inersrv\appcmd set config -section:system.webServer/fastCGI /[fullPath='c:\{php_folder}\php-cgi.exe'].instanceMaxRequests:10000

c:\>%windir%\system32\inersrv\appcmd set config -section:system.webServer/fastCGI /
[fullPath='c:\{php_folder}\php-cgi.exe'].environmentVariables.[name='PHP_FCGI_MAX_REQUESTS',value='10000']

www.iis.net에서 참조

Posted by 조이트리
호스팅2008. 6. 30. 17:20

 

IIS는 CGI(Common Gateway Interface)를 지원했죠. CGI는 IIS가 외부 어플리케이션과 의사소통할 수 있는 표준 기반의 프로토콜입니다. ISAPI도 비슷하게 사용될 수 있죠. 그러나 이 두가지 방식은 약간의 제약이 있었고 이를 해결하기 위해 FastCGI 라는 모듈이 개발되었습니다. 조금 자세하게 살펴보기로 하죠.

CGI

CGI는 IIS가 외부 어플리케이션과 인터페이스하기 위한 프로토콜 입니다. 그런데, HTTP는 stateless(상태를 가지고 있지 않음)이기 때문에 HTTP를 통해 들어오는 요청을 처리하기 위해 운영체제에서 새로운 프로세스를 구동하여 외부 어플리케이션의 인스턴스를 만들어야 합니다.
바로 이 프로세스 내부에는 stdin(스탠다드 입력)이 클라이언트의 요청 데이터를 받고, stdout(스탠다드 출력)은 해당 응답 데이터를 클라이언트로 내보내며 커맨드라인과 운영체제의 환경 변수들이 다른 서버 및 요청들을 CGI 프로세스에 보내기 위해 사용됩니다. IIS에서 CGI를 사용할 때의 단점은 윈도우 운영체제가 프로세스를 만들 때 비교적 자원 소모량이 크다는 것이죠. 모든 HTTP 요청이 새로운 프로세스를 띄우고 CGI 어플리케이션 내부에서 해당 작업을 수행하고, 작업 완료 후 프로세스를 종료하게 됩니다. 따라서, 웹에서의 응답속도가 느려질 수 밖에 없습니다. 쉽게 풀이하면 10개의 요청에 10개의 프로세스가 생성, 종료된다는 것이지요.

ISAPI

PHP를 IIS에서 구동될 수 있도록 하기 위해 다양한 시도가 이루어졌고, 그 중 나름대로 성공한 모델이 바로 ISAPI 입니다. ISAPI(Internet Server Application Programming Interface)는 CGI와는 다르게 웹서버 프로세스 내부에서 작업이 이루어집니다. 클라이언트의 요청이 있을 때 새로운 프로세스가 생성되지 않고, 웹서버 프로세스에 로딩된 DLL의 초입 포인트를 Call 하는 방식으로 이루어집니다. 만약, ISAPI 어플리케이션이 운영체제가 Thread를 어떻게 처리하는지를 고려하여 만들어져 있다면 성능이 놀라울 정도로 뛰어납니다. 수년동안 PHP는 CGI와 ISAPI 방식을 통해 구동이 되고 있지만, 두가지 방식은 단점이 있습니다.
앞에서 말했듯 CGI 방식은 속도가 느리고 ISAPI 방식은 Thread 이슈가 있습니다. 예를들면 PHP가 ISAPI 방식으로 구동될 때 웹서버 프로세스 내에서 멀티 Thread 환경에서 처리가 됩니다. PHP가 Thread-safe 방식으로 구현되었지만, 많은 인기있는 PHP 어플리케이션들은 non Thread-safe 방식으로 이루어져 있습니다. 만약 ISAPI 방식의 PHP 환경에서 non Thread-safe 방식으로 개발된 어플리케이션을 구동하면, 서버가 불안정해지는 위험이 있습니다.

FastCGI

FastCGI는 성능과 안정성 모두를 보장합니다. FastCGI 방식을 사용하면 프로세스가 해당 요청을 완료한 이후에도 종료되지 않고 그대로 살아서 다른 요청을 처리합니다. 기존 CGI 방식의 단점인 프로세스 생성 및 종료할 때의 응답 속도 지연이 사라지는 것이죠.

CGI 방식과 FastCGI 방식의 기술적인 차이는 FastCGI는 stdin, stdout과 CGI 사용하던 자원들에 매핑하는 작업을 수행하는 Layer가 존재한다는 것입니다. 현재 사용되고 있는 CGI 소스코드들은 아주 적은 수정만으로도 FastCGI에서 사용될 수 있습니다. 웹서버가 여러개의 동시 요청을 처리하기 때문에 가용한 프로세스 풀을 가져야 하고, 들어오는 요청들을 처리할 준비를 하고 있어야 합니다. FastCGI 처리기에서는 이 프로세스 풀을 application이라고 부릅니다. (일명 "프로세스 풀") 프로세스 풀의 프로세스의 갯수, 하나의 프로세스가 처리할 요청의 수 등을 설정할 수 있습니다.
FastCGI 처리기는 여러개의 프로세스 풀을 지원합니다. 하나의 웹서버에서 여러 종류의 FastCGI를 구동할 수 있기 때문이지요. PHP와 Ruby를 동시에 지원하기 원할 경우가 해당 될 것입니다.

PHP

PHP에 관해 몇 가지 설명을 해보겠습니다. PHP는 두가지 버전이 있죠, Thred-safe와 non Thread-safe가 바로 그것입니다. Thread-safe 버전은 thread 들이 서로 경쟁하지 않도록 하는 작업이 이루어지므로 반응속도가 느린 반면, non Thread-safe 버전은 응답속도가 빠른 것이 특징입니다. non Thread-safe PHP를 사용하는 경우 php5ts.dll을 디렉토리에서 보실 수 있고, Thread-safe PHP를 사용하신다면 php5.dll을 찾으실 수 있을 겁니다. Apache의 mod_php 또는 IIS 웹서버로 ISAPI를 사용하시려면 thread-safe PHP 버전을 사용하셔야 합니다.

IIS 웹서버에서 PHP를 사용하시려면 non Thread-safe 방식을 사용하시는 것이 가장 최적의 성능을 제공합니다. www.php.net/download 사이트에 가셔서 PHP5.2.X 버전의 non-Thread safe 바이너리를 다운받으셔서 사용하시면 최적의 환경에서 PHP를 구동하실 수 있습니다.

이전 글을 보시면 FastCGI 설정에 대해 확인하실 수 있지만, 몇 가지 추가된 내용을 포함하여 다시 글을 써보도록 하겠습니다.

Posted by 조이트리