JUINTINATION

Express.js와 nodemon 본문

StudyNote

Express.js와 nodemon

DEOKJAE KWON 2024. 1. 23. 22:53
반응형

nodemon이란?

nodemon은 디렉토리의 파일 변경이 이루어졌을 때 노드 어플리케이션을 자동으로 재시작해주는 모듈로 쉽게 말하면 개발 시 소스 코드 내용 변경으로 인해 서버를 종료하였다가 재시작하는 번거로운 작업 없이 자동으로 변경된 소스 파일로 적용되게 해준다.

일단 프로젝트를 생성한 뒤에 $ npm install nodemon 커맨드를 실행하여 nodemon 모듈을 설치한다.

이 모듈은 프로젝트에서 따로 require할 필요없이 package.json 의 "scripts"에 추가해주면 된다. 예시로 작성한 코드를 읽어보자.

app.js

const express = require('express');

const http = require('http');
const path = require('path');

const app = express();

app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.all('*', (req, res) => {
    res.render('index', { title: 'Nodemon Test', msg: 'nodemon test' });
});

http.createServer(app).listen(app.get('port'), () => {
    console.log('Express server listening on port ' + app.get('port'));
});

지난 Node.js와 Express.js 가볍게 입문해보기 - 3 글에서 작성한 간단한 Hello World 서버 프로젝트를 약간 수정했다. 코드를 읽어봐도 nodemon을 require하는 부분은 보이지 않는다.

index.jade

extends layout

block content
  h1 #{title}
  p Change the title and Run the command "$ npm run nodemon"

nodemon의 특성을 이해하기 쉽게 title을 바꾸기만 하면 바로 적용되도록 설정했다.

package.json

{
  "name": "nodemon-test",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node app.js",
    "nodemon": "nodemon app.js"
  },
  "dependencies": {
    "cookie-parser": "~1.4.4",
    "debug": "~2.6.9",
    "express": "~4.16.1",
    "http-errors": "~1.6.3",
    "jade": "~1.11.0",
    "morgan": "~1.9.1",
    "nodemon": "^3.0.3"
  },
  "main": "app.js",
  "keywords": [],
  "author": "",
  "license": "ISC",
  "description": ""
}

프로젝트를 생성한 뒤에 필요한 모듈들을 모두 다운받은 뒤에 $ npm init -y 커맨드를 실행한 후에 "scripts" 부분만 수정한 것이다. 위의 글에서 app.js 파일을 실행하려면 $ node app.js , $ node app , $ npm run start 커맨드 중 하나를 사용하면 된다고 했는데 nodemon을 적용하여 app.js 파일을 실행하려면 $ npm run nodemon 커맨드를 실행하면 된다.

vscode의 터미널에서 $ npm run nodemon 커맨드를 실행하면 다음과 같이 보인다.

localhost:3000 에 접속하게 되면 위와 같이 뜨는데 이제 app.js에서 제목을 수정해보자.

수정 후의 app.js

const express = require('express');

const http = require('http');
const path = require('path');

const app = express();

app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.all('*', (req, res) => {
	res.render('index', { title: 'Title is changed', msg: 'nodemon test' });
});

http.createServer(app).listen(app.get('port'), () => {
	console.log('Express server listening on port ' + app.get('port'));
});

수정한 이후에 파일 저장을 하면 자동으로 서버가 다음과 같이 재시작된다.

이후에 localhost:3000 에서 새로고침만 하게 되면 다음과 같이 제목이 정상적으로 바뀐 것을 확인할 수 있다.


결론

$ npm run nodemon 커맨드만 실행하면 파일이 변경됐을 때 저장하기만 하면 자동으로 저장되도록 해주는 모듈 nodemon에 대해 공부해봤다. 사실 그 전에 쿠키와 세션을 이용한 로그인 기능을 구현한 이후에 이틀정도 토큰, JWT를 이용한 로그인에 대해 공부중이었는데 로그인 기능이 구현이 되지 않아 포기하고 찾은 간단한 모듈이긴 하다. 그래도 꽤 실용적으로 쓸 수 있는 모듈을 알게된 것 같다. 토큰은 일단 포기하고 다른 자잘한 기능들을 공부하면서 하나씩 차근차근 프로젝트에 적용해보도록 하자.

728x90
Comments