Nginx vs. Apache

연수·2022년 3월 5일
0

architecture

목록 보기
3/7

웹 서버는 HTTP 프로토콜을 통해 읽힐 수 있는 문서 처리를 하며 일반적으로 웹 어플리케이션의 앞단에 배치된다.

동적인 리소스는 WAS에서 처리하고 정적인 리소스는 WEB에서 처리하여 보다 효율적으로 서버를 구성할 수 있다.

웹 서버로 사용되는 것 중 가장 대표적인 두 가지가 바로 Apache와 Nginx!

이 둘의 차이점은 무엇일까?!

🪶 Apache

현업에서 아직 가장 많이 사용되는 웹 서버라고 한다.

Client에서 요청을 받으면 MPM(Multi Processing Module : 다중처리모듈)이라는 방식으로 처리를 하는데, 대표적으로 Prefork와 worker 방식이 있다.

  • Prefork MPM
    • 실행 중인 프로세스가 복제되어 처리된다.
    • 각 프로세스는 한 번에 한 연결만 처리하고 요청량이 많아질수록 프로세스는 증가하지만, 복제 시 메모리 영역까지 복제되어 동작하므로 프로세스 간 메모리 공유가 없어 안정적이다.
  • Worker MPM
    • Prefork 동작 방식은 1개의 프로세스가 1개의 스레드로 처리가 되는 반면 Worker 동작 방식은 1개의 플세스가 각각 여러 스레드를 사용하게 된다. 스레드 간의 메모리를 공유하며 Prefork 방식모다 메모리를 덜 사용한다는 장점이 있다.

Apache는 WAS로 Apache Tomcat을 연동하는 경우, mod_jk, mod_proxy, mod_proxy_ajp 방식을 Apache 자체적으로 지원하기 때문에 다양하고 효율적으로 연동이 가능하다.

또한, Nginx에 비해 모듈이 다양하다.

Apache의 한계

클라이언트 접속마다 process 혹은 thread를 생성하는 구조이다. 따라서 여러 클라이언트로부터 동시 접속 요청이 들어온다면 CPU와 메모리 사용량이 증가하고 추가적인 process/thread 생성 비용이 드는 증 대용량 요청에서 한계를 보인다.

또, Apache 서버의 프로세스가 blocking 될 때 요청을 처리하지 못하고 처리가 완료될 때까지 대기 상태에 머무른다. 이는 keep alive(접속 대기)로 해결이 가능하지만 효율이 떨어진다.

 


🍏 Nginx

Nginx의 가장 큰 특징은 Event Driven 방식이다. Event Driven 방식은 요청이 들어오면 어떤 동작을 해야하는지만 알려주고 다른 요청을 처리하는 방식이다.

그렇기 때문에 프로세스를 fork하거나 스레드를 사용하는 아파치와 달리 CPU에 관계 없이 모든 IO들을 Event Listener로 미루기 때문에 흐름이 끊기지 않고 응답이 빠르게 진행된다. 즉, 1개의 프로세스로 더 빠른 작업이 가능하다.

Nginx는 한 개 또는 고정된 프로세스만 생성하고, 그 내부에서 비동기로 효율적인 방식으로 task를 처리한다. 따라서 동시접속자 수가 많아져도 추가적인 생성 비용이 들지 않는다.

비동기 이벤트 기반으로 요청하여 적은 양의 스레드가 사용되기 때문에 CPU 소모가 적다.

Context Switching 비용이 적다는 장점도 있다.

** Context Switching : A작업을 진행할 때 A스레드의 Context를 읽어오며, B스레드로 전환할 때 A스레드의 Context를 저장하고 B스레드의 Context를 읽어오는 일련의 반복작업을 한다. 즉, 스레드 갯수가 많아질 수록 context switching 작업은 더 빈번하게 일어나고 이 때문에 성능이 저하될 수 있다.

 

Apache는 안정성, 확장성, 호환성이 장점이라면, Nginx는 성능이 우세하고 속도가 빠르다는 장점이 있다!

profile
DCDI

0개의 댓글