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.jsNGINX는 모두 비동기 이벤트 루프 기반의 고성능 네트워크 서버라는 공통점을 가진다. 각각 JS 런타임과 C 기반 웹 서버라는 차이는 있지만, 싱글 스레드 워커가 비동기적으로 수많은 요청을 처리한다는 구조적 유사성은 눈여겨볼 만하다. 이러한 구조는 경량 서버를 만들고자 할 때 매우 유용하다.