노드는 크롬 V8 자바스크립트 엔진으로 빌드된 자바스크립트(HTML에 종속된 브라우저) 런타임(실행기)이다.
노드는 서버가 아니다, 자바스크립트 엔진도 아니다
그러나 서버의 역할도 수행할 수 있는 자바스크립트 런타임이다.
노드가 나와서 HTML없이도 자바스크립트를 실행할 수 있다.
서버실행을 위해 필요한 http/https/http2 모듈을 제공한다.
= 자바스크립트는 언어고 노드는 런타임! (JDK같은)
*(Typescript 런타임은 Deno)*
*자바스크립트 지식이 부족할 때마다 확인 (ko.javascript.info)
언어를 익히는데에는 문법과 프로그래밍적 사고가 필요하다, 코딩을 실제로 하면서 익히는게 정답이다
클릭, 네트워크, 타이머, 콜백 등을 말한다.
오래 걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행되게 하고, 나중에 오래 걸리는 함수를 실행하는 것을 말한다.
프로세스 : 운영체제에서 할당하는 작업의 단위, 프로세스 간 자원 공유는 하지 않는다.
(마치 크롬창의 탭들이 여러가지 있는 것 처럼)
스레드: 프로세스 내에서 실행되는 작업의 단위, 부모 프로세스와 자원 공유가 있다.
-노드는 싱글스레드가 아니다. 멀티 스레드다. 단 노드를 실행하면 여러 스레드가 돌아가지만 그 중 한가지만 컨트롤 할 수 있다. (나머지 스레드들은 동시에 돌아갈 준비를 하고있다.)
-노드는 주로 멀티 스레드 대신 멀티 프로세스를 활용한다.
-노드는 14 버전부터 멀티 스레드 사용이 가능하다.
-대신 논 블로킹 모델을 채택하여 일부 코드(I/O)를 백그라운드(다른 프로세스)에서 실행 가능하다
-I/O관련 코드가 아닌 경우 싱글 스레드, 블로킹 모델과 같아진다
-스레드를 활용도 높게 사용하는 것이 제일 중요하다, 부족한 부분을 채우기 위해 멀티 프로세싱을 사용할 수 있다.
-싱글 스레드 모델은 에러를 처리하지 못하는 경우 멈춘다.
-멀티 스레드 모델은 에러발생시 새로운 스레드를 생성하여 극복한다.
*그러나 노드의 키포인트는 싱글 스레드를 어떻게 효율적으로 사용하는데에 집중하는 것이다.
노드는 서버가 아니다 단, 노드는 서버를 구성할 수 있게 하는 모듈이다.
노드 서버의 장단점은 자바스크립트의 장단점과 거의 유사하다.
장점) 멀티스레드 방식에 비해 컴퓨터 자원을 적게 사용한다.
I/O 작업이 많은 서버에 적합하다.
멀티 스레드 방식보다 쉽다.
웹서버가 내장되어 있다.
자바스크립트를 사용한다.
JSON형식과 호환하기 쉽다. (php, c# 등은 변환이 필요하니까 번거롭다)
단점) 싱글 스레드라 CPU 코어는 하나만 사용한다.
CPU작업이 많은 서버로는 부적합하다. (이미지 리사이징, 암호화, 알고리즘 등)
하나뿐인 스레드가 멈추지 않도록 관리해야 한다.
서버 규모가 커졌을 때 서버를 관리하기가 어렵다. (C++ 추천)
성능이 어중간하다. (그러나 타언어도 대체적으로 어중간하다.)
넷플릭스, 나사, 링크드인, 우버 등에서는 메인이나 서브 서버로 사용하고 있다.