What is Node.js?

기존 웹 서버는 대부분 스레드를 기반으로 하는 동기 방식으로 네트워크 입출력을 처리한다.

반면, Node.js이벤트를 기반으로 하는 비동기 방식으로 네트워크 입출력을 처리한다.

이벤트 기반 비동기 방식

예를 들면, 재래 시장에서 4개의 가게를 들러 장을 봐야 하는 상황이다.

동기 방식(멀티 스레드, 멀티 프로세스): 몸을 복제해 동시에 여러 가게에 간다. 각자 가게에서 물건 살 순서가 오길 기다린다.

비동기 방식(이벤트 기반): 시장에 대기 시스템을 도입한 후 각 가게를 돌면서 대기표를 받고 기다린다. 대기번호가 불리는 이벤트가 발생하면 그 순간 물건을 받아온다.

동기 방식은 작업 요청이 들어올 때마다 스레드를 여러개 만들어 동시에 일을 처리한다. 일이 많아질수록 스레드를 계속 만들어야 하므로 메모리 사용량이 증가하는 단점이 있다.

Node.js가 사용하는 ‘이벤트 기반 비동기 방식’은 스레드를 단 하나만 생성하므로 몸은 하나이고, 이벤트를 사용하므로 빠르게 일을 처리할 수 있다.

일이 많아도 어쨌든 몸은 하나이므로 메모리 사용량과 같은 시스템 리소스 사용량에는 변화가 거의 없다. 따라서 대규모 네트워크 프로그램을 개발하기 적합한 형태이다.

단점은, 그 한명이 쓰러지는 순간 프로그램 전체에 문제가 발생한다는 점이다.

*사실 Node.js도 내부적으로는 여러개의 스레드가 스레드 풀로 동작한다. 또한 실제 웹서버를 운용할 때는 코어를 분산해서 관리하므로, 하나의 스레드만 사용한다고 볼 수 없다. 중요한 것은 이러한 스레드를 운용하는 것이 개발자가 아니라, 플랫폼이라는 것이다. 개발자는 스레드 하나를 운용하듯 프로그래밍하면 플랫폼이 여러 스레드를 효율적으로 운용한다.

<’비동기’는 nodejs의 철학이며 가장 중요한 특성이다.>