Front/WebServer

[Nginx] 차세대 경량 웹 서버 엔진엑스(Nginx)란?

헹창 2022. 12. 15.
반응형

NGINX

엔진엑스(NGINX)는 차세대 웹서버로 불리며, 동시접속 처리에 특화된 웹 서버 프로그램이다. Apache 보다 동작이 단순하고, 전달자 역할만 하기 때문에 동시접속 처리에 특화되어 있다.

 

동시접속자가 약 700명 이상이라면 서버를 증설하거나 NGINX 환경을 권장한다고 한다. 현재는 Apache 시장 점유율이 가장 높지만, 아마존 웹서비스(AWS) 의 시장 점유율은 44%에 달할정도로 가볍고 성능이 좋은 엔진이라고 한다.

웹 서버 시장 점유율 - 생활코딩 (https://opentutorials.org/module/384/3462)

NGINX 는 HTTP 웹 서버로 활용되기도 하고, 리버스 프록시 서버 (Reverse proxy server)로 활용하여 WAS 서버의 부하를 줄일 수 있는 로드 밸런서로 활용되기도 한다.

 

NGINX (웹 서버)의 역할

웹 서버의 역할을 복습?하자면,

1. 정적 파일 처리하는 HTTP 서버로서의 역할

웹 서버의 역할은 HTML, CSS, javascript, 이미지와 같은 정보를 웹 브라우저(Chrome, Lexplore, Opera, Firefox 등)에 전송하는 역할을 한다. 

2. 응용프로그램 서버에 요청을 보내는 리버스 프록시(reverse proxy)로서의 역할

https://icarus8050.tistory.com/57

리버스 프록시(reverse proxy)란 외부 클라이언트에서 서버로 접근 시, 중간에서 중개자 역할을 하여 내부 서버(응용프로그램 서버)로 접근할 수 있도록 도와주는 서버이며, 이를 활용했을 때 얻을 수 있는 장점은 다음과 같다.

  • 보안 : 외부 사용자로부터 내부망에 있는 서버의 존재를 숨길 수 있다. 모든 요청은 리버스 프록시 서버에서 받으며, 매핑되는 내부 서버로 요청을 전달한다. 또한 Nginx는 SSL 설정도 가능하다.
  • 로드밸런싱 : 리버스 프록시 서버가 내부 서버에 대한 정보를 알고 있으므로, 각 서버의 상태에 따라 부하를 분산시키며 요청을 전달할 수 있다.

niginx.conf 파일에서 location 을 사용하여 요청을 분산시킨다.

## reverse proxy 설정 예시 
## location 선언하지 않을 시 default 값인 80 포트로 설정됨
http {
    server {
        listen 80;
        location / {
            proxy_pass http://127.0.0.1:8081;
        }
    }
}

 

NGINX 구조

Nginx는 하나의 Master Process와 다수의 Worker Process로 구성되어 실행된다.

Master Process Worker Process (실제로 일을 하는 프로세스)
 ●  설정 파일을 읽고, 유효성을 검사한다.
 ●  Worker Process를 생성하고 관리한다.
 ●  Worker Process의 개수는 설정파일에서 정의되며, 정의된 프로세스 개수와 사용가능한 CPU 코어 숫자에 맞게 자동으로 조정된다.

 ●  생성된 워커 프로세스가 각자 지정된 listen 소켓을 배정받아 새로운 Client 요청이 들어오면 커넥션을 형성하고 처리한다.
 ●  커넥션은 정해진 Keep Alive 시간만큼 유지되며, 커넥션 하나만 담당하지 않는다.
 ●  형성된 커넥션에 아무런 요청이 없으면 새로운 커넥션을 형성하거나 이미 만들어진 다른 커넥션으로부터 들어온 요청을 처리한다.

 

NGINX 와 APACHE 처리 방식

NGINX

NGINX는 비동기 처리 방식 (Event-Drive) 구조로 한 개 또는 고정된 프로세스만 생성하여 사용하고, 비동기 방식으로 요청들을 동시처리할 수 있다.

https://icarus8050.tistory.com/57

그림에서 보이듯이 Nginx는 새로운 요청이 들어오더라도 새로운 프로세스와 쓰레드를 생성하지 않기 때문에 프로세스와 쓰레드 생성 비용이 존재하지 않고, 적은 자원으로도 효율적인 운용이 가능합니다. 이러한 Nginx의 장점 덕분에 단일 서버에서도 동시에 많은 연결을 처리할 수 있다.

 

Apache 

 Apache와 같은 웹서버는 클라이언트로부터 받은 요청을 처리할 때 새로운 프로세스 또는 쓰레드를 생성하여 처리한다.

요청마다 쓰레드가 생성되므로 접속하는 사용자가 많으면 그만큼 쓰레드가 생성되어 CPU와 메모리 자원의 소모가 커질 수밖에 없다.

https://icarus8050.tistory.com/57

Apache는 1996년 이래로 한번도 1등의 자리를 놓친적이 없다. 오픈소스이고, 무료로 사용할 수 있는 소프트웨어이다.

하지만 아파치가 만들어진 시대의 요구사항이 이제는 유효하지 않은 것도 있고, 새로운 요구사항과 충돌하는 것도 있을 것이다. 

 


참고

 

728x90
반응형

댓글

추천 글