๐คณ Nest.js ๋ฏธ๋ค์จ์ด๋?
๋ฏธ๋ค์จ์ด๋ Route ํธ๋ค๋ฌ ๋ณด๋ค ๋จผ์ ํธ์ถ๋๋ ํจ์์ ๋๋ค. ๋ฏธ๋ค ์จ์ด ๊ธฐ๋ฅ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฒญ-์๋ต ์ฃผ๊ธฐ์์ ์์ฒญ ๋ฐ ์๋ต ๊ฐ์ฒด ์ ๋ฏธ๋ค์จ์ด ๊ธฐ๋ฅ์ ์ก์ธ์คํ ์ ์์ต๋๋ค. Next() ๋ค์ ์์ ์ผ๋ก ๋๊ธด๋ค๋ ์๋ฏธ์ ๋๋ค.
Nest.js ๋ฏธ๋ค์จ์ด๋ ๊ธฐ๋ณธ์ ์ผ๋ก Express ๋ฏธ๋ค์จ์ด์ ๋์ผํ๋ค.
- ๋ฏธ๋ค์จ์ด ๊ธฐ๋ฅ์ ๋ค์ ์์
์ ์ํํ ์ ์์ต๋๋ค.
- ๋ชจ๋ ์ฝ๋๋ฅผ ์คํํฉ๋๋ค.
- ์์ฒญ ๋ฐ ์๋ต ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค.
- ์์ฒญ-์๋ต ์ฃผ๊ธฐ๋ฅผ ์ข ๋ฃํฉ๋๋ค.
- ์คํ์์ ๋ค์ ๋ฏธ๋ค์จ์ด ํจ์๋ฅผ ํธ์ถํฉ๋๋ค.
- ํ์ฌ ๋ฏธ๋ค์จ์ด ๊ธฐ๋ฅ์ด ์์ฒญ-์๋ต ์ฃผ๊ธฐ๋ฅผ ์ข ๋ฃํ์ง ์์ผ๋ฉด Next() ๋ค์ ๋ฏธ๋ค์จ์ด ๊ธฐ๋ฅ์ผ๋ก ์ ์ด๋ฅผ ์ ๋ฌํ๋๋ก ํธ์ถํด์ผ ํ๋ค. Next() ํธ์ถํ์ง ์์๊ฒฝ์ฐ ์์ฒญ์ด ์ค๋จ ๋ฉ๋๋ค.
์ ๋ฆฌํ๋ฉด: ๋ฏธ๋ค์จ์ด๋ ํด๋ผ์ด์ธํธ ์ฌ์ด๋์์ ์์ฒญํ Http Request์์ Router Handler๋ก ๊ฐ๊ธฐ ์ ์ ๊ธฐ๋ฅ์ ๊ณตํตํ ํ์ฌ ์ฌ์ฉํ๊ฑฐ๋ ์ฒ๋ฆฌํ๊ฒ ํ ์ ์๋๋ฐ ๊ทธ ์ดํ Next()๋ผ๋ ํจ์๋ฅผ ํธ์ถํด์ ๋ค์ ์์ ์ด ์งํ ๋ ์ ์๊ฒ ํ๋ค.
๐คณ Nest.js ์ค์ต?
1. Root ๋๋ ํ ๋ฆฌ์์ middlewareํด๋๋ฅผ ์์ฑํ๊ณ logger.middleware.ts ํ์ผ์ ์์ฑํ๋ค.
2. logger.middleware.ts์ logger ๊ตฌํ
- ๋ฏธ๋ค์จ์ด๋ router๋ณด๋ค ๋จผ์ ์คํ์ด ๋๋ค.
- ๋ผ์ฐํฐ ์์ํ ๋ ์์ฒญ์ ๊ธฐ๋กํ๊ณ , next()๋ก ๋ผ์ฐํฐ๋ก ์ฐ๊ฒฐ์ํ๊ณ ๋๋๊ณ ์คํํ๊ธฐ ์ํด์ res.on์ ์ฌ์ฉํ๋ค.
- Next() ๋ค์์ผ๋ก ๋์ด๊ฐ๊ธฐ์ ์ console.log ์์ฒญ ๋ฐ์ดํฐ์ ๊ฐ์์ ์ค์ ํ๋ค.
import { Injectable, Logger, NestMiddleware } from "@nestjs/common";
import { NextFunction, Request, Response } from "express";
@Injectable()
export class LoggerMiddleware implements NestMiddleware{
private logger = new Logger('HTTP');
use(req: Request, res: Response, next: NextFunction): void{
const { ip, method, originalUrl } = req;
const userAgent = req.get('user-agent') || '';
console.log({
ip: ip,
url : req.url,
method : req.method,
body: req.body,
})
res.on('finish', () => {
const { statusCode } = res;
const contentLength = res.get('content-length');
this.logger.log(
`${method} ${originalUrl} ${statusCode} ${contentLength} - ${userAgent} ${ip}`,
);
});
next();
}
}
3. logger ์ฐ๊ฒฐํ๊ธฐ /src/app.module.ts
- app.module.ts ํ๋จ์ logger ์ฐ๊ฒฐํ๋ค.
- path: ์์ผ๋ ์นด๋๋ก ๋ชจ๋ path ๊ฒฝ๋ก์ middleware ์ค์ ํ๋ค.
- method: ๋ชจ๋ ์์ฒญ method๋ฅผ middleware ์ค์ ํ๋ค.
export class AppModule implements NestModule{
configure(consumer: MiddlewareConsumer) {
consumer
.apply(LoggerMiddleware)
.forRoutes({
path : '*',
method: RequestMethod.ALL
})
}
}
๐คณ Implements, Injectable๋ฅผ ์์๋ณด์
logger ์ ํ ํ๋ฉด์ implements๋ฅผ ์ฌ์ฉํ ์ด์ ๋?
๊ตณ์ด ์ฌ์ฉํ์ง ์์๋ ์๋ฌ๋ ์๋ค!
ํ์ง๋ง ์ฌ์ฉํ๋ฉด ๋ด๋ถ ๋ก์ง์ ๋ฐ๋์ ๊ตฌํํด์ผ ํ๋๋ก ๊ฐ์ ํ๋ฉฐ ํจ์ ์ด๋ฆ, ๋งค๊ฐ๋ณ์, ๋ฆฌํด ๊ฐ ๋ฑ์ ํ์ ๊ฒ์ฌ๋ฅผ ํด์ค๋ค.
ex) configrue๋ผ๋ ์คํ ๋ฐ์์ implements๋ฅผ ๋ถ์ด์ง ์์๋ค๋ฉด ์๋ฌ๋ฅผ ๋ฐ์์ํค์ง ์์ง๋ง ๋ถ์๋ค๋ฉด ์๋ฌ๋ฅผ ๋ฐ์์ํค๊ธฐ ๋๋ฌธ์ ์ฝ๊ฒ ๊ณ ์น ์ ์๋ค.
implements : ๋ถ๋ชจ์ ํด๋์ค์์ ์์์ ๋ด๋ ค์ฃผ๋ ์ญํ์ด์ง๋ง ์ด๊ฒ์ ๋ ๊ณต๋ถ๋ฅผ ํด๋ด์ผ๊ฒ ๋ค.
Nest.JS์์ injectable์ด๋?
@Injectable() //nest.js ๋ฐ์ฝ๋ ์ดํฐ.
injectable ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฉด provider๋ผ๋ ํํ๋ฅผ ๋๋๋ฐ ๊ทธ๋ฌ๊ฒ ๋๋ฉด ํด๋น module์์ providers์ ๋ฃ์ด์ค์ผํ๋ค.
๊ทธ๋ฌ๋ฏ๋ก, nest.JS dependency injection๋ providers๋ฅผ ๋ณด๊ณ controller์ service๋ค์ ๋ฃ์ด์ค๋๋ค.
'Nest.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[NestJS] AWS Parameter Store ํ๋ก์ ํธ 2ํ (0) | 2024.09.05 |
---|---|
[NestJS] AWS Parameter Store ํ๋ก์ ํธ 1ํ (2) | 2024.09.04 |
NestJS Lifecycle (์๋ช ์ฃผ๊ธฐ) ๊ฐ๋ (1) | 2024.05.07 |
Nest.js - ํํ ์ค ์ข ํฉ์๋์ธ API ํ์ฑ (25) | 2023.05.15 |
Nest.js - ๊ฐ๋ & ์ด๊ธฐ์ ํ (28) | 2022.12.01 |