### Apache HTTP Server Version 2.0

# 아파치 다중처리 모듈

아파치 웹서버는 다양한 환경의 다양한 플래폼에서 동작할 수 있도록 강력하고 유연하게 설계되었다. 다른 플래폼과 다른 환경은 보통 다른 기능을 요구하며, 어떤 기능을 가장 효율적으로 구현하는 방법이 다를 수도 있다. 아파치는 모듈화된 설계로 이런 다양한 환경에 항상 적응해왔다. 그래서 웹마스터는 컴파일시 혹은 실행시 어떤 모듈을 읽어들일지 선택하여 어떤 기능을 서버에 포함할지 결정할 수 있다.

Apache 2.0는 이런 모듈화된 설계를 웹서버의 가장 기본적인 기능에까지 확장했다. 서버는 시스템에서 네트웍 포트에 연결하고, 받아들인 요청을 처리할 자식들에게 분배하는 다중처리 모듈 (Multi-Processing Modules, MPMs)을 선택할 수 있다.

서버를 이 정도로 모듈화하면 두가지 중요한 장점이 있다:

- mpm_winnt가 Apache 1.3에서 사용한 POSIX층 대신 자체 네트웍 기능을 사용할 수 있는 등, 아파치는 여러 다양한 운영체제를 더 깔끔하고 효율적으로 지원할 수 있다. 이 장점은 특수화된 MPMs를 구현하는 다른 운영체제에도 적용된다.
- 서버는 특정 사이트의 요구조건에 더 특수화될 수 있다. 예를 들어 많은 범위성(scalability)이 필요한 사이트는 worker와 같은 쓰레드 MPM을 사용하고, 안정성과 오래된 소프트웨어와 호환성이 필요한 사이트는 preforking MPM을 사용할 수 있다. 추가로 다른 사용자아이디로 여러 호스트를 서비스하는 것(perchild)과 같은 특별한 기능도 제공된다.

사용자가 보기에 MPMs는 다른 아파치 모듈과 거의 비슷해 보인다. 주된 차이는 한번에 오직 한 MPM만이 서버에 로드되야 한다는 점이다. 가능한 MPMs 목록은 모듈 목록 페이지에 있다.

## MPM 선택하기

MPMs는 구성중에 선택하여 서버에 컴파일되야 한다. 컴파일러는 쓰레드를 사용한다는 것을 알면 많은 함수를 최적화할 수 있다. 유닉스에서 몇몇 MPMs는 쓰레드를 쓰고 나머지는 아니므로, MPM이 구성중에 선택되어 아파치에 컴파일될때 아파치는 더 빠른 속도를 낸다.

원하는 MPM을 선택하려면 ./configure 스크립트에 with-mpm= NAME 아규먼트를 사용하라. NAME은 원하는 MPM 이름이다.

서버가 컴파일된후 `./httpd -l`로 선택된 MPM을 알 수 있다. 이 명령어는 MPM을 포함하여 서버에 컴파일된 모든 모듈을 알려준다.

## MPM 기본값

- BeOS: beos
- OS/2: mpmt_os2
- 유닉스: prefork
- 윈도우즈: winnt

### Apache HTTP Server Version 2.0