본문 바로가기
서버세션/Server

[웹 서버] Apache와 Nginx 차이점

by 김긍수 2021. 4. 19.

Apache와 Nginx 차이점

Apache, NGINX 

Apache Nginx
- 쓰레드/프로세스 기반 구조로 요청 하나당 쓰레드 하나가 처리하는 구조이다.

- 사용자가 많으면 그만큼 많은 쓰레드가 생성되고 메모리 및 CPU 낭비가 심하다.

- 하나의 쓰레드 당 하나의 클라이언트 구조
- 비동기 Event-Driven 기반 구조(비동기이벤트처리방식)

- 다수의 연결을 효과적으로 처리할 수 있다.

- 더 적은 쓰레드로 클라이언트 요청을 처리할 수 있다.
  • Apache는 Nginx에 비해 모듈이 다양하다.
  • Apache는 안정성, 확장성, 호환성이 장점이고 Nginx는 성능이 우세하다는 장점이 있다.

Apache

아파치는 클라이언트에게 요청을 받으면 MPM(Multi Processing Module : 다중처리모듈) 방식으로 요청을 처리한다. 

  • 쓰레드 / 프로세스 기반 구조로 요청 하나 당 쓰레드 하나가 처리하는 구조
  • 사용자가 많으면 많은 쓰레드가 생성되므로 메모리와 CPU낭비가 심하다.
  • 하나의 쓰레드 당 하나의 클라이언트 구조 
MPM : 다중 처리 모듈
PreFort 방식, Worker 방식
  • PreFort MPM (다중 프로세스)
    • 클라이언트 요청에 대해 apache 자식 프로세스를 생성하여 처리한다.
    • 요청이 많을 경우 Process를 생성하여 처리한다. (Apache 설치 시 Default로 설정되어있음)
    • 하나의 자식프로세스 당 하나의 스레드를 갖는다. (최대 1024개)
    • 스레드간에 메모리 공유를 하지 않는다. (독립적이어서 안전하지만, 메모리 소모가 크다)
  • Worker MPM (멀티 프로세스-스레드)
    • Prefork보다 메모리 사용량이 적고 동시 접속자가 많은 사이트에 적합하다. (통신량이 많을 때 유리)
    • 각 프로세스가 여러 개의 스레드를 생성해서 요청을 처리하는 구조이다. 
    • 스레드 간의 메모리 공유가 가능하다
    • 프로세스 당 최대 64개의 스레드처리가 가능하며, 각 스레드는 하나의 연결만을 부여받는다.

Apache의 한계

클라이언트 접속마다 새로운 Process 혹은 Thread가 필요하다. 동시 접속자 수가 1만명이 넘어간다면 CPU와 메모리 사용이 증가하고 추가적인 Process/Tread 생성비용이 드는 등 대용량 요청에서 한계가 있다.


NGINX

Apache의 C10K(한 시스템에 동시 접속자 수가 1만명이 넘어갈 때 효율적 방안)문제점 해결을 위해 만들어졌다.

트래픽이 많은 웹사이트에서 확장성을 위해 설계한 비동기 이벤트 기반 구조의 웹서버 SW이다. 

비동기 Event-Driven 기반 구조 다수의 연결을 효과적으로 처리할 수 있다.

단일 nginx 작업자가 동시에 수 천 개의 요청을 처리할 수 있다.

  • 비동기 이벤트 기반으로 요청하여 적은 양의 스레드가 사용되기 때문에 CPU소모가 적다.
  • 요청을 수행하는 도중 CPU와 관계 없이 I/O, socket R/W 등을 전부 Event Listener로 미루기 때문에 시작되면 기다리지 않고 바로 다른 요청을 수행한다

댓글