안녕하세요 씨앤텍 시스템즈 최홍준 연구원입니다.
이번 포스트는 웹 서버 소프트웨어 중 각광받고 있는 Apache와 NginX에 대해서 비교해 보았습니다.
2017년 기준 실질적으로 작동하는 웹 사이트들에서 쓰는 웹 서버 소프트웨어 순위
1위. Apache ( 44.89% )
2위. NginX
한국 전체 등록 도메인 순위
1위. Apache ( 42.39% )
2위. NginX ( 24.73% )
2019년 현재 서버 부담이 비교적 아파치보다 적은 NginX로 전향하는 추세로 구글 트렌드로 검색을 양을 비교 시
NginX가 점점 많아지는 걸 확인할 수 있습니다.
NginX가 Apache보다 서버에 부담이 적은 이유를 설명해 드리겠습니다.
[ Apache ]
1. 스레드 / 프로세스 기반 구조
- Apache는 클라이언트 요청 하나당 스레드 하나가 처리하는 구조로 사용자가 많으면 스레드 생성, 메모리 및 CPU 낭비가 심합니다.
[ 요청이 많을수록 CPU와 메모리 사용이 증가하기 때문에 성능이 저하될 수 있습니다. ]
2. MPM 방식 처리 ( Multi Processing Module )
2-1. Prefork MPM
2-1-1. 하나의 자식 프로세스가 하나의 스레드를 갖는 구조로, 자식 프로세스는 최대 1024개까지 가능합니다.
2-1-2. 스레드 간 메모리 공유를 하지 않습니다. ( 독립적이지만 메모리를 많이 사용 )
2-1-3. 실행 중인 프로세스를 복제하여 실행합니다. ( 메모리 영역까지 복제 )
2-1-4. 응답 프로세스를 미리 띄어놓고 클라이언트 요청 시 자식 프로세스가 반응하게 되는 방식입니다.
2-1-5. 디버깅이 빈약한 플랫폼에서 쉬운 디버깅이 가능합니다.
2-1-6. 일반적으로 Sing CPU 또는 Dual CPU에서 성능이 더 좋습니다.
2-2 Worker MPM
2-2-1. Prefork보다 메모리 사용량이 적고 통신량이 많거나 동시 접속자가 많은 사이트에 적합합니다.
2-2-2. 프로세스당 스레드가 최대 64개의 스레드 처리가 가능하고 각 스레드는 한 번에 한 연결을 담당합니다.
2-2-3. 스레드 간에 메모리를 공유합니다.
2-2-4. Worker 방식은 일반적으로 Multi CPU 시스템에서 성능이 좋습니다.
Apache 서버의 프로세스가 블록킹(blocking)이 되면 요청을 처리하지 못하고, 처리가 완료될 때까지 계속 대기합니다.
Keep Alive를 이용해 해결이 가능하지만, Keep Alive 때문에 대량 접속 시 효율이 떨어집니다.
* Keep Alive이란 한 번 통신이 이루어지면 접속이 끊어 버리지 않고 KeepAliveTimeOut 시간 동안 끊지 않고 다음 접속 대기하는 것입니다.
[ NginX ]
[ 프로그램의 흐름이 이벤트에 의해 결정이 되는 Event Driven 방식의 웹 서버입니다.]
1. Event-Driven 처리 기반 구조
- Event-Driven 처리 기반 구조는 여러 개의 커넥션을 모두 Event-Handler를 통해 비 동식 방식으로 처리해 먼저 처리되는 것부터 로직이 진행하도록 합니다. 이러한 기법의 주 사용 목적은 대화형 프로그램을 만드는 데 사용하는데 PCP 처리와 유사합니다.
* Event-Driven 방식이란 요청에 대한 각 상태를 정해서 Event가 발생할 때마다 event를 처리
[ NginX는 스레드를 많이 사용하지 않기 때문에context Switching비용이 적고CPU소모도 낮습니다. ]
[ 적은 수의 스레드로 효율적으로 일 처리하며, 스레드당 할당되는 메모리도 적게 사용하는 구조 입니다. ]
Event-Driven 처리 방식을 사용하다 보니 프로세스를 Fork 하거나 스레드를 사용하는 아파치와 달리
CPU와 관계없이 모든 IO들을 전부 Event Listener로 미루기 때문에
흐름이 끊기지 않고 응답이 빠르게 진행이 되어 1개의 프로세스로 더 빠른 작업이 가능하게 될 수 있습니다.
이 때문에 메모리 측면에서 NginX가 System Resource를 적게 처리한다는 장점이 있습니다.
[ Apache / NginX ]
Apache가 좋은지 NginX가 더 좋은지 결론을 내릴 수가 없습니다. 각 소프트웨어마다 다른 방식의 장점을 가지고 있어 상황에 맞게 혹은 자신이 더 사용하기 편한 소프트웨어를 사용하는게 맞습니다. 하지만 서버에 부담을 줄이고자 하는 중소기업에서는 NginX를 이용하여 서버에 대한 부담을 낮춰 사용할 수 있습니다.
'Web Programming' 카테고리의 다른 글
Adobe Illustration Working Level 2 (0) | 2020.08.21 |
---|---|
Tensorflow란? (0) | 2020.07.23 |
cmd를 활용한 mySql 실행과 사용 (0) | 2019.10.16 |
Android Studio + GenyMotion 연동 (2) | 2019.09.24 |
REST, 디자인 패턴, JSON Parsing (0) | 2019.08.07 |