노드는 크롬 v8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임이다.
💡 런타임이란? 특정 언어로 만든 프로그램들을 실행할 수 있게 해주는 가상 머신의 상태노드로 자바스크립드로 작성된 서버를 실행할 수 있고, 서버의 역할도 수행할 수 있다.
서버 실행을 위해 필요한 http, https, http2을 제공한다
이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식
이벤트 리스너: 이벤트를 등록하는 함수
콜백 함수: 이벤트가 발생했을 때 실행될 함수
오래 걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행되게 하고, 나중에 오래 걸리는 함수를 실행
노드에서는 동시에 돌아가는 경우가 거의 없다!
동기는 코드가 순서대로 실행, 비동기는 코드가 순서대로 실행되지 않을 수 있다
프로세스: OS에서 할당하는 작업의 단위, 프로세스 간 자원 공유 X
스레드: 프로세스 내에서 실행되는 작업의 단위, 부모 프로세스 자원 공유
노드 프로세스는 멀티 스레드이지만 직접 다룰 수 있는 스레드는 하나이기 때문에 싱글 스레드라고 표현한다.
최근에는 멀티 스레드 사용이 가능하다.
노드는 주로 멀티 스레드 대신 멀티 프로세스를 활용한다.
싱글 스레드 모델은 에러를 처리하지 못하는 경우 멈춘다 → 대신 논 블로킹 모델을 채택하여 일부 코드를 백그라운드(다른 프로세스)에서 실행 → 멀티 프로세스
멀티 스레드 모델은 에러 발생 시 새로운 스레드를 생성하여 극복한다
장점
멀티 스레드 방식에 비해 컴퓨터 자원을 적게 사용함
I/O 작업이 많은 서버로 적합
멀티 스레드 방식보다 쉬움
웹 서버가 내장되어 있음
자바스크립트를 사용하고 JSON 형식과 호환하기 쉽다
단점
싱글 스레드라서 CPU 코어를 하나만 사용함
CPU 작업이 많은 서버로는 부적합
하나뿐인 스레드가 멈추지 않도록 관리해야 함
서버 규모가 커졌을 때 서버를 관리하기 어려움
어중간한 성능