FastCGI는 웹 서버와 외부 애플리케이션(주로 동적 컨텐츠를 생성하는 스크립트나 프로그램) 사이의 통신을 효율적으로 수행하기 위해 설계된 인터페이스 프로토콜이다. 기존의 CGI(Common Gateway Interface)가 요청당 프로세스를 새로 생성·소멸하는 방식으로 성능이 제한됐던 점을 개선하여, 하나의 애플리케이션 프로세스를 다수의 웹 요청에 재사용함으로써 높은 처리량과 낮은 응답 지연을 제공한다.
1. 개요
- 정식 명칭: Fast Common Gateway Interface
- 제작·표준화 기관: Open Market (현재는 FastCGI Consortium에 의해 관리)
- 출시 시기: 1996년~1997년경
- 주요 목적: CGI의 성능 한계를 극복하고, 웹 서버와 애플리케이션 간에 지속적인 연결을 유지함으로써 리소스 사용을 최소화한다.
2. 동작 원리
- 프로세스 풀: FastCGI 애플리케이션은 하나 이상의 워커 프로세스로 구성된 풀을 미리 실행한다.
- 소켓 통신: 웹 서버는 로컬 혹은 원격 소켓(UNIX 도메인 소켓, TCP/IP)으로 워커 프로세스에 요청을 전송한다.
- 지속 연결: 워커 프로세스는 요청을 처리한 후 종료되지 않고, 다음 요청을 기다린다. 이 과정에서 메모리와 초기화 비용이 재사용된다.
- 멀티플렉싱: 하나의 워커는 동시 다발적인 요청을 순차적으로 처리하거나, 멀티스레드/멀티프로세스 구현을 통해 병렬 처리한다.
3. 주요 특징
| 특징 | 설명 |
|---|---|
| 고성능 | 프로세스 재사용으로 CGI 대비 10~100배 이상의 처리량을 달성 |
| 언어 중립성 | C, C++, Perl, Python, PHP, Ruby, Java 등 다양한 언어로 구현 가능 |
| 플랫폼 독립성 | UNIX, Linux, Windows, macOS 등 대부분의 운영체제에서 동작 |
| 보안 | 애플리케이션이 웹 서버와 격리돼 권한 제한이 용이; 소켓 기반 통신으로 네트워크 영역을 세분화 가능 |
| 스케일링 | 워커 프로세스 수와 서버 간 로드밸런싱으로 수평·수직 확장이 쉬움 |
| 표준화된 API | FCGI_Accept, FCGI_Finish, FCGI_GetParam 등 명확한 함수 집합 제공 |
4. 구현 예시
- PHP-FPM: PHP용 FastCGI 프로세스 관리자로, 워커 풀 관리와 동적 스케일링을 담당한다.
- Ruby‑Rails (Passenger): Apache/Nginx와 연동해 Ruby 애플리케이션을 FastCGI 방식으로 실행.
- Python (Flup, uWSGI): Python WSGI 어플리케이션을 FastCGI로 래핑해 Apache/Nginx와 연동.
- Lighttpd, Nginx: 기본적으로 FastCGI 백엔드와 연결하기 위한 모듈 제공.
5. 구성 요소
- FastCGI 서버(워커)
- 애플리케이션 로직을 포함하고, 초기화 단계에서 필요한 리소스를 로드한다.
- FastCGI 클라이언트(웹 서버)
- 요청을 포맷팅해 워커에 전달하고, 응답을 받아 클라이언트에게 전송한다.
- 통신 채널
- 로컬 소켓(UNIX) 혹은 네트워크 소켓(TCP) 사용; 보안 전용 SSL/TLS 적용 가능.
6. 장단점
- 장점
- 높은 처리량, 낮은 오버헤드, 언어·플랫폼 독립성, 보안 격리, 쉬운 수평 확장.
- 단점
- 설정이 복잡할 수 있음(워커 수, 타임아웃, 소켓 권한 등).
- 워커 프로세스가 메모리를 장시간 점유하므로 메모리 관리가 중요함.
7. 관련 기술
- CGI: FastCGI의 전신이자 기본 모델.
- WSGI: Python용 웹 서버 인터페이스; FastCGI를 통해 WSGI 애플리케이션을 배포 가능.
- SCGI: Simple Common Gateway Interface, FastCGI보다 간단한 프로토콜.
- HTTP/2, HTTP/3: FastCGI와 별개로 전송 계층을 개선하지만, 백엔드와의 연동은 여전히 FastCGI 등 기존 프로토콜 사용.
8. 표준 문서
- RFC 3875 – CGI (Common Gateway Interface) 표준 (FastCGI는 비표준이지만 이와 연관된 설명 포함)
- FastCGI Specification – FastCGI Consortium 제공, 버전 1.0 (1998)
9. 활용 사례
- 대형 포털 사이트와 전자상거래 사이트에서 PHP‑FPM을 이용한 고성능 동적 페이지 제공.
- 마이크로서비스 아키텍처에서 언어별 서비스(예: Python, Ruby)를 FastCGI로 감싸 Nginx 앞단에 배치, 통합 라우팅 구현.
- 레거시 CGI 애플리케이션을 FastCGI로 전환해 성능 및 유지보수성 개선.
FastCGI는 웹 서버와 백엔드 애플리케이션 사이의 효율적인 인터페이스 역할을 수행함으로써, 현대 웹 서비스에서 높은 트래픽을 안정적으로 처리하는 핵심 기술 중 하나로 자리매김하고 있다.