티스토리 뷰
라이브러리 설치
필수적인 라이브러리들을 다음과 같이 설치해서 사용하도록 한다.
dotenv
.env파일을 사용하기 위해 dotenv 라이브러리를 설치한다.
dotenv 설치
> npm install dotenv --save
dotenv 사용
.env환경을 사용하려면 다음과 같이 사용할 수 있다.
const dotenv = require('dotenv');
dotenv.config();
const NODE_ENV = process.env.NODE_ENV;
bodyparser
bodyparser 설치
> npm install body-parser --save
bodyparser 설정
/app.js
...
const logger = require('morgan');
const bodyParser = require('body-parser');
...(중간생략)...
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
...
(적당히 위와 같은 위치에 넣어주자.)
logger
로그를 잘 관리할 수 도록 winston을 설치해서 로깅처리를 하도록 한다.
로깅처리를 위한 winston 설치
> npm install winston --save
로그파일 작성을 위한 winston-daily-rotate-file 설치
매일 날짜에 맞춰 로그를 자동으로 생성해 주는 라이브러리를 설치 한다.
> npm install winston-daily-rotate-file --save
logger 설정
다음과 같이 로그전용 라이브러리를 생성해서 로깅처리를 하도록 한다.
(콘솔 출력과 로그파일 출력을 설정할 수 있다.)
/lib/logger.js
const { createLogger, format, transports } = require('winston');
require('winston-daily-rotate-file');
const dotenv = require('dotenv');
const fs = require('fs');
dotenv.config();
// logger level 세팅
const loggerLevel = process.env.LOGGER_LEVEL || 'info';
// const { env } = envConfig;
const logDir = 'log';
// Log only if info.level less than or equal to this level
// { error: 0, warn: 1, info: 2, verbose: 3, debug: 4, silly: 5 }
// log directory
if (!fs.existsSync(logDir)) {
fs.mkdirSync(logDir);
}
// log file
const dailyRotateFileTransport = new transports.DailyRotateFile({
// 로그파일 출력 세팅
filename: `${logDir}/%DATE%.log`,
datePattern: 'YYYY-MM-DD',
format: format.combine(
format.printf(
(info) => `${info.timestamp}[${info.level}] ${info.message}`,
),
),
});
const logger = createLogger({
// 로거 환경 세팅(기본 세팅)
level: loggerLevel,
format: format.combine(
// format.label( { label: 'label123' }),
format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss.SSS' }),
format.json(),
),
transports: [
new transports.Console({
// 콘솔 출력 세팅
level: loggerLevel,
format: format.combine(
format.colorize(),
format.printf(
(info) => `${info.timestamp}[${info.level}] ${info.message}`,
),
),
}),
dailyRotateFileTransport,
],
});
module.exports = logger;
logger 관련 구 코드 삭제
로그관련 구코드는 삭제하고 새로만든 라이브러리를 넣도록 한다.
/app.js
...
// const logger = require('morgan'); // 구코드 삭제
const logger = require('./lib/logger');
... (중간생략)...
const app = express();
logger.info('app start');
... (중간생략)...
// app.use(logger('dev')); // 구코드 삭제
...
app을 실행시키고 콘솔과 로그파일에 동일하게 출력되는지 확인해 보자.
> npm run dev
> nodeproj@0.0.0 dev C:\Workspace\nodeproj
> nodemon ./bin/www
[nodemon] 2.0.15
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node ./bin/www`
2022-01-12 11:44:50.266[info] app start
(다음의 로그파일을 확인한다.)
/log/2022-01-12.log
2022-01-12 11:44:50.266[info] app start
로그파일의 내용과 콘솔 출력의 내용이 같은지 확인 해 볼 것.
(로그파일 및 디렉토리는 자동으로 생성 된다.)
logger 사용 예제
logger는 다음과 같이 사용할 수 있다.
/routes/index.js
const express = require('express');
const logger = require('../lib/logger');
const router = express.Router();
/* GET home page. */
router.get('/', (req, res, next) => {
res.render('index', { title: 'Express' });
});
// logTest
router.get('/log-test', (req, res, next) => {
logger.error('This message is error');
logger.warn('This message is warn');
logger.info('This message is info');
logger.verbose('This message is verbose');
logger.debug('This message is debug');
logger.silly('This message is silly');
res.send('log test');
});
module.exports = router;
로그 테스트를 위한 URL에 방문해 보자
http://localhost:3000/log-test
생성된 로그파일 및 콘솔 출력을 확인해 보자.
/log/2021-01.12.log
2022-01-12 11:49:31.054[error] This message is error
2022-01-12 11:49:31.056[warn] This message is warn
2022-01-12 11:49:31.056[info] This message is info
2022-01-12 11:49:31.057[verbose] This message is verbose
2022-01-12 11:49:31.057[debug] This message is debug
주의 로그 출력은 .env의 LOGGER_LEVEL에 따라 결정 된다.
(LOGGER_LEVEL=info인 경우 error, warn, info만 출력 됨)
cors
cors를 처리하기 위해 cors를 설치한다.
cors 설치
> npm install cors --save
cors 환경 설정
환경설정 파일을 다음과 같이 생성한다.
/config/corsConfig.json
{
"origin": ["http://localhost:3000"],
"methods": ["OPTIONS", "GET", "POST", "HEAD", "PUT", "DELETE"]
}
주의
cors정책에서 origin은 등록하지 말고 전부 막도록 해야 한다.
(front에서 접근할때 proxy를 이용해서 접근하도록 해야 한다. 모든 프론트 서버를 열어줄 수 없다.)
cors 적용
다음과 같이 일괄로 적용시키도록 한다.
(각 라우터마다 따로 적용하는 방법도 있으나 관리포인트가 늘어난다.)
/app.js
...
const cors = require('cors');
const corsConfig = require('./config/corsConfig.json');
const logger = require('./lib/logger');
...(중간생략)...
app.use(cors(corsConfig));
app.use(express.json());
...
'Web > Backend_서버구현하기' 카테고리의 다른 글
로그인을 위한 백엔드 서버_DB : Table모델생성 (0) | 2022.03.24 |
---|---|
로그인을 위한 백엔드 서버_DB 연동 (0) | 2022.03.24 |
로그인을 위한 백엔드 서버 구현 시작 (0) | 2022.03.24 |
[Postman]DB 수정 (0) | 2022.02.14 |
[Node.js]DB-Server_Sequelize (0) | 2022.02.14 |
- Total
- Today
- Yesterday
- oculuspro
- sequelize
- TouchDesigner
- opencv
- runwayai
- AI
- ai image generator
- 유니티
- ai film
- imgtoimg
- 후디니
- krea
- DeepLeaning
- node.js
- Java
- Midjourney
- Arduino
- 라즈베리파이
- VR
- RNN
- CNC
- Python
- colab
- houdini
- three.js
- Unity
- google ai studio
- docker
- MQTT
- Express
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |