Windows Server 2008이 나오면… (52) – FastCGI in IIS 7.0


image

CGI(Common Gateway Interface)라는 단어는 웹이 유행하기 시작할 즈음부터, 많이 들렸던 단어입니다. 특정 클라이언트가 서버에 요청을 보냈을 때, 해당 요청을 처리하기 위해 응용 프로그램이 필요할 수 있습니다. 이 때 서버와 응용 프로그램 사이에 메시지를 주고 받기 위한 인터페이스를 CGI라고 표현합니다.

IIS 6.0 시절 응용 프로그램을 통해서 서비스해야 했던 대표적인 것이 바로 PHP입니다. PHP 모듈을 다운로드받아, 설치하고, PHP에 대한 요청시 이를 PHP 모듈과 연결하여서 서비스하는 형태를 취해야 했습니다. PHP라고 하면, Linux + Apache 서버를 많이 생각하시게 되는데, IIS에서도 이를 서비스를 아예 못했던 것은 아닙니다. Microsoft의 기술은 항상 이기종 및 공존 환경에서도 최적의 솔루션이 될 수 있도록 생각하고, 이를 기술화시키고 있습니다.

그렇지만 IIS 6.0 + PHP는 서비스라는 가치를 제공하긴 했지만, 약간의 부족함이 보였습니다. 바로 성능적인 이슈입니다. PHP를 처리하기 위한 프로세스인 PHP-CGI.EXE의 프로세스가 한개 이상 생성이 안되었었고, 또한 요청시 프로세스 생성, 요청 처리 완료시 프로세스 종료를 시키는 형태였기 때문에, 대용량 & 많은 요청시 서버에서는 프로세스 생성, 종료를 위한 추가적인 부하가 걸렸었습니다. 이러한 부하가 대용량 처리에 한계에 이르렀고, PHP를 서비스하기 위해서는 IIS는 아니라는 생각을 가지게된 계기가 되었다고 생각합니다.

IIS 7.0에서는 FastCGI라는 새로운 컨셉을 제공합니다. IIS 7.0뿐만 아니라 IIS 5.1, IIS 6.0에서도 이제 PHP를 Apache보다 더 나은 성능으로 제공합니다. 먼저 FastCGI라는 기술을 설명드리면, ZEND라는 회사에서 개발을 하였고, IIS 팀과의 긴밀한 협조속에 IIS 에서도 이를 마음껏 사용할 수 되었습니다. 원리는 간단히 이렇습니다.

1. 기존에 부하가 걸렸던 프로세스 생성/종료 문제를 해결하기 위해, IIS Worker Process와 마찬가지로, 요청시 생성되고, 바로 종료되지 않고 일정시간 대기 후, 요청이 없는 경우, 종료합니다.
2. 하나의 프로세스로 모든 걸 처리하려고 했던 아키텍쳐에서 요청 급증시 멀티 프로세스 모델로 변경

image

FastCGI를 사용하는 방법은 기존 IIS 6.0과 동일합니다. PHP 모듈을 다운로드받습니다. PHP 예제 샘플은 이미지 뷰어 공개 샘플인 QDIG을 사용하게 됩니다.

  1. PHP 모듈의 압축을 해제합니다.
  2. PHP.INI-RECOMMENDED 파일을 PHP.INI로 복사합니다. 
  3. 메모장을 이용하여 PHP.INI 파일을 엽니다.
  4. 예제 프로그램인 QDIG 응용 프로그램을 동작시키기 위해, 아래와 같이 수정합니다.
    변경: register_long_arrays = on
    변경: extension_dir = "C:\PHP\ext"
    추가: extension=php_gd.dll
  5. PHP.INI 파일을 저장하고, 메모장을 닫습니다.

이제 PHP를 FastCGI내 처리기 매핑 처리를 해줘야 합니다. 사이트내 처리기 매핑에서 모듈 매핑 추가를 클릭합니다. 그런 후 나오는 창에서, 이 포스팅 가장 상단 그림의 내용을 입력합니다. 그러면 셋팅 끝입니다. 🙂

image image

기본 문서에서 Index.PHP를 기본 문서로 잡는 것도 필요하겠죠.

image

IIS는 .NET을 구동시키기 위한 최상의 플랫폼임과 동시에, 조직내 이기종 환경에서도 이를 지원하는 최적화 플랫폼입니다. 이를 뒷받침하는 좋은 기술 중 하나가 바로 FastCGI가 되게 됩니다.

IIS 5.1/6.0용에 관련된 FastCGI 다운로드 링크는 이전 포스팅을 참조하세요.

Comments (8)

  1. Anonymous says:

    8월 20일에 한번 정리했던 URL을 다시 한번 정리합니다. 이제 Windows Server 2008 (Codename Longhorn)의 이야기가 52편에 이르렀습니다. 그동안 많은

  2. Anonymous says:

    IIS와 FastCGI의 결합을 통해 Windows Server에서도 Linux/Apache보다 뛰어난 성능 및 처리 능력으로 PHP를 서비스할 수 있다는 포스팅 을 한적이 있습니다.

  3. Anonymous says:

    금일(4월 3일), Microsoft TechNet에서는 1달동안 진행했었던 Windows Server 2008 VOD에 대한 실력 테스트를 진행하였습니다. 이에 대한 정답 및 당첨자를

  4. Anonymous says:

    지난 10월 말일, 신뢰받는 IT 조언가라는 세션 이후, 하루에 한번씩 꼬박꼬박 있는 세미나 세션에 해보고 싶던 몇가지 테스트를 해보질 못했었습니다. 한번은 제 옆자리에 앉아계신 Winkey

  5. Anonymous says:

    2009년 1월 22일 오후, 그랜드 인터컨티넨탈에서 Novell 행사에서 Microsoft 상호 운용성 에 대한 발표를 진행했었습니다. 참석해주신 30여분께 가상화 및 Microsoft의

  6. dino says:

    PHP의 각종 API도 OS에 따라서 어떻게 해야 더 빠른지 테스트를 해야하지 않을까요? 글에서 사용한 php 소스만 가지고 판단하는건 좀 아니라고 봅니다. 그리고 리눅스에서도 튜닝 좀해주면 절대 누가 더 빠르다라고 말할순 없다고 생각합니다.

  7. Seung Joo Baek says:

    dino님 안녕하세요~

    네.. 말씀에 동의합니다. 제가 말씀드리고 싶었던 것은 기존의 IIS 6/5.1의 경우 PHP를 쓰고 싶어도 성능상의 이슈로… 쓸수 없었지만.. 이제는 Apache 성능에 비교할 수 있을 만큼 PHP를 Windows에서도 사용할 수 있음이 핵심이었습니다.

    참고로.. http://www.zconverter.com/ 해당 사이트가 현재 PHP를 IIS 7.0/Windows Server 2008에서 동작하고 있는 사이트입니다.

    http://www.microsoft.com/korea/customerevidence/evidence_view.aspx?idx=152 에 보시면.. Windows에서 PHP를 성공적으로 이전한 사례.. 그리고 고객의 목소리를 보실 수 있습니다.

  8. 최규성 says:

    2008에서는 아파치랑 IIS랑 같이 쓸려면 어떻게 해야 하는지요???

    2003에서는 별도의 설치파일이 있던데….2008용은 찾질 못해서 질문드립니다.

Skip to main content