Sam Story

엔진엑스 (NGINX) 본문

개발지식

엔진엑스 (NGINX)

Sam H 2024. 5. 8. 18:39

 
지난번 아파치에 이어 오늘은 엔진엑스에 대해 포스팅 해보려 한다.
 
 
 

엔진엑스 (NGINX) 란?

 
엔진엑스는 아파치와 마찬가지로 웹 서버 소프트웨어로 가벼움과 높은 성능을 목표로 한다.
웹 서버, 리버스 프록시 기능을 갖고 있다.
 
프록시란? 
최종 사용자와 다른 웹사이트 또는 서버 사이의 가교 역할을 하는 물리적 또는 가상 서버
 
 
엔진엑스는 요청에 응답하기 위해 비동기 이벤트 기반 구조를 가진다.
 
이러한 구조는 아파치 HTTP 서버의 스레드/프로세스 기반 구조를 가지는 것과는 대조적이다.
때문에 엔진엑스의 구조는 서버에 많은 부하가 생길 경우의 성능을 예측하기 쉽게 해준다.
 
 
 

엔진엑스의 구조

nginx는 master process와 woker process로 구성된다.
event-driven 모델을 사용하고 worker process 사이에 요청을 효율적으로 분배하기 위해
OS 에 의존적인 메커니즘을 사용한다.
 
Event : 새로운 요청
 

Event-Driven 구조

 
- Master process
 
설정 파일을 읽고 유효성을 검사한다.
 
worker process 관리
 
 
- Worker process
 
모든 요청을 처리
 
개수는 설정 파일에서 정의
 
정의된 프로세스 개수와 사용가능한 CPU 코어 숫자에 맞게 자동 조정
 

엔진엑스(NGINX)의 구조

 

 

아파치(Apache) VS 엔진엑스(NGINX) 비교

 

Apache

요청 당 스레드 또는 프로세스가 처리 하는 구조

CPU / 메모리 자원 낭비

NGINX 보다 다양한 모듈 보유

PHP 모듈 등 직접 적재 가능

안정성 , 확장성 , 호환성 우세

동적 컨텐츠 단독 처리 가능
NGINX

비동기 이벤트 기반으로 요청

CPU / 메모리 자원 사용률 낮음

Apache에 비해 모듈이 적음

대량 접속자 대응 가능

비교적 최신이라 성능이 좋음

동적 컨텐츠 단독 처리 불가능

 
위의 표로 간단하게 아파치와 엔진엑스의 차이점을 정리해 보았다.
 
가장 큰 차이라고 생각하는 점은 대량 접속자를 대응 할 수 있다는 점이다.
 
이는 아파치와 엔진엑스의 구조적인 차이에서 생기는 점인데
 
아파치 서버는 클라이언트의 요청이 들어오면 요청마다 Thread를 만들어서 처리한다.
 
즉 클라이언트 요청당 하나의 쓰레드가 처리하는 구조인데
사용자가 많아지면 쓰레드 생성도 많아지고 이로인해 메모리 , CPU 낭비가 심해진다.
 
이러한 구조적인 문제를 해결한 웹 서버가 NGINX 이다.
 
 
 
아파치보다 역사가 오래되지는 않았으나 아파치가 많은 한계를 보이고 있는 상황에
 
엔진엑스는 가볍고 높은 성능을 무기로 점유율을 빠르게 늘려나가 현재는 시장점유율 1위가 되었다.
 
 
사실 이러한 아파치의 한계를 엔진엑스가 해소하는게 엔진엑스'만' 사용해서 해소하는게 아닌
아파치의 부하 문제를 엔진엑스'로' 줄여준다는 점도 있다.
 
엔진엑스는 웹서버답게, 정적파일에 대한 요청을 본인이 모두 처리하고
동적인 파일을 요청받았을 때만 뒤에 있는 아파치 서버와 커넥션을 형성하는 방식으로 말이다.
 
 
 
지금까지 엔진엑스에 대해서 알아보았는데 공부를 해보면서 느낀점은
서로 적대적인 관계가 아닌 우호적인 관계라는 점이다.
 
경우에 따라 적절하게웹 서버를 구축하는게 좋다가 결국 핵심인것 같다.

'개발지식' 카테고리의 다른 글

객체지향 프로그래밍  (5) 2024.09.23
REST,REST API  (0) 2024.08.21
아파치 (Apache)  (1) 2024.05.01
동기 , 비동기 (Synchronous , Asynchronous)  (0) 2024.04.24
싱글스레드 , 멀티스레드 (Single Thread , Multi Thread)  (0) 2024.04.17