JUINTINATION
Express.js와 nodemon 본문
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를 이용한 로그인에 대해 공부중이었는데 로그인 기능이 구현이 되지 않아 포기하고 찾은 간단한 모듈이긴 하다. 그래도 꽤 실용적으로 쓸 수 있는 모듈을 알게된 것 같다. 토큰은 일단 포기하고 다른 자잘한 기능들을 공부하면서 하나씩 차근차근 프로젝트에 적용해보도록 하자.
'StudyNote' 카테고리의 다른 글
도커(Docker) 가볍게 입문해보기 - 3 (1) | 2024.01.27 |
---|---|
도커(Docker) 가볍게 입문해보기 - 2 (3) | 2024.01.26 |
Express.js와 passport-local을 사용한 로그인 테스트 (0) | 2024.01.21 |
Express.js의 morgan과 cookie-parser, express-session (2) | 2024.01.21 |
Express.js과 MVC 패턴, Controller & Service & Repository (3) | 2024.01.20 |