노드는 크롬 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임입니다. 노드는 이벤트 기반, 논블로킹 I/O 모델을 사용해서 가볍고 효율적입니다.
그럼 런타임이 뭘까요? 런타임은 특정 언어로 만든 프로그램을 실행하기 위한 환경을 말합니다. 즉, 자바스크립트를 컴퓨터에서 실행하도록 하는 역할을 하는 것이 바로 노드입니다.
이벤트 기반이라고 하는 것은 특정 이벤트가 발생했을 때 미리 지정해둔 작업을 수행하는 것을 말합니다. 먼저 주요 개념에 대해 짚고 넘어가죠.
자, 예제를 통해 이벤트 작동 방식에 대해 더 알아보죠. 아래의 코드를 확인해세요.
function callback() {
console.log('I\'m callback');
}
setTimeout(callback, 2000);
2초 뒤에 callback
이라는 함수를 실행시키는 과정을 설명하자면 다음과 같습니다.
만약 콜스택에 너무 많은 함수가 들어있다면 2초가 지났음에도 callback함수가 실행되지 않을 수 있습니다. (setTimeout 함수가 정확하지 않은 이유죠.)
동기, 비동기를 생각하면 논블로킹을 쉽게 이해할 수 있습니다. 이전의 작업이 완료되는 것을 기다리지 않고 다음 작업을 수행합니다. 이를 활용하면 더 빠르게 작업을 수행할 수 있겠죠?
그러나 자바스크립트의 엔진의 싱글스레드의 한계때문에 모든 상황에서 이득을 볼 수 있는 것은 아닙니다. 주로 I/O작업에서 이득을 얻을 수 있죠.
I/O는 입력, 출력을 의미하는데 파일 시스템 접근, 네트워크 요청과 같은 작업이 I/O의 일종으로 노드는 논블로킹 방식으로 작동합니다.
노드는 싱글 스레드로서 한 번에 하나의 일을 처리할 수 있습니다. 쉽게 말해서 일하는 사람이 한 명이라고 생각하면 됩니다. 용어만 들었을 때 멀티 스레드가 훨씬 좋아보이는데 꼭 그렇지만은 않은게 작업량이 늘어나면 일을 해야할 스레드를 늘려야하고 작업량이 적으면 노는 스레드도 발생하겠죠.
노드도 싱글스레드 여러 개를 사용해서 멀티 스레딩 비슷한 기능을 할 수 있습니다. 이는 멀티스레딩보다는 멀티프로세스에 가깝죠. 이쯤에서 스레딩과 프로세스의 차이에 대해서 알아봅시다.
사실 노드도 내부적으로는 여러 개의 스레드를 가지고 있지만 직접 제어할 수 있는 것이 하나이기 때문에 싱글 스레드라고 합니다.
스레드를 늘리는 대신에 같은 프로세스를 여러 개 복사해서 동시에 처리하는 멀티 프로세싱 방식을 사용합니다.
노드를 서버로 사용할 때 장단점은 싱글스레드의 장단점과 다르지 않습니다.
장점
단점
- 조현영『Node.js 교과서』, (주)도서출판 길벗(2019년 2월 2일), p.14 ~ 22
https://namjackson.tistory.com/30 남잭슨의 개발 블로그
감사합니다!