Nginx
NGINX is a high-performance HTTP server, reverse proxy, and IMAP/POP3 proxy server.
— Nginx 오픈소스 프로젝트 커뮤니티 메인 기여 가이드라인의 공식 설명
수만 명의 사용자가 동시에 들이닥쳐도 끄떡없이 트래픽을 분산 전송해 주는 백엔드의 듬직한 문지기이자, 전 세계 상위 100만 개 웹사이트 점유율 1위를 유구하게 고수하고 있는 인프라 엔지니어들의 종교. 분명 가이드라인대로 설정 파일 괄호와 세미콜론을 다 맞게 쓴 것 같은데, 왜 계속 502 Bad Gateway 에러를 콘솔창에 띄우며 요청을 튕겨내는지 등골이 오싹해질 뿐이다.(...)
1. 개요
2004년 러시아의 천재 개발자 이고르 시소예프가 당시 독점 공룡이었던 아파치(Apache)의 심각한 메모리 연산 낭비 문제를 격파하기 위해 공개한 초경량 오픈소스 비동기 이벤트 기반 웹 서버 및 리버스 프록시(Reverse Proxy) 소프트웨어. 극도로 가벼운 구조 덕분에 전 세계 상위권 초거대 서비스들의 웹 인프라 최전선을 모조리 독점 점유하고 있으며, 단순한 정적 웹 배포뿐만 아니라 서버 부하 분산(Load Balancing), SSL 암호화 가속기, 게이트웨이 웹 인프라의 마스터 키로 전 세계 엔지니어들의 칭송을 한 몸에 받고 있다.
2. C10K 문제를 격파한 영리한 비동기 이벤트 루프
고대의 황제였던 아파치(Apache) 웹서버는 클라이언트 요청 1개당 프로세스 또는 스레드를 1개씩 할당하는 '1:1 스레딩 아키텍처'를 사용했다. 이 방식은 동시 접속자 수가 10,000명을 넘기는 순간(C10K 문제), 스레드 전환에 따르는 컨텍스트 스위칭(Context Switching) 연산 부하로 인해 CPU가 그대로 주저앉는 병목을 드러냈다. Nginx는 이를 완전히 비틀어 단 몇 개의 워커 프로세스(Worker Process)만 띄워놓고, 쏟아지는 수만 요청들을 전부 비동기 논블로킹 방식으로 접수하는 이벤트 루프(Event Loop) 아키텍처를 채택했다.1 요청 처리가 막히면 다른 요청을 먼저 들여다보는 이 영리한 비동기 접수 방식 덕분에, 메모리 사용량은 아파치와 비교조차 할 수 없을 만큼 비약적으로 가볍고 전송 속도는 번개처럼 빠른 초경량 트래픽 안내원이 탄생하게 되었다.
3. 인프라의 꽃, 리버스 프록시와 로드 밸런싱
현대 백엔드 엔지니어링에서 Nginx가 진정으로 찬양받는 이유는 바로 리버스 프록시(Reverse Proxy) 역할 덕분이다. 백엔드 WAS가 세상 밖에 직접 노출되지 않도록 전면에 서서 방패 역할을 수행하며, 외부 공격으로부터 내부 서버 IP 주소를 원천 격리하여 보안 신뢰성을 완벽 보장한다. 또한, 여러 대의 뒷단 API 서버들에게 동시 부하를 골고루 나누어 뿌려주는 로드 밸런싱(Load Balancing) 설정도 단 몇 줄의 단순 설정 파일 세팅만으로 물 흐르듯 가볍게 구현해 낸다.대기업 연말 선착순 이벤트 트래픽 폭탄도 Nginx와 오토 스케일링 설정 덕분에 안심하고 버티는 중이다.2 여기에 더해 자주 사용되는 정적 이미지나 응답 데이터를 Nginx 단에 직접 캐싱(Caching)해 두는 기능을 지원하여, 무겁고 값비싼 WAS 비즈니스 로직을 전혀 거치지 않고도 트래픽 요청의 80% 이상을 현관 입구에서 순식간에 차단/반환함으로써 전산 인프라 비용 다이어트의 1등 공신으로 우뚝 서 있다.
4. Bad Gateway와 세미콜론의 족쇄
4.1. Bad Gateway
전 세계 수많은 웹 서퍼들과 개발자들을 좌절시키는 악명 높은 에러 화면이다. 이 메시지는 Nginx 자체는 아주 싱싱하게 살아 있으나, Nginx 뒷단에 세워둔 진짜 백엔드 서버(WAS나 Node.js 런타임 등)가 과부하로 사멸했거나 포트 통신 바인딩이 꼬여서 중간 중계가 처참히 끊어졌음을 대변하는 차가운 조의문과 같다. 백엔드 개발자들은 인프라 콘솔에 저 에러가 뜨는 순간, 'Nginx가 드디어 뒷단 애들이 죽었다고 선고를 내렸구나'라며 새벽에 졸린 눈을 비비며 서버 인스턴스를 긴급 복구하는 눈물 어린 유지보수를 진행해야 한다.(...) 또한 설정 파일 수정 시 마지막 단에 세미콜론(';') 하나만 빠뜨려도 컴파일 시동 자체가 단호하게 거부당하는 매정한 규칙으로도 유명하다.
5. 여담
- 개발자가 직접 수집하는 성능 보장: 이고르 시소예프는 원래 2002년경 자신이 재직 중이던 러시아 통신사 람블러(Rambler)의 실시간 시스템 내부 웹 아키텍처 트래픽 폭증을 개선하기 위해 개인 릴리즈 취미 프로젝트로 Nginx 개발을 시작했다. 전 세계 서비스들의 무시무시한 성능 향상이 점차 구전으로 알려지며 2004년에 오픈소스로 당당히 배포되었고, 2011년에는 전용 기업(Nginx, Inc.)을 따로 창립하여 상용 솔루션 시장까지 폭넓게 확장하였다.
- F5 Networks로의 수천억대 인수극: 2019년 글로벌 애플리케이션 보안 및 인프라 서비스 기업인 F5 Networks가 Nginx 소프트웨어의 원천 가치를 깊이 있게 인정하여, 자그마치 6억 7천만 달러(한화 약 8,000억 원)라는 어마어마한 현금 보따리를 내밀고 기업 전체를 통째로 인수합병하여 IT 업계에 기분 좋은 충격을 안겨주었다.
- 아파치의 굴욕: 2020년대 초반에 이르러 전 세계 모든 활성 웹사이트 점유율 순위에서 마침내 Nginx가 오랜 세월 황제로 군림하던 아파치(Apache)의 점유율 왕좌를 완벽하게 뒤흔들고 탈탈 털어버려 공식 1위를 쟁취하는 드라마 같은 세대교체를 무대 위에서 시현하였다.
6. 관련 문서
각주
-
아파치가 CPU 전력을 소모해가며 끊임없이 가상 스레드들 간의 우선순위를 번갈아 처리할 때, Nginx는 단지 이벤트 큐에 요청을 예쁘게 쌓아두고 커널 레벨의 전용 입출력 통지(epoll, kqueue) 장치들로부터 준비 완료 신호를 수신해 신속 전송하는 제로 오버헤드 퍼포먼스를 유지한다. ↩
-
실제로 사용자와 Nginx 사이의 무거운 암호화 통신 구간(HTTPS)을 Nginx 단에서 완전히 종결하고, 뒷단 내부 서버 간에는 가벼운 평문 HTTP 통신으로 연결하는 SSL Termination 기법을 쓰면 백엔드 WAS 가동 서버들의 CPU 연산 부담을 비약적으로 줄일 수 있다. ↩