ApacheMPM(Multi-Processing Module)이라는 개념이 있습니다.. Apache 서버는 기본적으로 멀티 프로세스 방식으로 Request를 처리합니다.. 이 때 두 가지(정확하게는 세 가지) 방식으로 Request를 처리합니다.. 한 가지는 prefork이고 다른 하나는 worker입니다..

 

MPM prefork

Prefork 방식은 자식 프로세스가 싱글 쓰레드로 동작하며 요청당 하나의 프로세스가 처리하는 방식 입니다. 즉 한 자식 프로세스당 하나의 쓰레드를 사용하는 방식 입니다. 일단 요청당 하나의 프로세스가 처리하기 때문에 안정적입니다. 프로세스간 메모리를 공유하지 않기 때문입니다. 하지만 기본적으로 사용하는 메모리가 worker 방식보다 높은 편입니다. Apache는 몇몇 idle process를 유지합니다. 그래서 요청이 들어오기 전에 idle process가 대기하고 있습니다. 그래서 요청이 들어 오면 바로 처리해주기 때문에 빠르게 처리를 해줄 수 있습니다. 하지만 동시적으로 많은 접속이 들어오면 상당히 많은 자원(메모리, CPU)을 사용하게 될 것입니다.

 



MPM worker

Worker 방식은 자식 프로세스가 멀티 쓰레드로 동작하며 각 요청당 하나의 쓰레드가 처리하는 방식 입니다. 즉 한 자식의 프로세스당 여러 개의 쓰레드를 사용하고 이 쓰레드가 요청을 처리합니다. worker 방식은 prefork보다 메모리를 적게 사용합니다. 그리고 스레드간에는 메모리를 공유할 수 있습니다. 또한 prefork방식과 비슷하게 Idle thread가 존재하여 들어오는 요청을 빠르게 처리합니다. 그래서 동시 접속 처리에 유리합니다.


 

결론적으로 높은 확장가능성(scalability)를 요구한다면 worker 방식으로 안정성과 오래된 스프트웨어와의 호환성이 필요 하다면 prefork 방식을 사용하면 좋다고 합니다.

 

참조 사이트

https://httpd.apache.org/docs/2.4/ko/mpm.html

http://faq.hostway.co.kr/Linux_WEB/7043

http://www.slashroot.in/how-is-nginx-different-from-apache

 

+ Recent posts