
노드는 V8과 libuv를 내부적으로 포함
v8 엔진 : 오픈 소스 자바스크립트 엔진 > 속도 문제 개선
libuv : 노드의 특성인 이벤트 기반, 논블로킹 I/O 모델을 구현한 라이브러리
이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식
- 이벤트의 예 : 클릭, 네트워크 요청, 타이머 등
- 이벤트 리스너 : 이벤트를 등록하는 함수
- 콜백 함수 : 이벤트가 발생했을 때 실행될 함수

오래 걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행되게 하고, 나중에 오래 걸리는 함수를 실행
비동기와 의미는 비슷하지만 다름

논-블로킹 I/O는 처리가 완료되지 않으면 에러를 회신하고, 블록 상태로 만들지 않는 반면 비동기 I/O는 처리를 바로할 수 없을 때. 처리가 완료 되는 시점가지 백그라운드에서 대기하고, 종료한 타이밍을 회신 하는 차이가 있다.
프로세스
- 운영체제에서 할당하는 작업의 단위, 프로세스간 자원 공유X
스레드
- 프로세스 내에서 실행되는 작업의 단위, 부모 프로세스 자원 공유
노드 프로세스는 멀티 스레드이지만 직접 다룰 수 있는 스레드는 하나이기 때문에 싱글 스레드라고 표현
노드는 주로 멀티 스레드 대신 멀티 프로세스 활용
노드는 14버전부터 멀티 스레드 사용 가능

싱글 스레드라 주어진 일을 하나밖에 처리하지 못함

대신 논 블로킹 모델을 채택하여 일부 코드(I/O)를 백그라운드(다른 프로세스)에서 실행 가능

싱글 스레드 모델은 에러를 처리하지 못하는 경우 멈춤
멀티 스레드 모델은 에러 발생 시 새로운 스레드를 생성하여 극복

