MPM은 다중처리 모듈(Multi-Processing Module)의 약자로, 아파치 웹 서버에서 클라이언트의 요청을 어떻게 처리할지를 결정하는 핵심 모듈입니다.
아파치 웹 서버는 여러 사용자의 요청을 동시에 처리해야 하기 때문에 이러한 다중 처리를 위해 MPM이 사용됩니다.
주요 MPM은 Prefork, Worker, Event 세 가지가 있습니다.
특징
하나의 요청에 대해 하나의 자식 프로세스가 생성되어 처리합니다.
각 프로세스는 하나의 스레드를 사용하여 요청을 처리합니다.
안정성이 높고 각 프로세스는 독립적으로 동작하므로 안정성이 보장됩니다.
장점
안정성이 높습니다.
독립적인 프로세스이기 때문에 다른 요청에 영향을 주지 않습니다.
단점
메모리 사용량이 많아질 수 있습니다.
특징
하나의 자식 프로세스 안에 여러 개의 스레드를 사용하여 요청을 처리합니다.
각 프로세스당 제한된 스레드 개수를 사용하며, 이를 넘어가면 새로운 자식 프로세스가 생성됩니다.
메모리를 효율적으로 사용하며 Prefork보다 부하 위험이 낮습니다.
장점
메모리를 효율적으로 사용합니다.
부하 위험이 낮습니다.
단점
스레드 간의 동기화 문제가 발생할 수 있습니다.
특징
Worker MPM과 유사하나, 이벤트 드리븐 방식을 사용하여 성능을 개선합니다.
KeepAlive와 같은 연결을 유지하는 경우에 성능이 저하되는 문제를 해결하기 위해 개발되었습니다.
이벤트를 다루는 스레드를 하나 둠으로써 성능을 향상시킵니다.
장점
성능이 향상됩니다.
연결 유지와 관련된 문제를 해결할 수 있습니다.
단점
설정이 복잡할 수 있습니다.
ServerLimit: 이 디렉티브는 서버가 수용할 수 있는 최대 동시 연결 수를 제한합니다.
여기서는 최대 400개의 동시 연결을 허용하도록 설정되어 있습니다.
StartServers: Apache 서버가 시작될 때 생성되는 프로세스의 수를 지정합니다.
여기서는 25개의 서버가 시작될 때 동시에 시작됩니다.
MinSpareServers: Apache 서버에서 항상 유지되어야 하는 최소한의 빈 서버 프로세스 수를 지정합니다.
여기서는 25개로 설정되어 있으므로 항상 적어도 25개의 빈 서버 프로세스가 유지됩니다.
MaxSpareServers: Apache 서버에서 허용되는 최대 빈 서버 프로세스 수를 지정합니다.
여기서는 50개로 설정되어 있으므로 서버가 유휴 상태일 때 최대 50개의 빈 서버 프로세스가 유지됩니다.
MaxClients: 이 디렉티브는 동시에 처리될 수 있는 최대 클라이언트 연결 수를 제한합니다.
여기서는 최대 400개의 클라이언트 연결을 허용하도록 설정되어 있습니다.
MaxRequestsPerChild: 각 서버 프로세스가 처리할 수 있는 최대 요청 수를 제한합니다.
여기서는 각 프로세스가 10000개의 요청을 처리한 후에 종료되고 재시작되도록 설정되어 있습니다.
MPM을 선택할 때는 서버의 용도, 환경, 요구 사항을 고려하여 적절한 MPM을 선택해야 합니다. 각 MPM은 서버의 안정성과 성능에 영향을 미치므로 신중하게 고려해야 합니다.