NestJS - LoggerMiddleware 설정

2023. 3. 13. 12:07·Node/NestJS
반응형

 

NestJS 프레임워크 사용을 위한 기본 개념에 대해 간략하게 정리해 보고자 한다.

본 포스팅에서는 middleware에 대해 알아보고 LoggerMiddle를 설정해 보도록 하겠다.

 

< 목차 >

  1. Middleware
  2. LoggerMiddleware 설정

 

 

1. Middleware 

NestJS 미들웨어는 기본적으로 Express 미들웨어와 동일하다. 미들웨어가 어떠한 방식으로 동작하는지에 대해서는 이전 포스팅에서 작성해 놓은 내용이 있으니 참고하면 좋을 듯 하다.

 

2022.02.10 - [Node/Express] - Node.js - express (8) 라우터와 미들웨어 (router & middleware)

 

Node.js - express (8) 라우터와 미들웨어 (router & middleware)

이번 포스팅에서는 라우터와 미들웨어에 대해 살펴보고자 한다. < 목차 > 라우터와 미들웨어 미들웨어의 매개변수 미들웨어를 변수로 만들어 사용하기 라우트 매개변수 < 라우터와 미들웨어 > No

bitkunst.tistory.com

NestJS에서의 미들웨어에 대해서는 다음 두 가지 정도 숙지하고 있도록 하자.

  • 미들웨어는 라우트 핸들러 이전에 호출되는 함수이다.
  • NestJS 미들웨어는 의존성 주입(Dependency Injection)을 지원한다.

 

 

 

2. LoggerMiddleware 설정 

우선 Nest CLI 를 사용해 다음과 같이 logger 미들웨어를 생성해준다.

## logger 미들웨어 생성
$ nest g mi logger

 

Nest CLI 에 의해 생성된 logger.middleware.ts 파일 안에 다음과 같이 LoggerMiddleware 클래스를 만들어 주도록 하자. NestJS에서는 logging을 할 때 Logger 클래스를 사용하므로 이를 활용하였다.

// logger.middleware.ts 파일

import { Injectable, Logger, NestMiddleware } from '@nestjs/common';
import { NextFunction, Request, Response } from 'express';

@Injectable()
export class LoggerMiddleware implements NestMiddleware {
    // NestJS에서는 로깅을 할 때 Logger 클래스 사용
    private logger = new Logger();

    use(req: Request, res: Response, next: NextFunction) {
        res.on('finish', () => {
            this.logger.log(`${req.ip} ${req.method} ${res.statusCode}`, req.originalUrl);
        });
        next();
    }
}

응답(response)에 대한 결과값도 logging 해주기 위해 res.on( 'finish' , () => {} ) 을 통해 이벤트를 등록하여 응답이 완료되었을 때 this.logger.log( ) 메소드가 실행되도록 하였다.

 

이제 만들어준 LoggerMiddleware를 AppModule에 적용해야 하는데, @Module( ) 데코레이터에는 미들웨어를 위한 장소가 없다. 대신 모듈 클래스의 configure( ) 메소드를 사용해 다음과 같이 AppModule에서 미들웨어를 설정하면 된다. 

// app.module.ts 파일

import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { CatsModule } from './cats/cats.module';
import { LoggerMiddleware } from './common/middlewares/logger.middleware';

@Module({
    imports: [CatsModule],
    controllers: [AppController],
    providers: [AppService],
})
export class AppModule implements NestModule {
    configure(consumer: MiddlewareConsumer) {
        consumer.apply(LoggerMiddleware).forRoutes('*');
    }
}

configure( ) 메소드를 통해 consumer에게 LoggerMiddleware를 제공(apply)하게 되며 forRoutes('*')의 '*'은 모든 엔드 포인트에 대해 LoggerMiddleware를 적용하겠다는 의미이다. 

 

 

 

반응형

'Node > NestJS' 카테고리의 다른 글

NestJS - Pipes & Interceptors  (0) 2023.03.26
NestJS - Exception filter 설정  (0) 2023.03.16
NestJS - 캡슐화(Encapsulation) & Modules  (0) 2023.03.10
NestJS - 의존성 주입(DI) & Providers  (0) 2023.03.10
NestJS - 기본 구조 & Controllers  (0) 2023.03.09
'Node/NestJS' 카테고리의 다른 글
  • NestJS - Pipes & Interceptors
  • NestJS - Exception filter 설정
  • NestJS - 캡슐화(Encapsulation) & Modules
  • NestJS - 의존성 주입(DI) & Providers
bitkunst
bitkunst
Ever tried, Ever failed, No matter. Try again, Fail again, Fail better.
  • bitkunst
    THE DEVELOPER
    bitkunst
  • 전체
    오늘
    어제
  • bitkunst GitHub
    • 분류 전체보기 (154)
      • Setup (1)
      • HTML (7)
      • CSS (10)
      • Go (2)
      • JavaScript (14)
      • TypeScript (3)
      • Node (34)
        • Node.js (7)
        • Express (19)
        • NestJS (8)
      • React (19)
      • MySQL (6)
      • BlockChain (14)
      • Ethereum (20)
      • AWS (5)
      • Linux (2)
      • Infra (2)
        • Docker (2)
      • Testing (2)
      • ABOUT CS (11)
      • 토이 프로젝트 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    블록체인 트랜잭션 만들기
    웹프론트엔드
    블록체인 지갑 서버 만들기
    Nest
    블록체인
    AWS
    타입스크립트 블록 체인
    타입스크립트 블록체인 만들기
    웹
    리액트
    CSS Style
    타입스크립트로 블록체인 만들기
    자바스크립트
    Ethereum
    redux
    AWS EC2
    React
    이더리움 스마트 컨트랙트
    nodejs mysql
    이더리움
    html
    TypeScript Blockchain
    css
    웹개발
    Nodejs
    프론트엔드
    Blockchain
    JavaScript
    타입스크립트로 블록 체인 만들기
    nestJS
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.1
bitkunst
NestJS - LoggerMiddleware 설정
상단으로

티스토리툴바