Node.js › Node.js 간단 정리!!
Node.js란?
Node.js는 web 브라우저가 아닌 환경에서도 js 코드를 실행시켜주는 js의 런타임(실행환경)이다.
즉 구동기 이다!
등장 배경
JS는 웹 페이지 내부에 필요한 단순한 기능을 개발하기 위해 만들어진 간단한 script 언어이다. 그렇게 웹 브라우저 내부에서만 작동이 가능하도록 만들어졌다.
문법이 유연하고 작성하기 편리하게 생산성에 집중하여 설계되어, 너무 매력있다 보니 웹페이지 기능을 만드는 것 뿐 아니라 웹 밖에서도 프로그래밍 하는데 쓰고 싶어하는 수요가 발생했고, 이는 현실이 되어 Node.js를 통해 어디서든 동작가능한 범용적인 언어가 되었다.
이를 통해 웹 서버, 모바일, 데스크탑을 만들 수 있게 되었다.
패키지
보통 특정 목적을 갖는 프로그램의 단위를 프로젝트라고 부른다.
Node.js에서는 프로젝트를 패키지라고 부른다.
Node.js 사용해보기
패키지 생성
package.json이 생긴다.
1
npm init
JS 코드 실행해보기
1
node index.js
폴더 구조가 복잡할 경우의 매크로
1
2
3
4
5
6
7
8
9
10
11
12
{
"name": "section03",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node src/index.js"
},
"author": "",
"license": "ISC",
"description": ""
}
scripts 안에 start라는 매크로를 지정해 주어 매번 실행할 때마다 저걸 다 치는게 아니라,
1
npm run start
이렇게 실행할 수 있게 되는 것이다.(어디서 많이 봤지?)
Node Module System
모듈을 다루는 시스템을 의미한다!
Module이란?
간단한 쇼핑몰을 만든다고 가정해보자!
회원관리, 장바구니, 결제 등의 다양한 기능이 필요하게 될 것이다.
이 많은 기능을 하나의 js 파일에 작성하면 어떻게 될까???
수정하려고 하면 아주그냥 눈이 터져나간다.
그래서 기능별로 파일을 구분해서 만드는게 일반적이다.
그럼 user.js, cart.js, payment.js 등의 파일이 생길텐데, 이 때 기능별로 구분되어져 있는 각각의 js 파일들을 모듈이라고 부른다.
그럼 user 모듈, cart 모듈, payment 모듈이라고 할 수 있겠다.
이 모듈들을 생성하고, 불러오고, 사용하는 등의 모듈을 다루는 다양한 기능을 제공하는 시스템을 모듈 시스템이라고 부른다.
Common JS(CJS)
모듈 시스템 중 하나로 모듈에서 함수를 가져와서 index 모듈에서 사용할 수 있게 해주는 방법 중 하나이다.
1
2
3
module.exports = {
// 특정 모듈 내에서 정의한 함수
};
1
const { 함수들 } = require("모듈 경로");
이렇게 사용가능하다.
ESM 모듈 시스템
CJS 모듈과 교차하여 사용할 수 없으며, package.json에서 type: module이라고 설정해주어야 한다.
1
export { 함수들 };
또는 함수의 선언문에
1
2
3
export function add(a, b) {
return a + b;
}
이렇게도 사용이 가능하며, 이거 어디서 많이 봤죠~?
또한 default로 내보내는 법도 있는데,
1
2
3
export default function multiply(a, b) {
return a * b;
}
이렇게 하면 import 할 때는
1
2
3
4
5
6
import { 함수들 } from "모듈 경로(주의할 점은 확장자를 명시해 주어야 한다)";
//export default
import multiplly from "모듈 경로";
//또한 default로 내보낸 함수는 이름을 바꿔 불러올 수도 있다.
import mul from "모듈 경로";
Node.js 라이브러리 사용하기
라이브러리란?
프로그램을 개발할 때 필요한 기능들을 미리 만들어서 모듈화 해놓은 것
라이브러리를 새로 설치하면, dependencies라는 필드 안에 설치한 라이브러리의 이름과 버전 정보가 기입이 되고, 이는 우리 프로젝트는 해당 라이브러리를 사용하고 있으니, 해당 라이브러리에 의존해! 라는 뜻이 되는 것이다.
또한 package.json node_modules 폴더와 package-lock.json파일이 생성되는데, node_modules 내부에는 실제로 라이브러리가 설치되는 저장소이며, package-lock.json은 라이브러리의 버전과 정보가 더 정확하고 자세하게 기록되어있다.
좀 더 자세히 말하자면 package.json 의 버전은 ^0.x.x 이런 형식으로 되어있는데 이는 0.버전과 1.버전 사이의 버전 중 가장 최신 버전을 설치하겠다는 의미이고, package-lock.json 내부의 버전은 정확한 설치 버전을 나타낸다.
사용하기
만약 randomcolor라는 라이브러리를 설치했다고 가정해보자.
먼저 import를 해야할 것이다.
1
import randomColor from "randomcolor";
이렇게 해당 라이브러리의 defualt 를 불러온다.
1
const color = randomColor();
이런식으로 사용이 가능하겠다.
또한 만약 node_modules, package-lock.json이 사라지면 당연히 해당 라이브러리는 사용할 수 없을 것이다.
이 때 package.json에 dependencies에 라이브러리의 정보가 있다면, npm i를 통해서 해당 필드안의 모든 라이브러리를 설치할 수 있다.
그렇기 떄문에 용량이 큰 node_modules 폴더는 git에 올리지 않고 해당 프로젝트를 깃에서 받은 후엔 npm i를 하는 것이였다.
참고자료 : 인프런 - 한 입 크기로 잘라먹는 리액트