[참고]
FastCGI (1)
FastCGI 는 대부분의 웹서버에서 응용프로그램을 호출할 때 방법인 CGI의 속도를 증진시키기 위한 프로그래밍 인터페이스이다. FastCGI 개발자들에 의하면, 웹사이트로 들어와서 특정 응용프로그램을 사용하는 사용자 요청이 3~30배 정도 더 빠르게 처리될수 있다고 한다. FastCGI는 웹서버의 플러그인이다. 이러한 성능 향상을 얻기 위해서는 기존의 서버 응용프로그램들에 아주 작은 변경만 하면 된다.
기본적으로 FastCGI는 단일 프로세스 내에서 다중 CGI 요청들을 관리하는 프로그램이므로 각 요청에 따른 많은 프로그램 명령어들을 절약한다. CGI에서는 각 사용자의 서비스 요청에 대해 웹서버가 제어를 행사하고, 서비스를 수행하고, 또 종료하기 위해, 각기 새로운 프로세스를 만ㄷ르어야 했따. 그러나 FastCGI는 현재 처리되고 있는 모든 요청들이 하나의 프로세스를 공유한다.
FastCGI에서 프로세스는, CGI와 달리 웹서버에 독립적으로 실행되고 격리되므로, 좀더 많은 안정성을 제공한다. FastCGI는 언어에 독립적이며, Open Market, Inc. 이 개발하고 판권을 가지고 있었으나, 무료로 사용할 수 있또록 공개된 표준으로 제공한다. FastCGI는 어떠한 웹서버 또는 플랫폼에 걸쳐서도 사용될 수 있는 하나의 비독점적 접근방식을 제공한다.
FastCGI (2)
FastCGI는 웹서버와 프로그램이 상호작용 (데이터를 주고받기 위한) 인터페이스 개발을 위한 프로토콜이다. FastCGI는 CGI (Common Gateway Interface)를 개선한 인터페이스다. CGI는 데이터 처리요청이 있을 때마다 매번 프로세서를 실행해야만 했다. FastCGI는 매번 프로세스를 만들지 않고, 미리 만들어 놓은 프로세스와 데이터를 주고 받음으로서 CGI 보다 더 효츌적으로 작동한다. 예컨데, FastCGI는 CGI의 개선된 인터페이스다.
웹 서버는 유저가 요청한 파일을 읽어서 출력하는 것을 목적으로 하지, 데이터를 처리하는 것을 목적으로 하지 않는다. 웹 서버는 데이터의 처리를 외부 프로그램에 맡기는데, 이럴려면 외부 프로그램에 처리해야 하는 데이터를 넘기고 그 결과를 받는 인터페이스가 필요하다. CGI는 웹 서버와 외부 프로그램과 데이터를 주고받기 위한 표준 인터페이스다.
CGI는 단순한 인터페이스로 간단하게 구현할 수 있다.
1. 데이터를 처리할 프로세스를 생성한다
2. 처리할 데이터를 환경 변수를 통해서 프로세스에 넘긴다.
3. 처리 결과는 표준출력으로 가져와 클라이언트(웹 브라우저)로 보낸다.
CGI는 프로세스를 이해하기 쉽고, 개발도 간단하지만 성능과 확장성에 문제가 있었다. 1990년대 중반 Open Market은 CGI의 문제를 해결한 FastCGI를 개발해서 자신들의 웹 서버에 도입했다.
FastCGI는 Open Market이 자신들의 문제를 해결하기 위해서 자체개발한 솔루션이었지만 다른 웹 서버 업체들에도 적용이 됐다. 이후 mode_perl, mode_php와 같은 다른 모듈들과 함께, 빠르게 인기를 얻었다.
구현방식
FastCGI는 각각의 요청에 대해서 새로운 프로세스를 만드는 대신에 하나의 프로세스에서 여러 요청을 처리한다. 이 프로세스는 웹 서버가 아닌 FastCGI 서버가 관리한다. 클라이언트로 부터 요청을 받은 웹 서버는 환경 변수와 페이지의 요청을 socket이나 TCP연결을 이용해서 FastCGI 프로세스에 전달한다.
응답은 웹서버와 연결된 소켓 채널을 이용한다. 응답을 받은 웹서버는 HTML 문설르 만들어서 클라이언트에 전송한다. 응답을 클라이언트에 전송한 후에 웹서버와 클라이언트는 연결이 끊어지지만, 이와는 상관없이 웹서버와 FastCGI 서버의 연결은 계속 유지된다.
FastCGI는 프로세스가 여러 개의 요청을 처리하기 때문에, 프로세스의 생성과 종료에 따른 오버헤드를 방지하며, 더 많은 요청을 처리할 수 있다. FastCGI 프로세스는 내부적으로 입출력을 다중화 하는 것으로 하나의 연결을 이용해서 여러 요청을 처리할 수 있으며, 두 개 이상의 웹 서버와의 연결을 유지할 수도 있다.
FastCGI를 위한 일반적인 웹 서비스 구성은 다음과 같다.
FastCGI 서버를 여러개 두고, 웹 섭는 여러 FastCGI에 연결을 만드는 것으로 가용성과 성능을 확보할 수 있다.
FastCGI 방식과 함께 내장 인터프리터 방식(mode_perl, mode_php)이 자주 사용된다. FastCGI 방식을 사용하면, 웹 서버와 FastCGI 서버를 분리해서 운용할 수 있다. 따라서 각각의 서버를 독립적으로 재시작할 수 있다. 또한 웹 서버를 DMZ 구간에 두고 FastCGI 서버를 private internal network에 두는 식으로 보안성을 높일 수 있다. 웹 서버와 FastCGI서버가 하는 일은 서로 다르다. 이들을 분리하는 것으로 효율적인 서버 운용이 가능하다.
끄읕