2022. 12. 22. 18:49ใBackend/NestJS
์ด์ ๊ธ
๋ฏธ๋ค์จ์ด ( in NestJS )
๋ฏธ๋ค์จ์ด๋ NestJS ์์ฒญ ์๋ช ์ฃผ๊ธฐ์์ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ๋ค์ด์ค๋ request๊ฐ ๊ฐ์ฅ ๋จผ์ ์ฒ๋ฆฌ๋๋ ํธ๋ค๋ฌ์ด๋ค.
Node.js์ Express๋ฅผ ๋ค๋ค๋ณด์๋ค๋ฉด ์ด๋ฏธ ์ต์ํ ๊ฐ๋ ์ธ๋ฐ, Express ๋ฏธ๋ค์จ์ด์์๋ request, response ๊ฐ์ฒด์ ๋๋ถ์ด ๋ค์ ๋ฏธ๋ค์จ์ด๋ ๋ผ์ฐํฐ๋ฅผ ํธ์ถํ๋ next() ํจ์๋ฅผ ๋ค๋ฃฐ ์ ์๋ค.
app.use((req,res,next)=>{
console.log('Request is received...')
next() // ์คํ ์์ ๋ค์ ๋ฏธ๋ค์จ์ด๋ก req,res ์ ๋ฌ
})
๋ฏธ๋ค์จ์ด ์์ฑ
NestJS๋ ๊ธฐ๋ณธ์ ์ผ๋ก Express๋ฅผ ๋ํํ ํ๋ ์์ํฌ์ด๊ธฐ ๋๋ฌธ์ ์์ ๋์ผํ ๋ฐฉ์์ผ๋ก ์๋ํ๋ค.
๋ฏธ๋ค์จ์ด๋ฅผ ์์ฑํ๋ ๊ฒ ๋ํ ์์ ๋์ผํ๊ฒ ์์ฑํ ์ ์์ผ๋ฉฐ(ํจ์ ๋ฏธ๋ค์จ์ด), ์์กด์ฑ์ด ํ์ํ๊ฑฐ๋ ๋ค๋ฅธ ๋ชจ๋์ ์ฃผ์ ๋์ด์ผ ํ๋ ๊ฒฝ์ฐ์๋ ๋ค์๊ณผ ๊ฐ์ด @Injectable() ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ด์ฉํ ํด๋์ค์ use ๋ฉ์๋์ ํํ๋ก ์์ฑ์ด ๋๋ค.(ํด๋์ค ๋ฏธ๋ค์จ์ด)
import { Injectable, NestMiddleware } from '@nestjs/common';
import { Request, Response, NextFunction } from 'express';
@Injectable()
export class LoggerMiddleware implements NestMiddleware {
use(req:Request, res:Reponse, next:NextFunction){
console.log('Request is received...');
next();
}
}
์ด ๋๋ฌธ์ ํจ์ ๋ฏธ๋ค์จ์ด๋ ์์กด์ฑ์ด ํ์ ์๋ ๊ฐ๋จํ ๋์์ผ ๋ ์ฃผ๋ก ์ฌ์ฉํ๋ฉฐ, ๋ ์ฌ์ฉ์ด ์ถ์ฒ๋๋ค.
๋ฏธ๋ค์จ์ด ์ ์ฉ
NestJS์์๋ ๋ฏธ๋ค์จ์ด๋ฅผ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ด ํฌ๊ฒ 2๊ฐ์ง๊ฐ ์กด์ฌํ๋ค.
1. ์ ์ญ ๋ฒ์ ๋ฏธ๋ค์จ์ด
ํด๋น ๋ฐฉ์์ ์์ฒญ์ด NestJS ์๋ฒ์ ๋ค์ด์์ ๋ ๊ฐ์ฅ ๋จผ์ ๊ฑฐ์น๋ ์๋ช ์ฃผ๊ธฐ๋ฅผ ์์ฑํ ์ ์๋ค. ๋ฐฉ๋ฒ์ ๋จ์ํ๋ฐ, ๋ฏธ๋ค์จ์ด ํจ์๋ฅผ ๋ง๋ ๋ค NestJS์ ๋ณด์ผ๋ฌํ๋ ์ดํธ ์์์ (bootstrap() ํจ์)์ Express์์ ์ฌ์ฉํ๋ ๋ฐฉ์๊ณผ ๋์ผํ๊ฒ ์ฌ์ฉํด์ฃผ๋ฉด ๋๋ค.
// logger.middleware.ts
import { Request, Response, NextFunction } from 'express';
export const logger = (req:Request, res:Response, next:NextFunction) => {
console.log('Request is received...');
next();
};
// main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { logger } from './logger.middleware';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.use(logger);
await app.listen(3000);
}
bootstrap();
์ ์ญ ๋ฒ์ ๋ฏธ๋ค์จ์ด๋ ์์ ์ธ๊ธํ๋๋ก ์์ฒญ ์๋ช ์ฃผ๊ธฐ์์ ๊ฐ์ฅ ์ ๋ฉด์ ์์นํ๊ฒ ๋๋ฉฐ, ์ ์ญ ๋ฒ์ ๋ฏธ๋ค์จ์ด ๊ฐ ์์๋ ๋จผ์ ๋จผ์ ํธ์ถ๋ ์์์ด๋ค.
์ด ๋ ํด๋น ๋ฐฉ์์ผ๋ก ์ด์ฉ๋๋ ๋ฏธ๋ค์จ์ด๋ ์์กด์ฑ ์ฃผ์ ์ด ๋ถ๊ฐ๋ฅํ๋ค. ๋ฐ๋ผ์ ํจ์ ๋ฏธ๋ค์จ์ด๊ฐ ์ฃผ๋ก ์ด์ฉ๋๋ค. ๋ง์ฝ ์์กด์ฑ์ด ํ์ํ ๋ฏธ๋ค์จ์ด์ ์ ์ญ ์ค์ ์ด ํ์ํ๋ค๋ฉด, ์๋์ ๋ชจ๋ ๋ฒ์ ๋ฏธ๋ค์จ์ด๋ฅผ ์ด์ฉํ ์ ์ญ ์ค์ ์ ๊ณ ๋ คํด์ผํ๋ค.
2. ๋ชจ๋ ๋ฒ์ ๋ฏธ๋ค์จ์ด
ํด๋น ๋ฐฉ์์ ์์ ์ ์ญ ๋ฒ์ ๋ฏธ๋ค์จ์ด๋ฅผ ๊ฑฐ์น ๋ค ์คํ๋๋ ๋ฏธ๋ค์จ์ด๋ค์ ๋ฑ๋กํ ์ ์๋ค. ๋ชจ๋ ๋ฒ์ ๋ฏธ๋ค์จ์ด๋ค์ ์ต์์ ๋ชจ๋์ ๋ฐ์ธ๋ฉ๋ ๋ฏธ๋ค์จ์ด๋ถํฐ ์๋ํ๋ฉฐ, ๊ทธ ์ดํ์๋ imports ๋ฐฐ์ด์ ์ถ๊ฐ๋์ด์๋ ์์๋๋ก ๊ฐ ๋ชจ๋์ ๋ฏธ๋ค์จ์ด๋ค์ด ์๋ํ๋ค.
๋ชจ๋ ๋ฒ์์ ๋ฏธ๋ค์จ์ด๋ ๋ค์๊ณผ ๊ฐ์ด ๋ฑ๋กํด์ค๋ค.
import { Module, NestModule, MiddlewareConsumer, RequestMethod } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { LoggerMiddleware } from './logger.middleware';
@Module({
imports: [],
controllers: [AppController],
providers: [AppService],
})
export class AppModule implements NestModule {
configure(consumer:MiddlewareConsumer) {
consumer
.apply(LoggerMiddleware)
.exclude( // ๋ฏธ๋ค์จ์ด ์ ์ฉ์ ์ ์ธํ ๊ฒฝ๋ก, ์๋ค๋ฉด exclude ๋ฉ์๋ ์๋ต ๊ฐ๋ฅ
{path: 'test2', method: RequestMethod.ALL,},
)
.forRoutes( // ๋ฏธ๋ค์จ์ด๋ฅผ ์ ์ฉํ ๊ฒฝ๋ก
{path: 'test', method: RequestMethod.GET,},
);
}
}
๋ชจ๋ ๋ฒ์์ ๋ฏธ๋ค์จ์ด์์ ์์ผ๋์นด๋ ๋ฌธ์๋ฅผ ์ด์ฉํ๋ฉด ์ ์ญ ๋ฏธ๋ค์จ์ด์ฒ๋ผ ์๋ํ๋๋ก ์ค์ ํ ์๋ ์๋ค.
import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { LoggerMiddleware } from './logger.middleware';
@Module({
imports: [],
controllers: [AppController],
providers: [AppService],
})
export class AppModule implements NestModule {
configure(consumer:MiddlewareConsumer) {
consumer
.apply(LoggerMiddleware)
.forRoutes('*'); // ๋ชจ๋ ๊ฒฝ๋ก, ๋ชจ๋ ๋ฉ์๋์ ๋ํด ๋ฏธ๋ค์จ์ด ์ ์ฉ
}
}
์ด๋ฅผ ํตํด ์์กด์ฑ์ด ํ์ํ ๋ฏธ๋ค์จ์ด๋ ์ ์ญ์ผ๋ก ์ค์ ํ ์ ์๋ค.
๋ฏธ๋ค์จ์ด vs ์ธํฐ์ ํฐ
๋ฏธ๋ค์จ์ด์ ๋ํด ์ ๋ฆฌ๋ฅผ ํ๋ค๋ณด๋ ์ดํ์ ๋ค๋ฃฐ 'NestJS์ ์ธํฐ์ ํฐ์ ๋ฌด์จ ์ฐจ์ด๊ฐ ์์ง?' ๋ผ๋ ์๊ฐ์ด ๋ค์๋ค.
์ด์ ๋ํด ์ข ์ฐพ์๋ณด๋, ์คํ์ค๋ฒํ๋ก์ฐ์ ๋ค์์ ๊ธ์ ์ฐพ์ ์ ์์๋ค.
์์ฝํ์๋ฉด,
- ์ธํฐ์ ํฐ๋ ์ปจํธ๋กค๋ฌ์ ์ ํ๋ก ์์ฒญ, ์๋ต์ ์กฐ์ํ ์ ์๋ค.
- ๋ฏธ๋ค์จ์ด๋ ์ปจํธ๋กค๋ฌ์ ์ ์๋ง ๋ํ๋๊ธฐ ๋๋ฌธ์ ์์ฒญ, ์๋ต์ ์กฐ์์ด ๊ฐ๋ฅํ์ง๋ง ์ปจํธ๋กค๋ฌ์์ ๋ฐํ๋ ์๋ต์ ๋ํด์๋ ์กฐ์ํ ์ ์๋ค.
์ ๋๊ฐ ๋๋ ๊ฒ ๊ฐ๋ค.
'Backend > NestJS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
NestJS Request Lifecycle (5) - Exception Filter (0) | 2023.01.13 |
---|---|
NestJS Request Lifecycle (4) - Pipe (0) | 2022.12.29 |
NestJS Request Lifecycle (3) - Interceptor (0) | 2022.12.26 |
NestJS Request Lifecycle (2) - Guard (0) | 2022.12.23 |
NestJS Request Lifecycle (0) - ๊ฐ์ (0) | 2022.12.22 |