Node JS #1
Node.JS
Node.js는 브라우저에서만 돌아가는 JS를 브라우저 밖에서도 동작하게 하는 환경이다.
As an asynchronous event-driven JavaScript runtime, Node.js is designed to build scalable network applications. - Node.JS document
JS runtime : JS 코드가 실행되는 환경을 의미한다.
JSON
JSON은 프로그래머가 파일에 정보를 저장하기 위해 만든 방식 중 하나이다.
데이터는 무엇보다 중요합니다. 하지만 다양한 종류의 데이터를 어떻게 활용해야 할지 아는 일은 그보다 더 중요하죠. 프로그래머, 개발자, IT 전문가들은 어떤 언어에서든 데이터 구조와 실제 데이터를 다른 언어 및 플랫폼에서 해석 가능한 형식으로 전송할 수 있어야 합니다. JavaScript Object Notation(JSON)은 이를 가능케 하는 데이터 교환 포맷입니다.
JSON이 개발자들 사이에서 인기를 얻게 된 이유는 사람이 읽을 수 있는 문서로 이루어졌기 때문입니다. 이 문서는 역직렬화가 필요하지 않기 때문에 경량에 코딩도 더 적게 필요하고, 처리 속도도 빠릅니다. - oracle, JSON의 정의
npm
Node Parckaged Manager은 js를 위한 패키지 매니저이다.
Node.js를 설치하면 자동으로 설치되며, 패키지들을 쉽게 관리할 수 있게 해준다.
yarn도 작동방식이 약간 다르다는 것을 제외하면 같은 패키지 매니저라고 할 수 있다.
npm init
> npm init
npm을 초기화하게 되면 package.json 파일을 만들어준다.
이 파일을 들여다보자.
{
"name": "youtube-clone",
"version": "1.0.0",
"description": "full-stack clone project",
"repository": {
"type": "git",
"url": "git+https://github.com/forwarder1121/youtube-clone.git"
},
"main": "index.js",
"scripts": {
"dev": "nodemon --exec babel-node src/server.js"
},
"author": "Kim Dong Hawn",
"license": "MIT",
"bugs": {
"url": "https://github.com/forwarder1121/youtube-clone/issues"
},
"homepage": "https://github.com/forwarder1121/youtube-clone#readme",
"dependencies": {
"express": "^4.18.2"
},
"devDependencies": {
"@babel/core": "^7.23.9",
"@babel/node": "^7.23.9",
"@babel/preset-env": "^7.23.9",
"nodemon": "^3.0.3"
}
}
“main”은 프로젝트의 대표파일을 의미한다. 위 경우에는 index.js가 대표파일이라는 의미.
“scripts”에 있는 것은 우리가 콘솔에 입력하는 것을 단축하여 실행할 수 있게 하는 것이다.
> node nodemon --exec babel-node src/server.js
> node run dev
위 두 명령어는 동일한 의미이지만, scripts를 사용하면 더 빠르게 작성할 수 있다.
“dependecies”는 패키지가 실행되기 필요한 또 다른 패키지를 의미한다. for program
“devDependencies”는 개발자에게 필요한 패키지를 의마한다. for programmer
어차피 dependencies나 devDependencies 둘 다 npm에 의해 node_modules 폴더에 설치되게 된다.
dependencies와 devDependencies의 차이
npm install
> npm install express
npm install {패키지의 이름}을 입력하게 되면 해당 패키지를 받을 수 있다. (dependencies)
이러한 패키지들 node_modules 폴더에 저장되는데, npm install로 설치된 모든 패키지가 저장되는 곳이다.
그리고 이렇게 설치된 패키지들도 package.json을 가지고, 그들도 dependencies를 가진다.
따라서 위 경우에는 express가 설치되고, dependencies들도 함께 다운받아지고, 또 다시 이들이 필요로 하는 dependencies들도 연쇄적으로 다운 받아진다.
그리고 npm이 이 모든 것을 알아서 한다.
npm은 존나 똑똑해서 하나의 패키지만 다운 받아도, 그 패키지의 실행에 필요한 모든 것을 알아서 다운 받는다.
따라서 우리는 용량이 큰 node_modules를 협업에서 공유하지 않아도 된다.
다만, npm이 dependencies를 찾기 위해 package.json만 있으면 된다.
그래서 우리는 깃허브에 파일을 업로드 할때도 용량이 큰 node_modules 폴더를 올리지 않는 것이 좋다.
//.gitignore 파일
/node-modules
package-lock.json 파일은 패키지를 안전하게 관리하는 역할을 한다.
Babel
또 사람들은 의논하였다. “어서 도시를 세우고 그 가운데 꼭대기가 하늘에 닿게 탑을 쌓아 우리 이름을 날려 사방으로 흩어지지 않도록 하자.” 야훼께서 땅에 내려오시어 사람들이 이렇게 세운 도시와 탑을 보시고 생각하셨다. “사람들이 한 종족이라 말이 같아서 안 되겠구나. 이것은 사람들이 하려는 일의 시작에 지나지 않겠지. 앞으로 하려고만 하면 못 할 일이 없겠구나. 당장 땅에 내려가서 사람들이 쓰는 말을 뒤섞어놓아 서로 알아듣지 못하게 해야겠다.” 야훼께서는 사람들을 거기에서 온 땅으로 흩으셨다. 그리하여 사람들은 도시를 세우던 일을 그만두었다. 야훼께서 온 세상의 말을 거기에서 뒤섞어놓아 사람들을 온 땅에 흩으셨다고 해서 그 도시의 이름을 바벨이라고 불렀다.
〈창세기〉11장 4~9절(공동번역)
위 구약성경에 나오는 바벨탑에서 이름을 가져온 Babel은,
아직 Node.JS가 이해하지 못하는 최신 JS 문법을 node.JS가 이해할 수 있는 JS code로 변환해주는 컴파일러이다.
Babel 덕분에 Node.JS가 이해하지 못하더라도, 우린 최신 JS 문법을 사용할 수 있다.
//Node JS에서 사용가능한 Babel을 설치
> npm install --save-dev @babel/core
//-save-dev는 package.json의 devDependencies에 설치하라는 의미
//babel.config.json에 다음 추가
{
"presets": ["@babel/preset-env"]
}
//preset은 babel 플러그인이고, prese-env가 가장 유명하다.
Nodemon
Nodemon은 우리의 file이 수정되는 것을 감시하는 패키지이다.
파일이 수정되면 알아서 재시작해준다.
따라서 파일을 수정하고 저장하고 콘솔에 일일히 npm run을 입력하지 않아도 된다.
우린 index.js 파일을 실행하려고 한다.
패키지들이 어떻게 우리를 도와주는지 살펴보자.
> node index.js // 가장 원시적
> babel-node index.js // index.js에 최신 JS 문법 적용 가능
> nodemon babel-node index.js // 수정 사항 자동 반영
Leave a comment