본문 바로가기
Develop

[웹서버] Apache vs Nginx (Event-driven 구조란?)

by 루시킴 2021. 11. 6.

Apache와 Nginx 모두 웹개발의 필수적인 웹서버이다.

 

Apache

  • 국내는 물론 전세계적으로 부동의 1위를 지키고 있는 웹서버
  • Process 기반 방식으로 클라이언트의 요청을 처리
    • 요청에 따라 프로세스 또는 쓰레드를 생성하는 구조이므로 클라이언트의 요청이 많아질수록 Context Switching이 많아지면서 오버헤드 문제 발생
  • 다양한 모듈 제공 (MPM : Multi Processing Module)
  • 보안성 & 확장성 좋음

 

Nginx

  • 웹의 발전에 따라 트래픽이 많아지면서 Apache의 한계를 극복하기 위해 탄생한 웹서버
  • Event-driven 구조로 클라이언트 요청 병렬 처리를 진행 → 동시 커넥션 양 & 속도 대폭 향상
    • Master Process가 있고 설정에 맞게 Worker process를 생성
    • 이벤트 : 커넥션 형성/제거, 새로운 요청 처리하는걸 의미
    • 이벤트들은 OS커널이 Queue형식으로 Worker process에게 전달하고 처리될때까지 비동기방식으로 대기 
    • Worker process는 하나의 Thread로 이벤트를 처리해나감 
    • Worker process가 쉬지않고 계속해서 일함 → 서버 자원 효율적으로 사용
    • 만약 시간이 오래걸리는 작업이 있다면 Thread Pool에게 해당일을 위임하고 큐안의 다른 일을 처리
    • Worker process는 보통 CPU의 코어 개수만큼 생성 → CPU의 Context Switch를 대폭 감소 
  • 로드 밸런서 역할 → 요청을 여러서버로 분산 
  • SSL 터미네이션 수행 → 클라이언트와는 HTTPS통신을 하고 서버와는 HTTP 통신을 함
  • 개발자가 직접 모듈 개발하기 까다로움 
  • Worker process가 종료되면 해당 worker가 담당하고 있던 일들이 다 없어짐 

 

추가

두 웹서버는 애초에 만들어진 목적이 다르다. Apache 서버가 압도적이 1위를 달리고 있을때는 안정성&확장성이 중요할때였고, Nginx가 치고 올라올때는 동시커넥션이 중요한 때였다.  

'Develop' 카테고리의 다른 글

[보안] SSL (Secure Socket Layer) 동작방식  (0) 2021.11.06

댓글