본문 바로가기
OS/Linux

[WEB] Nginx

by BTC_금쪽이 2023. 11. 1.

이번 시간에는 Nginx에 대해서 알아보도록 하겠습니다.

 

Nginx를 알아보기 앞서, 우선 Web Server에 대해서 간단히 알아본 후 Nginx를 소개해드릴께요.

 

Web Server

웹 서버는 클라이언트로부터 HTTP 요청을 받아 HTML 문서나 각종 리소스(Resource)를 전달하는 컴퓨터입니다.

 

요청에 따라 아래의 두 가지 기능 중 적절하게 선택하여 수행합니다.

기능 1 - 정적인 컨텐츠를 제공한다.
- WAS를 거치지 않고 바로 자원을 제공한다.
기능 2 - 동적인 컨텐츠 제공을 위한 요청을 전달한다.
- 클라이언트의 요청(Request)을 WAS에 보내고, WAS가 처리한 결과를 클라이언트에게 전달(응답, Response)한다.
- 클라이언트는 일반적으로 웹 브라우저를 의미한다.

Web Server에는 Apache Server NginX가 있는데 각각의 특성은 아래와 같습니다.

  • Apache Server: BSD, Linux 등 Unix계열뿐 아니라 Windows와 같은 기종에서도 운용 가능.
  • NginX: 가벼움과 높은 성능을 목표로 함, 웹 서버, 리퍼스 프록시 및 메일 프록시 기능을 가짐

우리는 이중에서 Nginx에 대해서 자세히 알아보도록 하겠습니다.

 

Nginx란?

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

 

Nginx의 구조

그렇다면 Nginx는 어떠한 구조로 되어있길래 그 많은 동시 connection을 유지할 수 있을까요?

Nginx의 구조

  • Nginx는 설정파일을 읽고, 설정에 맞게 worker process를 생성하는 master process가 있습니다.
  • worker process는 실제로 일을 하는 프로세스이며 worker process가 만들어질 때 지정된 listen 소켓을 배정받습니다.
  • 그리고 그 소켓에 새로운 클라이언트의 요청이 들어오면 connection을 형성하고 처리합니다.
  • connection은 정해진 Keep-Alive 시간만큼 유지됩니다. 하지만 connection이 형성되었다고 해서 worker process가 해당 connection 하나만 담당하지는 않습니다
  • 형성된 connection으로부터 아무런 요청이 없다면 새로운 connection을 형성하거나 이미 만들어진 다른 connection으로부터 들어온 요청을 처리합니다.

Nginx의 장단점

Nginx의 단점

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

Nginx의 장점

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

 

Apache의 한계

클라이언트 접속마다 Process 혹은 Thread 를 생성하는 구조입니다. 1만 클라이언트로부터 동시접속 요청이 들어온다면 CPU 와 메모리 사용이 증가하고 추가적인 Process/Tread 생성비용이 드는 등 대용량 요청에서 한계를 보입니다. 또한, Apache 서버의 프로세스가 blocking 될 때 요청을 처리하지 못하고 처리가 완료될 때까지 대기상태에 있습니다. 이는 Keep Alive(접속대기) 로 해결이 가능하지만, 효율이 떨어집니다.

 

Nginx 의 정리

Nginx 는 위에서 언급했듯이 Event-Driven 방식으로 동작합니다. 즉, 프로그램 흐름이 이벤트에 의해 결정이 됩니다. 한 개 또는 고정된 프로세스만 생성하고, 그 내부에서 비동기로 효율적인 방식으로 task 를 처리합니다. Apache 와 달리 동시접속자 수가 많아져도 추가적인 생성비용이 들지 않습니다.

  • 비동기 이벤트 기반으로 요청하여 적은양의 스레드가 사용되기 때문에 CPU소모가 적습니다.
  • Apache 와 달리 CPU 와 관계없이 I/O 들을 전부 Event Listener로 미루기 때문에 흐름이 끊이지 않습니다.
  • context switching 비용이 적습니다.

 

이렇게 Nginx에 대해서 설명을 드려봤습니다.

물론, 그렇다고 해서 Nginx 가 Apache보다 좋다. 라고 말씀드릴 순 없습니다.

 

무엇이든, 본인의 환경과 본인이 관리할 Application을 기반으로 어떤 도구를 활용할지 잘 선택하시고

본인이 어떤 것이 더 컨트롤 하기 좋은지 확인해보고 결정하시는 것을 추천드립니다.

 

감사합니다.

'OS > Linux' 카테고리의 다른 글

[WEB] Apache  (0) 2023.11.11
리눅스 서버 보안 설정  (0) 2023.11.08
리눅스 디렉토리  (0) 2023.10.09
리눅스 Log 파일 종류  (0) 2023.09.15
리눅스 find 명령어 활용하기  (0) 2023.09.02

댓글