
Node.js는 JavaScript 엔진으로 빌드 된 JavaScript 런타임이다. 즉, 노드를 통해 다양한 자바스크립트 애플리케이션을 실행할 수 있으며, 서버를 실행하는 데 제일 많이 사용된다
단순히 웹에서 실행 가능한 게임을 만드려면 Js만으로도 가능하지만 조금 더 진화된 프로그램으로 실시간 온라인 채팅, 실시간 온라인 게임 등 실시간 기능을 넣거나, 로그인 기능을 넣어 유저를 관리하고 점수를 관리하는 DB기능을 Node.js를 통해 만들 수 있다.
Js 언어는 특정 프로그램 안에서 동작하는 프로그램이기 때문에 웹 브라우저 프로그램 안에서만 동작을 한다. 즉, 웹 브라우저(chrome, safari ...) 가 없으면 사용할 수 없는 프로그램이다. 이것이 곧 Node.js를 사용하는 이유라고 할 수 있는데 Node.js를 설치하게 되면 터미널 프로그램(cmd, terminal)에서 Node.js를 입력하여 브라우저 없이 바로 실행할 수 있다.
런타임이란 특정 언어로 만든 프로그램을 실행할 수 있는 환경을 뜻한다
노드는 Js프로그램을 컴퓨터에서 실행할 수 있게 하는 자바스크립트 실행기이다.
이벤트 루프는 여러 이벤트가 동시에 발생했을 때 어떤 순서로 콜백함수를 호출 할지를 이벤트 루프가 판단한다. 노드는 이벤트가 종료될 때까지 이벤트 처리를 위한 작업을 반복하므로 루프라고 부른다.
이벤트 기반, 논 블로킹 모델과 더불어 노드를 설명하는 키워드 중 하나로 Js 코드는 동시에 실행될 수 없는데 그 이유는 노드가 싱글 스레드 기반이기 때문이다.
Node.js는 싱글 스레드, 논 블로킹 모델로 싱글 스레드가 혼자서 일을 처리하지만 들어오는 요청 순서가 아닌 논 블로킹 방식으로 이전 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행한다
노든느 기본적으로 싱글 스레드, 논 블로킹 모델을 채용하므로 I/O 요청이 많이 발생하면 노드를 서버로 사용하는 것이 좋다
그러나 CPU 부하가 큰 작업에는 적합하지 않다. 우리가 작성하는 코드는 모두 스레드 하나에서 처리되기 때문에 CPU 연산을 많이 요구하면 스레드 하나가 혼자서 감당하기 어렵다.
즉, 개수는 많지만 크기는 작은 데이터를 실시간으로 주고받는데 노드는 적합하다 (실시간 채팅 , 주식 차트 등)
장점