Node.js는 javascript 런타임이다.
Node.js는 이벤트 기반, 논 블로킹 I/O 모델을 사용해 가볍고 효율적이다.
Javascript런타임 : 프로그래밍 언어가 구동되는 환경
Node.js 가 있기 전, 자바스크립트는 브라우저(크롬, 사파리, IE...)내에서 독점적으로 사용하는 언어였다. 그래서 확장성이 좋지 않았고 Node.js 등장으로 서버, 머신러닝, 데스크탑 앱 등의 환경이 확장되었고 다양한 분야에서 활용될 수 있는 계기를 만들어 주었다.
이벤트 기반 : 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식
1. 살행 순서대로 호출스택에 쌓기
2. 백그라운드 필요 작업은 백그라운드로 이동
3. 백그라운드에서 작업이 완료되면 태스크 큐로 이동
4. 호출 스택들이 다 완료되면 이벤트 루프가 태스크 작업을 호출 스택으로 이동
논 블로킹 I/O(Input/Output)
1. 이전 작업이 완료될 때까지 기다리지 않고, 다음 작업들을 수행
2. 오래 걸리는 작업은 백그라운드에서 처리
예) 클라이언트가 서버에게 3분정도 걸리는 요청을 했다.
블로킹 I/O에서는 3분동안 일을 처리한다. (이전 작업이 다끝나야 함)
요청한 클라이언트는 3분동안 자신의 일을 중지해야한다.
서버가 3분이란 시간동안 일을 실행하고 일을 마친 후 응답값을 클라이언트에게 전달
3분이 아니라 3시간이라면 더 많은 시간이라면 다른 업무가 마비가 될 것이다.
이에 반해 논 블로킹 I/O는 서버에 요청을 보내고도 다른 작업을 할 수 있고 또 다른 요청을 보낼 수 있다.
(스레드 : 작업을 실행하는 단위)
= 멀티 스레드
1. 여러개의 스레드가 일을 나눠 처리
2. 하나의 스레드가 문제 생겨도 다른 스레드로 대체 가능
3. 스레드 간의 작업 전환 비용, 놀고 있느 스레드 문제 발생
Node.js의 장점
Node.js의 단점
Node.js가 어울리는 서비스