Web의 발전에 의해서 발생.
WEB 1.0 > WEB 2.0 > 크롬을 위한 V8엔진 등장 > 고성능 JAVASCRIPT 실행 가능 > 브라우저 외부에서 자바스크립트를 활용해보자! > Node js 탄생
Browser의 JS vs Node.js
Browser의 JS | Node.js |
---|---|
브라우저에서 실행 | 크로스 플랫폼 실행 |
웹 내부 제한된 동작 | 제한 없는 동작 |
웹 프론트 개발자의 언어 | 다양한 어플리케이션 개발 |
싱글쓰레드 - 비동기 - 이벤트 기반
싱글쓰레드 : 쓰레드란, 명령을 실행하는 단위. 한개의 쓰레드는 한 번에 한 가지 동작만 실행 가능
싱글쓰레드의 장/단점
장점 | 단점 |
---|---|
쓰레드가 늘어나지 않기 때문에 리소스 관리에 효율적 | 쓰레드 기반의 작업들의 효율이 떨어짐 Ex) CPU 연산 작업 |
따라서 node.js는 비동기 작업을 활용하여 쓰레드 작업 최소화함.
싱글쓰레드 이기 때문에 비동기 동작 필요, 비동기 동작을 구현하기 위해 이벤트 기반
- db.getUsers((err, users) => {
console.log(users);
});
db.getUsersPromise()
.then((users) => {
return promise1(users);
})
.then(r1 => promise2(r1))
.catch(.....);
async function doSomething(() => {
const r1 = await promise1();
const r2 = await promise2(r1);
const r3 = await promise(r1,r2);
...
return r3;
});
doSomething().then(r3 => {
console.log(r3)
});
이벤트를 처리하는 반복되는 동작
브라우저와 Node.js의 작동 방식은 큰 차이가 없음.
Call stack(LIFO)
Message Queue(setTimteout과 같은 자연실행 함수를 등록하는 FIFO큐, 콜스택이 비어있을 경우 등록된 함수를 콜스택에 추가)
setTimeout | Promise |
---|---|
콜스택이 비어있을 때 실행 | 상위함수가 종료되기 전에 실행됨 |