NodeJS와 npm, Express의 개념

Node.js, npm, Express의 개념과 Node.js와 JavaScript의 차이점

image

Node.js란?

Node.js is an open-source, cross-platform, JavaScript runtime environment that executes JavaScript code outside of a browser.(server side)

  • Node.js란 Chrome의 V8엔진(크롬에서 Javascript를 해석하기위해 동작하는 엔진)을 이용해 서버에서도 Javascript가 동작할 수 있게 하는 환경이라고 생각하면 된다.
  • 한마디로 서버사이드에서 실행되는 자바스크립트
  • 말그대로 ‘환경’이기 때문에 서버를 직접 구현해줘야한다.
  • Node.js는 대기 시간을 효율적으로 사용하기 위해 제공하는 API는 모두 비동기식으로 동작한다.(비동기 I/O = 논블로킹 I/O를 사용) API를 실행하고 완료될 때까지 기다리는 게 아니라 다음 API를 실행한다는 것이다.

!처리를 의뢰하는 때에! 그 처리가 완료됐을 때 실행하고싶은 이벤트를 등록하는 방식을 비동기 처리라고 볼 수 있다.

// Node.js로 텍스트 파일을 읽어 들이는 프로그램
// 파일을 비동기로 읽는다.
const fs = require("fs"); // fs 모듈 사용

fs.readFile("test.txt", "utf-8", testLoaded);

// 파일 읽기를 완료했을 때 실행할 함수
function testLoaded(err, data) {
  if (err) {
    console.log("읽기 실패");
    return;
  }
  console.log(data);
}

// 💡 파일을 읽어들일 때 readFile()를 사용하는데 이 메소드는 비동기적으로 파일을 읽어들이므로 파일을 읽는 동안 프로그램이 대기하지 않는다. 파일 읽기가 완료되면 3번째 매개변수에 전달했던 콜백함수가 실행되는 구조이다. 네트워크 입출력시에도 이와 마찬가지로 비동기적으로 처리가 이루어진다.

Node.js의 장점

  • 비동기 I/O로 인한 매우 빠른 고성능 서버 구현 가능. 실시간성이 높은 채팅 어플리케이션이나 작은 처리가 대량으로 발생하는 어플리케이션 구현에 유리.
  • 구글의 최신화된 V8이라는 빠른 스크립트 실행 엔진을 사용해 효율이 좋음.

JavaScript와 Node.js

JavaScript와 Node.js는 자바스크립트 표준인 ECMAScript라는 스펙을 사용한다는 공통점이 있다. 다만 Node.js는 JavaScript가 아니라 ECMAScript를 다룬다.

즉 ECMAScript를 알면 JavaScript, Node.js 둘 모두를 다룰 수 있지만 그 이외의 부분은 별도로 공부해야한다.

JavaScript

  • JavaScript는 document, browser를 다루며 프론트엔드, 즉 클라이언트(BOM, DOM)를 다룰 수 있는 도구이다.
  • JavaScript는 서버를 다룰 수 없다.
  • 웹 브라우저에서 실행할 수 있다.
// JavaScript에서는 다음과 같은 것이 불가능하다.
const http = require("http"); //error

Node.js

  • Node.js는 자바스크립트를 해석하는 크롬의 V8엔진에서 스크립트 실행 엔진을 추출한 것이다. 쉽게 V8엔진이 데스크톱 앱으로 추출된 것이라고 생각하면 된다.
  • Node.js는 백엔드, 즉 서버를 다룰 수 있는 도구이다. 파일 시스템을 이용할 수도 있고 Node.js로 서버를 만들 수도 있다.
  • Express같은 라이브러리를 이용해 Node.js로 서버를 만들곤 하지만, Node.js는 그 자체로 웹 서버가 아니라 웹 서버를 만들 수 있는 하나의 방법이라는 것에 유의하자.
  • Node.js는 클라이언트를 다룰 수 없다.

  • 터미널(윈도우 cmd, Mac 터미널 등)에서 node를 입력해 브라우저 없이도 실행할 수 있다.
// Node.js에서는 다음과 같은 것이 불가능하다.
let elem = document.body; // error

npm

  • npm(Node Package Manager)은 Node.js에서 필요한 모듈들을 다운로드 받을 수 있게 도와주는 포준 패키지 관리 도구이다.
  • 설치가능한 라이브러리에 어떤 것이 있는지는 npm 공식 사이트에서 확인할 수 있다. npmjs
  • 어떤 모듈이 다른 모듈에게 의존적일 때(=어떤 모듈이 다른 모듈을 사용하는 경우), 즉 의존 관계에 있는 모듈도 npm을 이용하면 한꺼번에 설치할 수 있다.

전역 설치

시스템 전체에서 공유할 수 있는 라이브러리를 설치하고 싶다면 모듈을 전역 설치 하면 된다.

$ npm install -g 설치하고싶은모듈명
# npm으로 전역 모듈을 설치할 때 어떤 디렉토리에 설치되는지 알고싶다면 아래 명령어를 사용한다.
$ npm root -g

npm을 사용한 프로젝트 생성 방법

npm으로 모듈 추가/제거 뿐만 아니라 프로젝트 관리도 할 수 있다.

# 1. 프로젝트로 사용할 디렉토리를 생성한다.
# 2. 해당 디렉토리에서 다음 명령어를 실행한다.
$ npm init

npm init을 실행하면 프로젝트에 package.json 파일이 생성된다. 이는 npm으로 프로젝트를 관리하기 위한 설정 파일이다.

npm install로 모듈을 설치할 때 --save 옵션을 주면 package.json에 설치한 모듈과 버전이 기록된다.

package.json을 사용하면 프로젝트를 버전 관리 도구 등으로 백업하고 관리할 때 node_modules 디렉토리 내부의 라이브러리를 따로 관리하지 않아도 된다. 라이브러리와 그 버전이 기록되어 있으므로 npm을 이용해 해당 모듈을 다시 다운로드할 수 있기 때문이다. (node_modules를 지우고 npm install을 실행해보면 package.jsondependencies를 기반으로 필요한 모듈이 자동으로 설치되는 것을 볼 수 있다.)

npm을 사용해 스크립트 실행하기

npm을 이용하면 스크립트 또는 코드 생성 명령어를 관리할 수 있다. 다음과 같이 package.jsonscriptsstart라는 엔트리를 추가해보자.

// 📁 package.json
{
    ...
    "scripts": {
        "start": "node index.js"
    }
    ...
}

그리고 npm run start 명령어를 터미널에서 입력하면 package.jsonscripts/start에 작성한 셀 명령어가 실행된다.

추가로 npm run이라고 입력하면 실행할 수 있는 명령어 목록이 출력된다.

yarn

yarnnpm과 같은 패키지 관리 시스템이다. npm보다 빠르게 동작한다.

Node.js, npm이 설치되어 있다면 다음 명령어로 Yarn을 설치할 수 있다.

$ npm install yarn -g

yarn으로 모듈을 설치할 땐, yarn add 명령어를 사용한다.

$ yarn add 설치할모듈명

# 전역 모듈을 설치하고 싶을 땐 아래처럼 "global" 옵션 사용
$ yarn global add 설치할모듈명

express

Express.js, or simply Express, is a web appplication framework for Node.js

Node.js가 자동차의 엔진이라면, 엔진을 가지고 자동차의 바퀴 등 자동차(웹사이트, 어플리케이션 등)를 쉽게 만들 수 있도록 도와주는 것이 express이다. node.js로 서버를 쉽게 구성할 수 있도록 도와주는 프레임워크이다.

쉽게 말하면 express란 NodeJS를 사용하여 쉽게 서버를 구성할 수 있게 만든 클래스와 라이브러리의 집합체 이다.

express 설치

express 설치에 앞서 다음 두 가지가 선행되어있어야 한다.

  • Node.js 설치
  • npm init을 통한 프로젝트 initialize

그런 다음 npm install express 명령어로 express를 설치하면 된다.

express 사용

const express = require("express"); // express 모듈 로드
const app = express();
const port = 3000; // 포트 번호 지정

app.get("/", (req, res) => {
  res.send("Hello World!");
});

app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`);
});

bodyparser 미들웨어

express 미들웨어 body-parser 모듈

module.exports

module.exports와 exports이해하기

References


Categories:

Updated: