NGINX

내위키
Dennis (토론 | 기여)님의 2021년 11월 28일 (일) 11:17 판 (새 문서: 러시아의 프로그래머인 이고르 시쇼브(Игорь Сысоев)가 아파치 웹 서버의 이른바 C10K 문제를 해소하기 위해 개발을 시작한 오픈...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

러시아의 프로그래머인 이고르 시쇼브(Игорь Сысоев)가 아파치 웹 서버의 이른바 C10K 문제를 해소하기 위해 개발을 시작한 오픈 소스 웹 서버로, 이후 시쇼브가 설립한 NGINX Inc.가 프로젝트를 운영하다가 F5 네트웍스가 이 회사를 인수하면서 지금은 F5가 운영하고 있다.

아파치 웹 서버는 접속 요청이 들어올 때마다, 즉 네트워크 소켓이 필요할 때마다 프로세스 또는 스레드를 새로 만들어서 배당하는 구조인데, 이 때문에 소켓이 10,000개 이상 열리면 아무리 하드웨어의 성능이 좋아도 웹 서버의 성능이 급격하게 저하되는 현상이 일어나며 이를 이른바 C10K 문제라고 부른다. 사실 이 문제는 정확히는 아차피 웹 서버가 잘못되었다기보다는 UNIX 계열 운영체제의 입출력(I/O) 시스템에 한계가 있기 때문이다. 지금 주류를 이루는 UNIX 계열 운영체제들을 설계할 당시에는 동시에 열리는 소켓 수가 10,000개나 된다는 건 상상도 못할 일이었고, 따라서 소켓이 필요할 때마다 프로세스나 스레드를 새로 만드는 게 별 문제가 안 되었다. 그러나 인터넷 시대가 열리고 서버가 처리해야 하는 동시 접속 수가 급격하게 불어나면서 문제가 제기 되기 시작했다. 이를 극복하기 위한 방안 중 하나가 비동기 이벤트 기반의 싱글 스레드 방식으로, 즉 소켓이 필요할 때 프로세스나 스레드를 새로 만들지 않고 하나의 스레드가 모든 요청을 처리하되, 이벤트가 발생할 때에만 해당 소켓의 요청을 처리하는 방식이다. Node.js도 이러한 방식을 사용하고 있으며, C10K 문제를 극복하기 위해 NGINX가 채택한 해결책도 역시 비동기 이벤트 기반의 싱글 스레드다. 따라서 새로운 요청이 발생했을 때에도 자원 소모가 아차피에 비해 확실히 적다.

그렇다고 NGINX가 장점만 있는거 하면 그렇지는 않다. 아파치 웹 서버의 장점 중 하나는 폴더 별로 .htaccess 설정 파일을 만들어서 폴더에 따라 웹 서버의 동작을 다르게 만들 수 있다. NGINX는 이러한 기능이 없으며 하나의 설정 파일만 존재한다. 다만 이는 양날의 검이라는 면도 있는데, 폴더에 따라 .htaccess 파일을 읽어서 처리하는 과정이 성능을 떨어뜨리는 원인으로 지적되기 때문이다.

추가 기능을 위한 모듈 제작이 NGINX에 비해 쉽다는 것도 아파치 웹 서버의 장점으로 꼽힌다. 오랜 역사를 가진 웹 서버 답게 이미 만들어져 있는 모듈도 많다. 하지만 실제로 쓸모 있는 모듈은 많지 않고 오히려 자원만 잡아먹는다는 반론도 있다. 아무튼 반드시 어느 한 쪽이 정답은 아니며, 어떤 웹 서비스를 제공할 것인가에 따라서 적절한 웹 서버를 선택할 필요가 있다. 예를 들어 웹 호스팅을 제공한다면 폴더별 설정이 불가능한 NGINX보다는 아파치 웹 서버가 서비스를 제공하기가 좋다. 반면 서버 하나가 수만 개 이상의 소켓을 열어야 하는 서비스에서는 NGINX의 성능이 확실히 뛰어나다.

현재 NGINX는 오픈 소스에 무료로 사용할 수 있는 NGINX, 그리고 구독 기반 유료 웹 서버인 NGINX Plus 두 가지 버전이 있다. NGINX Plus는 NGINX의 기능에 더해 헬스 체크, 향상된 캐시 제어, 스트리밍 미디어 배포와 같은 고급 기능을 제공한다.