개념 사전 · 프로그램

PHP-FPM과 FastCGI

PHP FastCGI Process Manager · 피에이치피 에프피엠

-FPM은 요청을 처리하는 지속 실행 워커 풀을 관리하는 프로그램이다. 웹 서버와 로 요청·응답을 주고받으며 요청마다 새 를 만드는 전통적 와 실행 수명이 다르다.

밑줄 용어에 마우스를 올리거나, 키보드로 선택하거나, 터치하면 설명을 볼 수 있습니다.

01무엇이고, 어떤 일을 하나

  • 워커를 풀 단위로 생성·유지·교체한다.
  • 실행 사용자·소켓·동시 처리 상한을 풀별로 구성한다.
  • 요청 대기와 워커 점유 상태를 관리해 웹 서버와 실행을 연결한다.

02어떤 순서로 동작하나

  1. 소켓 접속

    웹 서버가 풀의 Unix 소켓 또는 리스너에 연결한다.

  2. 요청 배정

    과 요청 데이터가 사용 가능한 워커에 전달되며 모든 워커가 바쁘면 대기가 생길 수 있다.

  3. 스크립트 실행

    워커의 계정과 설정으로 코드를 실행하고 DB·파일 작업을 처리한다.

  4. 응답·재사용

    응답을 웹 서버에 돌려주고 워커를 다음 요청에 사용하거나 설정한 교체 조건에 따라 종료·재생성한다.

03먼저 알아둘 용어와 구성요소

전통적 는 웹 서버가 외부 프로그램을 요청에 맞춰 실행하고 환경 변수와 표준 입력으로 요청 정보를 전달하며 프로그램의 표준 출력에서 응답을 받는 인터페이스다.
는 워커를 계속 실행하고 소켓을 통해 여러 요청을 전달하여 실행 생애를 요청 한 건보다 길게 유지한다. -FPM은 이 워커 풀을 관리한다.
가 같은 파라미터와 요청 정보를 보내면 FPM 워커가 해당 스크립트를 실행해 응답을 반환한다.
은 static의 워커 수 또는 dynamic/ondemand의 최대 자식 수이며 동시에 처리할 요청 수를 제한한다. 웹 서버의 연결 수 자체를 같은 숫자로 제한하는 값은 아니다.
static은 고정 수, dynamic은 시작·대기 워커 범위 안에서 수를 조절하고 ondemand는 요청에 맞춰 만든다. 생성 비용과 상주 메모리의 균형이 달라진다.
는 자식이 일정 요청 수를 처리한 뒤 교체되는 조건이다. 동시 요청의 상한이나 한 요청의 최대 실행 시간을 뜻하는 값과 구분한다.
LEARN THROUGH PRACTICE

PHP 파일 작성에서 웹 실행·DB 연결까지 경계 나누기

소스 파일 존재, 실행, 애플리케이션의 DB 접속을 서로 다른 단계의 결과로 확인한다.

실습 구성과 전제

  • phpinfo. 내용 조회와 WordPress 설치 화면은 서로 다른 구성 사례다. 첫 파일이 두 번째 설치 프로그램으로 바뀐 연속 실행이 아니다.
  • 실행기가 준비된 실습 환경을 사용한다. 설정 정보가 많이 노출되는 phpinfo 페이지를 외부에 상시 공개하지 않는다.
  1. 파일 내용과 실행 결과를 구별한다

    • 첫 사진의 cat은 파일의 텍스트를 읽는다. 여는 태그와 phpinfo()가 보인다는 것은 소스가 저장되었다는 증거이며 웹 서버가 를 실행했다는 증거는 아니다.
    • 브라우저가 코드를 그대로 내보낸다면 실행기 연결 문제를 의심해야 한다. 정상 실행에서는 소스 문장 대신 프로그램이 만든 출력이 HTTP 응답 본문이 된다.
    <?php
    header("Content-Type: text/plain; charset=UTF-8");
    echo "PHP executed\n";

    정보 노출을 줄인 재구성 실행 확인 파일이다. 처리 경로가 준비된 로컬 실습에서만 사용한다.

    5/26 - php, mariaDB · 명령·상태 출력 5원본 크기로 보기 ↗
    • cat phpinfo.php 아래에 PHP 태그와 phpinfo() 호출이 그대로 표시된다.
    • 이 화면은 터미널의 파일 조회이며 PHP 정보 페이지가 렌더링된 브라우저 화면이 아니다.
    확인 기준

    파일 존재, 문법 검사, CLI 실행, 웹 요청 실행을 각각 확인한다. CLI와 FPM이 서로 다른 버전·설정을 사용할 수 있다.

  2. 웹 서버와 PHP 실행기의 연결을 검증한다

    • 정적 파일 응답이 성공한 뒤 . 요청을 실행기로 전달하는 설정을 확인한다. FPM을 쓴다면 소켓·스크립트 경로·풀의 실행 계정이 연결되어야 한다.
    • -l은 소스의 문법을 검사하지만 DB 접속이나 FPM 요청 경로까지 실행해 보지는 않는다. curl 응답 본문에서 재구성한 고정 문자열을 확인하면 웹 실행을 별도 검증할 수 있다.
    bash
    php -l /srv/lab-web/check.php
    curl -i http://127.0.0.1/check.php

    설정된 실습 문서 루트의 파일 문법과 웹 응답을 조회하는 예시다.

    확인 기준

    소스 노출, 404, 502, 오류는 실패 경계가 다르다. 웹 서버 로그와 FPM 상태를 해당 요청 시각에 맞춰 읽는다.

  3. 애플리케이션의 DB 설정은 다음 단계다

    • WordPress 화면은 DB 이름·사용자·암호·호스트·테이블 접두사를 요구한다. 프로그램이 실행되더라도 올바른 DB 계정과 접속 경로가 없으면 설치가 이어지지 않는다.
    • 테이블 접두사는 생성할 테이블 이름의 접두어이며 DB 서버 주소가 아니다. 실제 암호나 운영 계정은 예시 본문에 복사하지 않는다.
    PHP·MariaDB·CMS · CMS : Contents Management System (8)원본 크기로 보기 ↗
    • 설치 화면에 Database name, Username, Password, Database host, Table prefix 입력 항목이 보인다.
    • wp-config.php 안내가 있어 애플리케이션이 사용할 DB 연결 설정 단계임을 알 수 있다.
    확인 기준

    이 양식이 보인다는 사실은 DB 인증 성공의 증거가 아니다. 입력 후 연결·권한·테이블 생성 결과를 추가 확인해야 한다.

실습에서 확인한 동작 원리

  • 소스 파일을 읽은 결과와 프로그램을 실행한 HTTP 응답은 구별해야 한다.
  • 웹 서버→ 실행기→DB의 각 경계마다 경로·신원·오류 로그가 다르다.
관련 개념·전체 실습 화면 이어서 읽기 →
동작·명령 참고 문서

04예제로 따라가기

  • 워커 8개가 각각 0.2초에 한 요청을 처리하는 이상화 모델에서는 처리율 상한이 약 40건/초다.
  • 같은 8개가 DB 대기로 요청당 0.8초를 점유하면 약 10건/초가 되어 CPU가 낮아도 요청이 밀릴 수 있다.
  • 는 워커가 처리한 누적 요청 수에 따른 교체 조건이며 동시 워커 수 제한과 다르다.

05혼동하기 쉬운 점과 확인 기준

  • 웹 서버가 FPM 소켓을 열지 못하면 프로토콜 전달 전 경로·권한·listen 상태 문제다. 코드의 구문을 고쳐도 아직 그 코드가 실행되지 않는다.
  • 연결이 돼도 이 의도한 실제 파일을 가리켜야 한다. HTTP URI와 파일 경로를 혼동하면 잘못된 스크립트를 실행하거나 파일 없음 오류가 난다.
  • max_children을 늘려도 DB의 연결·동시 처리 한계가 그대로면 대기 위치만 옮겨갈 수 있다. 웹·FPM·DB의 처리량과 timeout을 함께 맞춘다.

06상세 노트 · 실습 자료

헤더 구조, 설정 예시, 수치 계산과 수업 캡처는 아래 노트에서 이어집니다.

READ · OBSERVE · CONNECT

함께 보는 학습 자료

아래 공식 자료를 본문의 개념·예제와 함께 읽어 보세요. 자료별로 확인할 위치와 관찰할 내용을 적었습니다.

공식 가이드

PHP-FPM 풀과 동시 처리 수 설정

List of pool directives에서 listen·user를 확인한 뒤 pm과 ·를 비교한다. 접속 지점, 실행 계정, 동시 수와 누적 교체 수를 같은 설정 파일 안에서 구별한다.

읽으면서 확인할 것
  • 가 워커 수를 정하는 방법
  • 과 의 다른 단위
  • Unix 소켓 접근 권한과 코드 실행 계정의 차이

공식 문서 · 표준

기초 개념과 동작 설명을 대조한 자료입니다. 제품 버전과 실제 설정에 따른 차이는 본문 및 원문에서 확인하세요.