WIPIVERSE

FastCGI

FastCGI는 웹 서버와 외부 응용 프로그램 간의 인터페이스를 위해 설계된 이진(binary) 프로토콜이다. 기존의 CGI(Common Gateway Interface)를 변형·개선한 것으로, CGI 프로그램과 웹 서버 사이의 인터페이싱 과정에서 발생하는 오버헤드를 줄여 서버가 단위 시간당 더 많은 웹 페이지 요청을 처리할 수 있도록 하는 것이 주요 목적이다.

CGI는 각 요청이 들어올 때마다 별도의 프로세스를 생성하고 요청이 끝나면 이를 제거하는 "요청당 하나의 프로세스" 방식을 사용한다. 이 방식은 구현이 단순하다는 장점이 있으나, 고부하 상황에서는 프로세스 생성과 소멸에 따른 운영체제 오버헤드가 상당해지고, 데이터베이스 연결 재사용이나 인메모리 캐싱 등 자원 재사용이 제한된다는 단점이 있다.

FastCGI는 이러한 CGI의 확장성 문제를 해결하기 위해 Open Market사가 개발했으며, 1990년대 중반 자사의 웹 서버 제품에 처음 도입되었다. Open Market은 당시 Netscape가 개발한 독점적 in-process API(NSAPI)에 대한 경쟁 대응의 일환으로 FastCGI를 개발했다. 이후 Apache, IIS, nginx, lighttpd 등 여러 웹 서버에서 FastCGI를 지원하게 되었다.

FastCGI는 각 요청마다 새 프로세스를 만들지 않고, 지속적인(persistent) 프로세스가 일련의 요청을 처리하는 방식을 사용한다. 이 프로세스는 웹 서버가 아닌 FastCGI 서버가 소유한다. 들어오는 요청을 처리하기 위해 웹 서버는 환경 변수 정보와 페이지 요청을 Unix 도메인 소켓, 명명된 파이프 또는 TCP 연결을 통해 FastCGI 프로세스에 전송하며, 응답은 동일한 연결을 통해 반환된다. 각 FastCGI 프로세스는 수명 기간 동안 여러 요청을 처리할 수 있어 요청별 프로세스 생성 및 종료의 오버헤드를 피할 수 있다.

FastCGI는 언어에 특정하게 묶여 있지 않은 프로토콜이므로 네트워크 소켓을 지원하는 여러 프로그래밍 언어에서 구현될 수 있다. Ruby on Rails, Django, Catalyst 등 여러 최신 웹 프레임워크에서도 사용할 수 있으며, 특히 PHP-FPM은 FastCGI 프로토콜을 기반으로 동작하는 대표적인 구현 중 하나이다.

웹 애플리케이션을 웹 서버에서 분리하는 FastCGI의 구조는 서버와 애플리케이션 프로세스를 독립적으로 재시작할 수 있게 하고, 호스팅 서비스별 보안 정책을 적용할 수 있게 한다는 점에서 임베디드 인터프리터 방식(mod_perl, mod_php 등)에 비해 여러 장점을 가진다.

둘러보기

더 찾아볼 만한 주제

    전체 문서 보기