Nginx란?

구교석·2024년 4월 7일
post-thumbnail

Nginx란?

Nginx란 트래픽이 많은 웹사이트의 서버(WAS)를 도와주는 비동기 이벤트 기반구조의 경량화 웹 서버 프로그램입니다. 클라이언트로부터 요청을 받았을 때 요청에 맞는 정적 파일을 응답해주는 HTTP Web Server로 활용되기도 하고, 또는 Reverse Proxy Server로 활용하여 WAS의 부하를 줄일 수 있는 로드밸런서 역할을 하기도 합니다.

Nginx 탄생 배경

Nginx 가 탄생하기 전 Apache Server 는 매우 혁식적인 웹 서버로 여겨졌습니다.
왜냐하면 기존 웹 서버 방식(apache server 전)에는 많은 버그가 많았기 때문에 클라이언트가 사용하기에 매우 불편했기 때문입니다.
Apache 재단에서 만든 Http Web Server 이며, 굉장히 다양하고 기능적인 면에서 우수합니다.
또한, 거의 모든 OS 에서 실행되며, 다른 유명한 스프트웨어 프로젝트와의 문서화가 잘 되어있고 통합 지원 등의 이점이 있습니다.

Apache Server 구조


Client 요청에 대해 Apache 자식 프로세스를 생성하며 처리합니다.
해당 방식은 Apache 설치시 Default 값입니다.
하나의 자식 프로세스 당 하나의 쓰레드를 갖는 구조로, 자식 프로세스는 최대 1024 개까지 가능합니다.
각 자식 프로세스는 독립된 메모리 공간을 가집니다.
응답 프로세스를 미리 띄어놓고 클라이언트 요청 시 자식 프로세스가 반응하는 방식입니다.
일반적으로 Single CPU 또는 Dual CPU 에서 성능이 더 좋습니다.

Apache Server 의 한계

1900 년대 컴퓨터가 많이 보급되기 이전에는 Apache Server 는 기존의 웹 서버를 대체 할 수 있는 매우 혁식적인 웹 서버였습니다.
하지만 컴퓨터 보급률이 기하급수적으로 올라가면서, Apache Server 에 동시에 많은 클라이언트가 요청을 보내게 되었고 Apache Server 의 한계가 드러나기 시작합니다 😱

앞에서 살펴보았던 것처럼 Apache Server 는 클라이언트의 요청 마다 Connection 을 생성하며 이는 곧 프로세스/쓰레드 생성을 의미합니다.
하지만 대량의 클라이언트(1만 이상) 가 동시에 Connection 을 맺는다면 CPU/메모리 사용이 증가하고 프로세스/쓰레드 생성 비용이 드는 등 요청에 한계가 존재합니다 🚫

초창기 Nginx 는 Apache Server 의 구조적인 문제를 해결하기 위헤 함께 사용되었습니다.
Nginx 또한 웹 서버였지만 그당시 완전히 Apache Server 을 대체할 목적은 아니였으며, Apache Server 의 문제점을 보완하는 용도로 사용되었습니다.

Nginx 의 구조와 동작 원리

해당 이미지는 Nginx 의 구조를 도식화한 이미지입니다.
Nginx 는 master process 을 생성하는 worker process 을 가집니다.
worker process 는 실제로 일을 하는 프로세스이며 worker process 가 만들어 질 때 지정된 listen 소켓을 배정받습니다.
그리고 해당 소켓에 새로운 클라이언트의 요청이 들어오면 connection 을 형성하고 처리합니다.
connection 은 정해진 Keep-Alive 시간만큼 유지되며 여기서 중요한 구조적 특징은 connection 이 형성되었다고 해서 worker process 는 해당 connection 하나만 담당하지 않습니다 ❗️

Nginx의 장단점

Nginx의 단점

동적 컨텐츠를 기본적으로 처리 할 수 ​​없음
동적 콘텐츠에 대한 PHP 및 기타 요청을 처리하려면 NGINX가이를 실행하기 위해 외부 프로세서로 전달하고 렌더링 된 콘텐츠가 다시 전송 될 때까지 기다려야함(프로세스 속도 저하).
즉, 동적 웹 페이지 컨텐츠를 가진 모든 요청을 위해 외부 자원과 연계(php-fpm)

Nginx의 장점

이벤트 중심 접근 방식을 사용하여 클라이언트 요청 제공
제한된 하드웨어 리소스로도 여러 클라이언트 요청을 동시에 효율적으로 처리
단일 스레드를 통해 여러 연결을 처리 가능
최소한의 리소스로 웹 서버의 아키텍처를 개선하기 위해 독립형 HTTP 서버로 배치 가능

참고 사이트


Nginx란 무엇인가?
Nginx란 무엇인가?

profile
끊임없이 노력하는 개발자

0개의 댓글