티스토리 뷰

라이브러리 설치

필수적인 라이브러리들을 다음과 같이 설치해서 사용하도록 한다.

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());
...

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
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
글 보관함