안녕하세요 :)
오늘은 평소 업무와는 조금 색다른 Apache와 NginX 웹 서버에 대한 공부를 해보았습니다.
이번에 맡은 프로젝트의 경우 폐쇄망 내부 웹서버 설치가 필요해 이런저런 많은 시행착오를 거치고 있습니다.

웹 서버란?
웹서버는 사용자의 웹 브라우저로 웹 콘텐츠를 전송해 주는 World Widw Web의 근간이 되는 소프트웨어 애플리케이션 혹은 하드웨어 기기를 말합니다. 클라이언트-서버 모델에서 중요한 역할을 하며, 클라이언트는 이를 통해 웹 페이지와 다른 리소스를 받게 됩니다.
웹 서버 소프트웨어
흔히 사용되는 웹 서버 소프트웨어는 아래와 같습니다.
- Apache
- NginX
- Microsoft Internet Information Service
- LiteSpeed
- Lighttpd
Apache vs NginX
그중 많은 사람들이 애용하는 웹 서버 소프트웨어로 Apache와 NginX가 있습니다. 이용자가 많다는 건 그만큼 디버깅이 용이하다는 의미이므로 이번 프로젝트에서는 Apache와 NginX를 비교 분석 했습니다.
Apache-pefork
- 복수의 프로세스를 생성해 병렬처리.
- 가장 간단한 구조이며 구축이 쉽다.
- 비교적 느리고 메모리 공간을 많이 차지한다.
- Context switching 비용 발생.
Apache-worker
- 복수의 프로세스안에 복수의 스레드로 병렬처리
- Apache-prefork 방식에 비해 성능이 좋지만 다수의 유저가 한 번에 몰리는 게 아니라면 큰 차이는 없다.
- 이벤트 방식에 비하면 여전히 느리고 메모리를 많이 차지한다.
- Context switching 비용 발생.
NginX
- 싱글 스레드 Master-Worker process 모델
- 가장 메모리를 적게 차지한다.
- Context switching overhead가 발생하지 않는다.
- CPU를 효율적으로 사용한다.
- 복잡한 구조.
- 구축과 디버깅이 상대적으로 어렵다.
그렇다면 NginX가 항상 옳은 걸까요?
위 내용만 본다면 NginX가 항상 Apache보다 좋다고 느껴질 수 있습니다. 하지만 기타 어느 프로그램과 마찬가지로 상황에 따라 NginX가 적절할 수도 있고 부적절할 수도 있을 것 같습니다.
NginX의 구동방식을 한 줄로 요약하자면 이벤트 핸들러에 의해 싱글 프로세스 스레드가 non-blocking으로 작업을 처리합니다. 만약 시스템 콜을 해야하는 이벤트가 한꺼번에 많이 발생한다면 싱글 스레드이므로 모든 작업이 큐에 쌓이게 됩니다. I/O 작업의 경우 하드웨어의 성능에 영향을 받으니 해당 프로레스 시간이 오래 걸리면 성능저하가 발생할 수 있습니다.
따라서 단순히 적은량의 데이터를 주고받거나 캐싱을 하는 등의 역할을 맡는 서버에서는 그 성능을 제대로 발휘할 수 있습니다. 하지만 복잡한 CGI 프로세싱을 거쳐야 하거나, 영상 데이터 혹은 데이터베이스 프로세싱을 거치는 데에는 부적절하다고 볼 수 있습니다.
참조: https://brainbackdoor.tistory.com/28
Apache MPM 및 Nginx
Apache Web Server (html, css, js, img 등) 정적인 부분은 웹 서버에서 처리 MPM (Multi-Processing Module) : 여러 개의 프로세싱 모듈 기반의 서비스를 제공 병렬처리를 수행하지 않는 서버는 특정 클라이언트가
brainbackdoor.tistory.com
https://nesoy.github.io/articles/2018-11/Context-Switching
Context Switching이란?
nesoy.github.io
https://kscory.com/dev/nginx/install
'Back-End > Server' 카테고리의 다른 글
[CORS] Corse의 credentials: true의 의미 (0) | 2022.01.03 |
---|---|
Server App server VS Web server (0) | 2021.11.24 |