1. Node.js를 시작하기 전에..
JavaScript를 다시 한번 학습해보고 오자 !
2. Node.js가 무엇인지 이해하자
- js가 실행될 수 있게 도와주는 런타임 플랫폼. Node.js, JavaScript, 런타임 플랫폼에
대한 이해를 하며 각 역할을 구분할 줄 알아야한다.
3. ES6가 무엇인지 알고, 문법 익히기
JavaScript 탄생 비화
- 정적인(Static) 문서를 조금 더 동적(Dynamic)으로 표현할 수 있도록 만들어짐
- NetScape라는 웹 브라우저를 통해 상호작용을 강조하기 위해 간단한 기능을 넣어 만든 것이 JS의 시초
- 당시 이름은 자바스크립트는 아니었지만(Mocha) 넷스케이프를 시작으로 브라우저를 만드는 회사마다 자신들만의 브라우저에서 좀더 다이나믹한 상호작용을 위한 언어를 사용할수 있게 기능을 추가
- 그로인해 각 브라우저에서 동일한 기능을 구현하기 위해 모든 코드를 따로 작성했었고,(브라우저전쟁) 결국 표준화되어 나온것이 Ecma International에서 ECMAScript(ECMA-262)라는 이름으로 현재의 JavaScript표준을 제정.
ECMAScript 버전에 대해
ES6? ES2015?
- Ecma International에 의해 제정된 6번째 표준
- 2015년에 제정된 ECMAScript 표준을 ES2015라고 부름.
- 2015susdp 6번째 표준이 제정되었으므로 결국 같은표준을 말함.
- 매년 새로운 ECMAScript 표준이 제정.
- 2021년을 기준으로 가장 대중적으로 사용되는것은 ES6, ES7
- 가장 많은 브라우저를 지원하고 IE는 ES5까지만 지원한다.
JavaScript 엔진 - V8
- JS에서 동작할 수 있는 모든 브라우저에는 JS엔진이 내장
- Chrome 브라우저에 탐재된 자바스크립트 엔진 중 하나인 V8은 2021년 기준으로 ECMAScript 표준을 가장 완벽하게 구현한 엔진이며 현존하는 JS엔진 중 가장 빠른 JS 실행 속도를 보여줌
- V8 엔진은 6.0 이전 버전까지는 다른 JS엔진과 비슷하게 느리고 미미한 성능.
- 6.0부터 성능 개선을 이뤄 가장 빠른 엔진으로 자리잡았다.
Node.js 란?
- Chrome V8 JavaScript 엔진으로 빌드된 JS 런타임.
- 브라우저 없이 실행할 수 있도록 만든 환경.
Node.js의 특징 - Non-blocking, Single Thread, Event Loop
- Non-blocking
함수가 실행되는 중에도 다른 작업을 동시진행가능.
- Single Thread ( 장점이자 단점.)
스레드 하나를 사용하고 동시에 하나의 작업만을 처리가능
- Event Loop (참고자료 :https://tk-one.github.io/2019/02/07/nodejs-event-loop/)
싱글 스레드의 약점을 극복하기위해 효율적인 작업을 처리할 수 있는 특성
Node.js는 이벤트 기반의 플랫폼. 노드에서 일어나는 모든 일은 어떤 이벤트에 대한 반응,
=> Node에서 일어나는 모든 처리는 전부 일련의 콜백 내용들
libuv라는 추상화된 라이브러리가 이벤트루프라는 기능을 제공
이벤트 루프에 대한 오해들
1. 이벤트루프는 우리가 실제로 작성한 코드와는 별개로 별도의 스레드에서 실행된다.
=> JS 실행 스레드는 단 하나뿐이며, 이 스레드가 바로 이벤트 루프가 실행되는 스레드.
Node.js 앱에서 실행되는 사용자의 코드는 전부 콜백이며 이벤트루프에 의해 수행됨.
2. 모든 비동기 작업은 스레드 풀에서 처리한다
=> Libuv는 기본적으로 비동기작업을 위해 4개의 스레드를 스레드 풀에 할당, 현대의 OS들은 많은 I/O작업들을 위해 비동기 interface를 제공.( ex. Linux의 AIO )
=> Libuv는 가능하다면 직접 OS의 비동기 interface를 사용하며 스레드풀에 작업을 넘기지 않는다.
데이터 베이스 같은 서드파티 시스템에도 동일한데 DB 드라이버를 이용해 스레드풀을 활용하지 않고 비동기 인터페이스를 직접 사용한다.
=. 즉, 다른방법이 없는 경우에만 libuv는 비동기 작업들을 스레드 풀에 할당.
3. 이벤트 루프는 스택 or 큐 같은 것이다
=> 이벤트 루프에 큐형식의 자료구조가 포함되어있지만 이 큐를 돌면서 실행하지 않고, 스택을처리한다. round-robin 방식으로 차례차례 돌면서 처리되는 특정 작업들의 단계로 이루어져 있다.
이벤트루프 작업에 대해서 좀더 깊숙한 자료는 링크로 !
ES6 (ECMAScript) 란?
- 2021년 기준으로 12번째 버전이 나왔다.
Node.js의 REPL
- REPL이란?
입력 받은 코드를 읽어(Read)들여 메모리에 저장하고, 평가(Evaluate)된 값을 출력(Print).
특정 신호를 입력받기 전까지 과정들을 반복(Loop) 하는 환경이다.
=> 입력하는 코드의 결과값을 즉시 확인할 수 있다.
'Language > Node.js' 카테고리의 다른 글
Node.js의 require, 그리고 IIFE (1) | 2022.10.13 |
---|---|
Node Snippets 명령어 (0) | 2022.10.05 |
Package Manager (0) | 2022.09.30 |
Express.js (0) | 2022.09.30 |