Node는 NGINX와 비슷하다? - 42-Gang/project-wiki GitHub Wiki
서론
예전에 진행했던 NGINX 만들기 프로젝트에서 느낀 점이 있다. Node.js
를 공부하다 보니, 구조적으로 NGINX
와 닮은 점이 꽤 많다는 것이다. 싱글 스레드로 고성능 네트워크 처리를 지향한다는 점에서 특히 그렇다.
NGINX란?
NGINX
는 이벤트 기반의 비동기 웹 서버로, 동시에 수많은 클라이언트의 요청을 처리할 수 있도록 설계되었다. 기본적으로 마스터 프로세스 + 워커 프로세스 구조를 가지며, 워커 프로세스는 싱글 스레드 이벤트 루프 기반으로 동작한다.
기존의 Apache
가 요청당 하나의 스레드를 사용하는 구조였다면, NGINX
는 하나의 워커가 수많은 요청을 비동기적으로 처리할 수 있는 구조로, 가볍고 빠르다.
어떤 점이 Node.js와 비슷할까?
Node.js
역시 이벤트 루프 기반, 비동기 I/O, 싱글 스레드 구조라는 점에서 NGINX
의 워커와 매우 유사하다. NGINX
가 여러 개의 워커 프로세스를 띄우는 것처럼, Node.js
도 cluster 모듈을 이용해 여러 프로세스를 띄울 수 있다.
물론 차이점도 있다:
NGINX
는 기본적으로 멀티 프로세스 구조Node
는 싱글 프로세스를 기반으로 하고 필요시 cluster로 확장
하지만 근본적인 구조와 비동기 처리 방식은 거의 동일하다.
결론
Node.js
와 NGINX
는 모두 비동기 이벤트 루프 기반의 고성능 네트워크 서버라는 공통점을 가진다. 각각 JS 런타임과 C 기반 웹 서버라는 차이는 있지만, 싱글 스레드 워커가 비동기적으로 수많은 요청을 처리한다는 구조적 유사성은 눈여겨볼 만하다. 이러한 구조는 경량 서버를 만들고자 할 때 매우 유용하다.