Node.js는 하나의 언어가 아닌 프로그래밍 언어가 구동 되는 환경, javaScript 런타임이라고 정의할 수 있다.

<aside> 📌 Node.js는 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임이다.

</aside>

논블로킹(Non-blocking)I/O

블로킹

함수를 호출하면 호출된 함수가 작업을 마칠 때까지 제어권을 돌려주지 않고 함수가 종료될 때까지 제어권을 돌려주지 않고 함수가 종료될 때까지 대기하는 방식

논블로킹

함수를 호출하면 호출된 함수에게 바로 제어권을 넘겨줘서 다른 작업을 바로 진행할 수 있도록 하는 방식

자바스크립트는 한 번에 하나의 작업을 처리하는 언어이지만, I/O작업의 경우는 자바스크립트도 동시에 처리할 수 있다.

싱글 스레드(Single Thread)

하나의 스레드만 사용한다는 의미 → 동시에 하나의 작업만 처리할 수 있음

컴퓨터는에서 프로그램은 개별적인 프로세스로 리소르를 할당받고 실행되는데, 스레드는 프로세스 안에서 작업을 처리하기 위해 실행되는 흐름의 단위.

Node.js는 싱글 스레드를 사용하지만 그에 대한 단점을 극복하고자 논블로킹을 사용

Node.js는 자바스크립트를 실행하는 부분에 대해서만 싱글 스레드로 구성되고, 논블로킹I/O와 이벤트 루프를 통해서 동시에 여러 작업을 할 수 있게 해줌