본문 바로가기
Research/Server

서버_Nginx란

by RIEM 2023. 3. 6.

Nginx에 들어가기 전에 Apache에 대해 잠깐 집고 넘어가자.

Apache는 Nginx가 태어나기 전에 웹서버 시장을 주름잡던 형님 격이라고 보면 된다. 1995년 unix 기반의 최초 웹서버 NCSA HTTPd가 웹서버 시장의 주류였다. 하지만 NCSA는 잔버그가 많아 불편함이 많았는데, 이러한 버그와 구조를 개선한 이 Apache였다. Apache는 1996년 출시 직후 웹서버 점유율 41%를 기록하며 1위의 자리에 올랐다.

그렇다면 Apache는 어떻게 작동할까? Apache는 스레드 / 프로세스 기반으로 스레드 하나가 요청 하나를 맡아서 처리를 하는 방식이다. 그만큼 사용자의 요청이 증가하면 생성되는 스레드도 증가하는데, 이로인해 메모리 및 CPU 리소스 소모량이 높아진다. 핵심은 하나의 스레드가 하나의 클라이언트인 것이다.
Apache는 요청이 들어올 때마다 connection process라는 것을 만든다. 요청이 혹시 많이 들어올 지도 모르기 때문에 prefork 기능으로 미리 connection process를 생성해두는 방식으로 요청을 처리한다.

Apache의 장점으로는 윈도우를 포함한 여러 운영체제에 이식하기 좋다. 게다가 모듈 방식으로 확장하기가 편한 구조도 장점이다. 하지만 서버에 동시 연결 작업이 점점 증가하면서 에러가 발생하는 C10K 문제를 제대로 해결하지 못한 것이 큰 단점이다.

이런 상황에서 나타난 것이 Nginx다.

Nginx는 요청이 많은 웹사이트에 확장성을 부여하기 위해 설계한 비동기 이벤트 방식
의 웹서버 소프트웨어다. 러시아 프로그래머 Igor Sysoev가 Apache의 C10K 문제를 해결하기 위해 오픈소스로 만들었다.핵심은 적은 리소스로 높은 성능을 내는 것이다. 처음에는 Apache를 대체하기 보다는 함께 사용하는 보완제 성격이 강했다.

Nginx는 하나의 스레드에 커넥션 하나씩 할당하는 방식이 아니라 여러 커넥션을 Event Handlerd에 모아두고 비동기 방식으로 처리 이벤트 드리븐 방식으로 처리한다.

Nginx의 구조는 master process와 worker process로 구분된다. master process는 CPU 코어의 수 만큼 worker process를 만들어내고, 이렇게 만들어진 worker process는 클라이언트의 요청을 직접 처리하는 일꾼 역할을 한다.

nGinx는 동시 접속 요청를 처리하는데 탁월해서, 고질적인 C10K(Connection이 10000 넘어가면 발생하는 Problem)에 강하다. 게다가 SSL 처리와 캐싱 기능이 있어서 어플리케이션 서버의 부담을 덜어준다. 그 외 CORS, TCP/UDP 커넥션 부하 분산, HTTP/2 등 여러 이점이 있다.

이후 Apache는 여러 커넥션들을 처리하는 기능의 모듈을 추가하는 등의 행보를 보였으나 동시 커넥션을 다루는 성능은 Nginx이 우수하다는 평을 받고 있다.

댓글