
웹 브라우저에서 PHP 페이지를 요청하면, 단순히 파일이 실행되는 것이 아니라 웹서버와 PHP 실행 엔진이 협력하여 동작하게 됩니다.
이 글에서는 PHP가 웹서버를 통해 실행되는 구조와 php-fpm, mod_php의 차이를 정리해보겠습니다.
PHP는 독립적으로 실행되는 서버가 아닙니다.
반드시 웹서버를 통해 요청을 받아 실행됩니다.
기본 구조는 아래와 같습니다.
[Client]
↓ HTTP Request
[Web Server]
↓ PHP 실행 요청
[PHP Engine]
↓ 실행 결과 반환
[Web Server]
↓ HTTP Response
[Client]
여기서 핵심 질문은 이것입니다.
웹서버가 PHP를 어떻게 실행시키는가?
그 방법이 바로 mod_php와 php-fpm입니다.
mod_php는 Apache 내부에 PHP 모듈을 직접 탑재하는 방식으로 Apache 프로세스 안에 PHP가 같이 로드됩니다.
Apache 프로세스마다 PHP가 함께 로드되기 때문에
트래픽이 많아질수록 메모리 사용량이 증가합니다.
Apache 프로세스 수 증가
↓
PHP 메모리 중복 로드
↓
메모리 사용량 급증
CSS, JS 같은 정적 파일 요청에도 PHP가 메모리에 함께 로드됩니다.
mod_php는 Apache 전용 방식이기 때문에 Nginx에서는 사용할 수 없습니다.
FPM = FastCGI Process Manager
php-fpm은 PHP를 별도의 프로세스로 실행하고,
웹서버(Nginx 또는 Apache)와 FastCGI 방식으로 통신합니다.
Client
↓
Nginx (정적 파일 처리)
↓ FastCGI
php-fpm
↓
PHP Worker Process
↓
Response
여기서 가장 중요한점은
웹서버와 PHP가 완전히 분리되어있다는 것
즉, 웹서버는 요청을 받아 전달만 하고,
실제 PHP 실행은 php-fpm이 담당합니다.
| 구분 | mod_php | php-fpm |
|---|---|---|
| 실행 방식 | Apache 모듈 | FastCGI |
| 웹서버 | Apache 전용 | Nginx/Apache |
| 메모리 | 높음 | 효율적 |
| 확장성 | 낮음 | 높음 |
| 현대적 환경 | 부적합 | 적합 |
php-fpm과 mod_php의 가장 큰 차이점은 PHP를 웹서버 내부에서 실행하느냐, 별도 프로세스로 실행하느냐에 있습니다.
현재는 대부분 다음 구조를 사용합니다.