노드: 자바스크립트 런타임
노드:자바스크립트로 만든 프로그램을 실행할 수 있게 해줌
libuv : 노드의 특성인 이벤트 기반, 논블로킹(I/O모델을 구현한 라이브러리)
서버: 네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 또는 프로그램
클라이언트: 서버에 요청을 보내는 주체(브라우저,데스크탑프로그램,모바일 앱,다른 서버에 요청을 보내는 서버)
클라이언트 -> (요청) 서버
클라이언트 <- (응답) 서버
노드 서버의 장단점
장점 : 멀티 스레드 방식에 비해 컴퓨터 자원을 적게 사용함
: I/O작업이 많은 서버로 적합
: 멀티스레드 방식보다 쉬움
: 웹서버가 내장되어 있음.
: 자바스크립트를 사용함
: JSON형식과 호환하기 쉬움.
단점 : 싱글스레드라서 CPU코어를 하나만 사용함
:CPU작업이 많은 서버로는 부적합
: 하나뿐인 스레드가 멈추지 않도록 관리해야함;
: 서버 규모가 커졌을때 서버를 관리하기 어려움
: 어중간한 성능
1.호출스택
함수 호출 순서대로 쌓이고, 역순으로 실행됨.
함수 실행이 완료되면 스택에서 빠짐
LIFO 구조라서 스택이라고 불림.
2.이벤트루프
호출스택
-백그라운드 (코드가 백그라운드로 가면 호출스택(호출스택이 항상 먼저 실행 되어야 한다)과 백그라운드가 동시에 실행됨)
-테스크 큐
-메모리
-콘솔창
Promise는 .then을 만나는순간 비동기로간다.
Promise .then/catch
process .nextTick 은 테스크큐에서 우선순위가 제일높아서 새치기함.