3장 Node.js
Updated:
Node.js란?
Node.js는 하나의 자바스크립트 런타임이다. Node.js 등장 이전에는 웹 브라우저가 유일한 자바스크립트 런타임이었다. Node.js 등장 이후 어떤 환경에서도 자바스크립트를 실행할 수 있게 되었다. Node.js는 vscode의 터미널에서 사용할 수 있다.
Node.js 패키지
복잡한 프로그램을 만들기 위해서는 여러 개의 자바스크립트 파일이 필요하다. 하나의 프로젝트에서 여러 개의 자바스크립트 파일을 Node.js를 이용해 실행할 때는 패키지(package) 형태로 구성한다. 패키지는 Node.js에서 여러 개의 자바스크립트 파일을 실행하고 관리하는 일종이 관리 단위이다.
패키지 만들기
패키지는 여러 파일을 마치 하나의 파일처럼 다룰 수 있게 해주는 관리 단위이다. 그런데 패키지 단위로 여러 파일을 관리하려면 최상위 폴더인 ‘루트 폴더’가 필요하다.
패키지를 생성하려면 npm을 이용해야 한다. npm은 Node Package Manager의 약자로, Node.js 패키지를 관리하는 도구이다. npm에서는 패키지를 관리하기 위한 유요하고 간편한 명령어와 기능들을 제공한다.
비주얼 스튜디오 터미널에서 다음 명령어를 입력한다.
npm init
npm init은 Node.js 패키지를 초기화 하는 명령어이다. 초기화란 Node.js 패키지를 구성하는 데 필요한 최소한의 구성 요소를 자동으로 생성하는 과정이다.
초기화된 패키지의 package.json에는 기본적으로 다음 항목들이 존재한다.
- name: 패키지 이름
- version: 패키지 버전
- description: 패키지 설명
- main: 패키지의 소스 코드 파일 중 메인 역할을 담당하는 소스 코드 파일
- scripts: 패키지를 쉽게 다루기 위해 지정한 매크로 명령어
- author: 패키지를 만든 사람
- license: 패키지의 라이선스
패키지 스크립트 사용하기
Node.js 패키지의 package.json에는 script라는 항목이 있다. 이 script 항목은 복잡한 명령어를 간단한 명령어로 변경하는 일종의 매크로 기능을 지원한다. scripts 항목을 직접 수정하고 사용해본다.
먼저 index.js라는 파일을 생성하고 다음과 같이 코드를 작성한다.
console.log("index run");
index.js를 실행하기 위해서는 node 명령어와 함께 경로를 명시해야 한다. 그러나 package.json의 scripts 항목을 이용하면 아주 간단하게 index.js를 실행할 수 있다. package.json의 scripts 항목을 다음과 같이 수정한다.
{
(...)
"scripts": {
"start": "node index.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
(...)
}
터미널에 npm run start
를 입력하면 package.json에 기록한 scripts에서 일치하는 명령어를 찾아 실행한다.
Node.js 모듈 시스템
여러 파일로 이루어진 패키지에서 각각의 파일이 다른 파일을 불러와 사용하는 모듈 시스템이 대해 알아본다.
모듈과 모듈 시스템
모듈이란 독립적으로 존재하는 프로그램의 일부로 재사용이 가능한 것들로, 다른 프로그램의 부품으로 사용할 수 있다.
자바스크립트에서는 독립된 하나의 파일을 ‘모듈’이라고 부른다. 자바스크립트 모듈은 대개 특정 정보를 담은 하나의 객체거나 특정 목적을 지닌 복수의 함수로 구성하는 경우가 많다.
모듈을 사용하는 방법을 ‘모듈 시스템’이라고 한다. 자바스크립트에는 다양한 모듈 시스템이 있다. ES 모듈 시스템을 중심으로 살펴보자.
ES 모듈 시스템
ES 모듈 시스템은 ECMAScript 모듈 시스템의 약자로, 줄여서 ESM이라고 한다.
ESM 사용 설정하기
Node.js는 기본적으로 ESM이 아닌 CJS 모듈 시스템을 사용한다. 따라서 ESM 모듈 시스템을 사용하려면, package.json에서 설정을 변경해야 한다.
{
"name": "chapter3",
"version": "1.0.0",
"description": "",
"main": "sample.js",
"scripts": {
"start": "node index.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"type": "module"
}
개별 내보내기
자바스크립트에서 모듈은 단지 하나의 파일일 뿐이다. 그래서 모듈의 정의처럼 ‘독립적이고 재사용이 가능’한 자바스크립트 파일은 다른 파일에서 불러와 사용할 수 있다.
모듈이 필요한 이유는 특정 파일의 값이나 함수를 다른 파일에서 공유하기 위함이다. 그런데 특정 값이나 함수를 다른 파일에서 공유하려면, 먼저 해당 파일에서 내보내(export)는 공유 설정 작업이 선행되어야 한다.
개별 불러오기
ESM은 import문으로 모듈에서 값을 불러온다.
전부 불러오기
ESM에서는 불러올 값이 많다면, import * as A from B 형식으로 모듈이 내보낸 값을 한 번에 불러올 수 있다.
기본값으로 내보내기
ESM에서는 export 키워드 다음에 default를 붙여 모듈의 기본값으로 내보낼 수 있다.
라이브러리 사용하기
Node.js 패키지에서는 외부 패키지를 설피해 사용할 수 있다. 외부 패키지란 자신이 만든 Node.js 패키지를 서버에 올려 다른 사람도 사용할 수 있도록 배포한 파일이다.
외부 패키지를 다른 말로 라이브러리라고 한다. 라이브러리는 프로그램을 개발할 때 공통으로 사용할 수 있는 기능들을 모아 모듈화한 것이다. 라이브러리는 완전한 프로그램이 아니며 특정 기능만을 수행한다.
댓글남기기