FastCGI 프로토콜의 핵심 아키텍처
FastCGI는 웹 서버(Nginx, Apache 등)와 PHP 같은 애플리케이션 간의 이진 프로토콜로, 종래의 CGI가 요청마다 새로운 프로세스를 생성·종료하는 비효율성을 극복합니다. FastCGI 애플리케이션은 시작 후 웹 서버로부터의 연결을 기다리는 장기 실행 프로세스(Application Server)로 동작하며, Unix 도메인 소켓 또는 TCP/IP를 통해 통신합니다.
PHP-FPM의 프로세스 풀 관리
PHP-FPM(FastCGI Process Manager)은 여러 개의 워커 프로세스 풀을 관리하는 마스터-워커 아키텍처를 채택합니다. 마스터 프로세스는 풀 설정을 제어하고, 각 워커는 독립적인 PHP 스크립트를 실행합니다. 풀 단위로 서로 다른 사용자(uid/gid), 환경변수, php.ini를 설정할 수 있어 멀티테넌트 환경에 최적화되어 있습니다.
동적 프로세스 생성 및 메모리 관리
PHP-FPM은 pm=dynamic, static, ondemand 세 가지 모드를 제공합니다. Dynamic 모드에서는 pm.min_spare_servers와 pm.max_spare_servers 범위 내에서 유휴 프로세스 수를 자동 조절하며, pm.max_requests로 정해진 요청 수 후 워커를 재시작하여 메모리 누수를 방지합니다. 이러한 메커니즘은 높은 트래픽 환경에서 리소스를 효율적으로 활용합니다.
실무 주의점
웹 서버와 PHP-FPM이 동일 서버에 있을 때는 Unix 소켓(/run/php/php-fpm.sock)을 사용하는 것이 TCP보다 10~20% 지연이 낮습니다. PHP-FPM의 설정 변경 시 systemctl reload php-fpm을 사용하면 진행 중인 요청을 완료한 후 우아하게 워커를 재시작하여 연결 손실을 방지합니다.