Node.js 란?
자바스크립트가 실행될 수 있게 도와주는 런타임 플랫폼이다.
처음 들으면 무슨말인지 모르겠다.
IDE 란?
통합 개발 환경의 약자로, 여러가지 개발자 툴을 결합하여 개발에 관련된 모든 작업을 한개의 프로그램에서 처리할 수 있도록 환경을 제공하는 소프트웨어를 말한다.
VSCODE는 마이크로소프트에서 개발하고 관리중인 오픈소스 IDE로, 메모장처럼 아주 가벼우며 여러가지 EXTENSION들을 설치해서 기능을 확장 할 수 있다는 장점이 있다.
Javascript 란?
자바스크립트는 웹페이지를 동적으로 표현하기 위해 만들어 졌다. 동적이란는 것은 맥락, 상황을 반영할 수 있는 페이지이다.
다시, Node.js 란?
공식 사이트에서는 Chrome V8 Javascript 엔진으로 빌드된 javascript 런타임 이라고 설명하고 있다.
(V8 엔진: 구글에서 JAVASCRIPT가 브라우저가 없어도 작동할 수 있도록 만든 것)
즉 자바스크립트를 컴퓨터(로컬)에서 브라우저 없이 실행하게 도와주는 환경이 노드JS
Node.js를 사용해야하는 이유?
ES6 란?
ECMAScript의 6번째 버전, ECMAScript는 브라우저에서 언어를 개발할 때 표준화작업이 필요해서 생겨났으며, es6는 2015년에 발표된 버전이라 ECMA 2015라고도 함
REPL 이란?
Read Evaluate Print Loop -> REPL 환경
입력하는 코드의 결과 값을 즉시 확인 할 수 있어 간단한 문법 테스트 등으로 아주 적합한 개발 환경이라고 할 수 있다
NODE.JS는 REPL 환경을 제공하고 있어 쉽게 이용할 수 있다
웹브라우저의 콘솔도 REPL이 맞지만 노드가 제공하는 API를 사용할 수 없고 브라우저의 API를 사용해 DOM을 제어할 수 있다는 차이가 있다
+)
1. Node.js의 장단점
2. node.js의 동작원리 구성,
3. 이벤트루프, libuv와 node.js의 관계

노드는 자바스크립트와 c++언어로 구성되어있음. v8엔진도 70%이상의 c++로 구성되어 있으며, libuv는 100%의 c++언어로 구성된 라이브러리임. 하지만 c/c++를 몰라도 노드 사용가능. 이는 v8엔진에서 자바스크립트를 c++로 번역해주기 때문. 노드의 코어 라이브러리는 process.binding()을 통해 자바스크립트 환경에서 사용될 수 있음. 노드에 동작하는 이벤트 루프는 libuv 내에서 구현됨. 이벤트 루프가 libuv 내에서 실행된다고 해서 자바스크립트의 스레드와 이벤트 루프의 스레드가 별도로 존재하지는 않음. 노드는 싱글 스레드이므로 하나의 이벤트 루프를 가지며 하나의 스레드가 모든 것을 처리함.
노드에서 작성되는 거의 모든 코드들은 콜백함수로 이루어져 있으며 콜백함수들은 libuv내에 위치한 이벤트 루프에서 관리 및 처리됨. 이벤트루프는 여러개의 페이즈들을 갖고 있으며, 해당 페이즈들은 각자만의 큐를 가짐. 이벤트루프는 라운드로빈 방식으로 노드 프로세스가 종료될때까지 일정 규칙에 따라 여러개의 페이즈들을 계속 순회. 페이즈들은 각각의 큐들을 관리하고 해당 큐들은 FIFO순서로 콜백함수들을 처리
*라운드로빈 방식: 클라이언트로부터 받은 요청을 로드밸런싱 대상 서버에 순서대로 할당받는 방식
**로드밸런싱: 서버가 처리해야할 업무 혹은 요청을 여러대의 서버로 나누어 처리하는 것