Chrome V8 Javacript 엔진으로 빌드된 자바스크립트 런타임이다.
쉽게 말하면 자바스크립트 실행기라고 할 수 있다.
테트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 혹은 프로그램
클라인트란 요청을 보내는 주체로 브라우저, 데스크톱 앱, 모바일 앱 혹은 다른 서버에 요청을 보내는 서버일 수도 있다.
→ 서버는 클라이언트의 요청에 대해 응답을 한다. 응답은 Yes / No
런타임은 특정 언어로 만든 프로그램들을 실행할 수 있는 환경을 뜻한다. 따라서 노드는 자바스크립트 프로그램들을 컴퓨터에서 실행할 수 있다.
: 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식.
이벤트 기반 시스템에서는 특정 이벤트가 발생할 때 무엇을 할지 미리 이벤트 리스너(event listener)에 콜백(call back)함수를 등록한다.
I/O는 입력(Input)/출력(Output)을 의미한다. 파일 시스텝 접근(파일 읽기 및 쓰기, 폴더 만들기 등)이나 네트워크를 통한 요청 같은 작업이 있다. 이러한 작업을 할 때 노드는 논블로킹 방식으로 처리하는 방법을 제공한다.
논블로킹(non-blocking)이란 이전 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행하는 것을 의미한다. 반대로 블로킹(blocking)은 이전 작업이 끝나야만 다음 작업을 수행하는 것을 믜한다.
작업들이 모두 동시에 처리될 수 있는 작업이라는 전제하에 논블로킹 방식이 같은 작업을 더 짧은 시간에 처리한다.
프로세스는 운영체제에서 할당하는 작업의 단위. 노드나 웹 브라우저 같은 프로그램은 개별적인 프로세스다. 프로세스 간에는 메모리 등의 자원을 공유하지 않는다.
스레드는 프로세스 내에서 실행되는 흐름의 단위. 프로세스는 스레드를 여러개 생성해 여러 작업을 동시에 처리할 수 있다. 스레드들은 부모 프로세스의 자원을 공유한다. 같은 주소의 메모리에 접근 가능하므로 데이터를 공유할 수 있다.
노드를 실행하면 먼저 프로세스가 하나 생성되고 내부적으로 스레드를 여러 개 생성한다. 그 중에서 직접 제어할 수 있는 스레드는 하나이기 때문에 싱글 스레드라고 여겨지는 것이다.
장점 | 단점 |
---|---|
멀티 스레드 방식에 비해 적은 컴퓨터 자원 사용 | 기본적으로 싱글 스레드라서 CPU 코어를 하나만 사용 |
I/O 작업이 많은 서버로 적합 | CPU 작업이 많은 서버로는 부적합 |
멀티 스레드 방식보다 쉬움 | 하나뿐인 스레드가 멈추지 않도록 관리 필요 |
웹 서버가 내장되어 있음 | 서버 규모가 커졌을 때 서버를 관리하기 어려움 |
자바스크립트를 사용함 | 어중간한 성능 |
JSON 형식과 쉽게 호환됨 |