1.1 노드의 정의
· Node.js는 크롬 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임이다.
· 노드는 서버가 아니지만, 서버의 역할도 할 수 있는 자바스크립트 런타임.
런타임 : 특정 언어로 만든 프로그램들을 실행할 수 있게 해주는 가상 머신(크롬의 V8 엔진 사용)의 상태
1.2 노드의 특성
1.2.1 이벤트 기반
1.2.2 논블로킹 I/O
오래 걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행되게 하고, 나중에 오래 걸리는 함수를 실행
1.2.3 프로세스와 스레드
프로세스 : 운영체제에서 할당하는 작업의 단위, 프로세스 간 자원 공유 x
스레드 : 프로세스 내에서 실행되는 작업의 단위, 부모 프로세스 자원 공유 o
노드 프로세스는 멀티 스레드이지만, 직접 다룰 수 있는 스레드는 하나이기 때문에 싱글 스레드라고 표현한다.
(14버전부터 멀티 스레드 사용 가능)
노드는 주로 멀티 스레드 대신 멀티 프로세스를 활용한다.
1.3 노드의 역할
서버 : 네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 또는 프로그램
클라이언트 : 서버에 요청을 보내주는 주체(브라우저, 데스크탑 프로그램, 모바일 앱, 다른 서버에 요청을 보내는 서버)
노드는 서버가 아니다. 하지만, 노드는 서버를 구성할 수 있게 하는 모듈이다.