노드 공식 사이트에서는 노드를 다음과 같이 설명하고 있다.
Node.js는 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임입니다.
즉, 노드를 통해 다양한 자바스크립트 애플리케이션을 실핼할 수 있으며, 서버를 실행하는 데 제일 많이 사용된다.
Node.js 사용이유
- JavaScript는 독립적인 언어가 아닌 스크립트 언어이기 때문에 웹 브라우저가 없으면 사용할 수 없는 프로그램이다.
- JavaScript를 웹 브라우저에서 독립시켜 터미널 프로그램에서 브라우저에서 바로 실행할 수 있다.
- JavaScript에서 분리된 언어이기 때문에 문법이 같아 클라이언트와 서버 모두에서 한 가지 언어로 전체 웹 페이지를 만들 수 있다.
📌 이벤트 기반
📌 이벤트 루프
📌 논 블로킹 I/O
📌 싱글 스레드
자바스크립트 코드는 동시에 실행될 수 없는데 그 이유는 노드가 싱글 스레드 기반이기 때문
프로세스 : 운영체제에서 할당하는 작업의 단위, 노드나 웹 브라우저 같은 프로그램은 개별적인 프로세스이다. 프로세스간에는 메모리 등의 자원을 공유하지 않는다.
스레드 : 스레드는 프로세스 내에서 실행되는 흐름의 단위, 프로세스는 스레드를 여러 개 생성 해 여러 작업을 동시에 처리할 수 있다. 스레드들은 부모 프로세스의 자원을 공유한다. 같은 주소의 메모리에 접근 가능하므로 데이터를 공유할 수 있다.
Nodejs는 싱글 스레드, 논 블로킹 모델로 싱글 스레드가 혼자서 일을 처리하지만 들어오는 요청 순서가 아닌 논 블로킹 방식으로 이전 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행한다.
📌 결론
노드는 기본적으로 싱글 스레드, 논 블로킹 모델을 채용하므로 I/O 요청이 많이 발생하면 노드를 서버로 사용하는 것이 좋다. 하지만 노드는 CPU 부하가 큰 작업에는 적합하지 않다.
노드의 장점
1. 멀티 스레드 방식에 비해 적은 컴퓨터 자원을 사용한다.
2. I/O 작업이 많은 서버로 적합하다.
3. 웹 서버가 내장되어 있어 별도의 웹서버를 설치할 필요가 없다.
4. 자바스크립트를 사용하기 때문에 JSON 형식과 쉽게 호환된다.