** V8 : C++ 로 작성된 Google 의 오픈 소스 고성는 JavaScript 및 WebAssembly 엔진. Chorome 및 Node.js 에서 사용되며, ECMAScript 및 WebAssembly 를 구현한다.
자바스크립트 엔진(JavaScript engine)
엔진이란, 특히나 자바스크립트 엔진은 자바스크립트 코드를 실행하는 프로그램/인터프리터다.
그 자바스크립트 엔진이 여러 목적으로 사용되고, 가장 대표적으로는 크롬같은 웹 브라우저, Node.js 같은 실행환경에서 사용되고 있다.
자바스크립트 인터프리터로 자바스크립트 엔진은 파싱, JIT컴파일(just-in-time compliation) 프로그램을 실제 실행하는 시점에 기계어로 번역하는 컴파일 기법)을 하는 머신을 제공해야 한다.
그 뜻은 자바스크립트로 쓰여진 스크립트가 실행이 가능하다는 것인데, 이를 가능케 하는 것이 엔진, 크롬에서는 Google V8 엔진이 있다.
자바스크립트 런타임(JavaScript Runtime)
만약 컴퓨터에서 프로그램이 가동된다면, 그 컴퓨터가 그 프로그램의 런타임이다. 즉 실행되는 동안 사용 가능한 환경을 말한다.
그러면 그 과정에서 필요한 것들(라이브러리 등)이 있을 것이다. 어떠한 프로그램이 실행될 때 런타임에 연결되어 해당 프로그램을 사용할 수 있게 한다.
자바스크립트 런타임 환경은 프로그램이 실행되는 동안 사용 가능한 내장된 라이브러리를 제공해야 한다.
위에서 설명한 실행 환경 두가지 Chrome, Node.js 를 예로 들어 보자.
두 런타임(Runtime) 모두 내장된 데이터 타입들과 Console object 같은 공통된 기능들을 포함하고 있다.
--> 정리해보면, Chrome과 Node.js 같은 Google의 V8 엔진을 사용하지만 다른 런타임(runtime) 환경, 즉 Chrome과 Node.js 라는 다른 실행 환경을 가지고 있다.
Node.js 란?
JavaScript 를 크롬 같은 브라우저에서가 아닌, 브라우저 밖에서!
로컬 컴퓨터에서 다양한 용도로 확장하기 위해 만들어진 것이 바로 Node.js 이다.
Node.js 를 통해 JavaScript 언어를 사용하여 내 컴퓨터에서 file system, server 만들기 등을 할 수 있다.
Node.js 를 써서 Express 같은 라이브러리를 이용해 서버를 만들곤 하지만, Node.js 자체는 웹서버가 아니다!
Node.js 는 자바스크립트의 런타임이며, 웹서버를 만들 수 있는 하나의 방법인 것이다.
Node.js 의 특징
Node.js 의 사용
특히나 Node.js의 비동기(non-blocking, async), 단일쓰레드, 뛰어난 확장성, 데이터 버퍼링이없는 특징은
의 애플리케이션을 개발할 경우 특히나 좋은 효율성을 발휘한다.
그래서 실제로 위의 서비스를 제공하는 다양한 회사들에서 사용하고있따. 넷플릭스, 우버같은 실시간 처리가 중요한 애플리케이션이나, 많은 데이터 입출력이 있는 페이팔, 이베이 같은 곳에서도 사용한다.
하지만, Data Science같이 복잡한 데이터를 처리하기위하여 하드웨어를 사용하는 곳에는 적합하지 않다. 하드코어한 처리를 목적으로 하는곳에는 Python, Django 등이 더 적합하다.
NPM 이란?
Node Package Manager으로, 자바스크립트를 위한 패키지 관리자이다.
npm은 세계 최대의 소프트웨어 창고로, 엄청난 수의 코드 패키지를 가지고있다. 이는 오픈소스 개발자들이 그들이 개발한 소프트웨어를 공유한다. 누구든지 패키지를 import 하여 사용할 수 있고, 내가 만든 소프트웨어를 퍼블리싱할 수도 있다.
NPM 의 사용 : CLI
npm은 우리가 라이브러리등을 다운로드, 설치할 떄 사용하는 CLI(Command Line Client)를 포함한다.
npm install <packageName>
~~ Node.js를 위한~~ 소프트웨어 패키지 매니저
npm은 Node.js와 함께 설치된다. Node.js는 자바스크립트 런타임 환경이면, npm은 자바스크립트 패키지 관리자니까 말이다.
사실, npm이 처음에는 Node.js를 위한 패키지 매니저를 위해 만들어졌다고 한다.
모든 npm 패키지들은 package.json이라는 파일 내에 정의되고, 이는 모두 JSON으로 작성된다.
{
"name": "note-app",
"version": "0.1.0",
"private": true,
"dependencies": {
"@testing-library/jest-dom": "^4.2.4",
"@testing-library/react": "^9.3.2",
"@testing-library/user-event": "^7.1.2",
"react": "^16.12.0",
"react-dom": "^16.12.0",
"react-scripts": "3.3.0"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": "react-app"
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}
Dependencies(의존성) 관리하기
npm에서의 의존성이란 해당 프로젝트가 돌아가기 위해 필요한 npm 패키지들이다.
npm은 패키지 매니저이므로 이들을 관리한다. 이 Dependencies 또한 package.json에 정의되어있다.
그래서, 협업 시나 프로젝트를 클론해왔을 경우에도 node install을 통하여 관련 패키지를 바로 다운로드하여 코드를 실행시킬 수 있다.
NVM
Node Version Manager
한 마디로 Node.js 의 버전을 관리하는 도구.
NVM, 왜 사용해야 하나요?
협업을 할 때, 또는 다양한 프로젝트를 동시에 진행해야 할 때
다양한 라이브러리 / 프레임워크 / 개발툴의 버전 호환 문제를 겪기 때문!
NVM 의 장점
그래서 우리는 node를 먼저 설치하지 않고, nvm을 우선 설치한 후!
→ 설치한 nvm을 통해 원하는 특정 버전의 Node.js를 설치하는 방법이 나중을 위해 훨씬.. ✨좋다..
# curl, wget 을 이용하여 설치
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
$ source ~/.bash_profile
# 쉘 재시작 후 설치확인
nvm ls
# 노드 특정버전 설치(13.6.0)
nvm install 13.6.0
# 노드 최신버전 설치(알아서 최신버전으로 설치)
nvm install node
# 노드 설치 확인
node -v