2023. 7. 31. 17:20ใStudy_Develop/์ธํ๋ฐ - Slack ํด๋ก ์ฝ๋ฉ(๋ฐฑ์๋)
express์์ ์ฒ๋ผ ๋๊ฐ์ด app.use(morgan()) ๋ผ๊ณ ํด๋ ๋๋ค.
์ด๋ฅผ, global middleware๋ผ๊ณ ๋ถ๋ฅธ๋ค.
Moragn ๋ชจ๋์ด๋?
HTTP request logger middleware for node.js : node.js๋ฅผ ์ํ ์์ฒญ๋ค์ ๋ํ ๋ก๊ฑฐ๋ฅผ ์ถ๋ ฅํ๋ ๋ฏธ๋ค์จ์ด!
์์ฒญ์ด ๋ค์ด์ค๋ฉด ํด๋ผ์ด์ธํธ๋ค์ด ์ด๋ค ์์ฒญ์ ํ๊ณ , ์ด๋ป๊ฒ ์๋ตํ๋์ง ํฐ๋ฏธ๋์ ์ถ๋ ฅํ๋ ์ญํ ์ ํ๋ ๋ชจ๋
์ด๋ฐ ๋ชจ๋์ ์ง์ ๋ฏธ๋ค์จ์ด๋ก ๊ตฌํํ ์ ์๋ค.
์ค๋ฌด์์ ๊ทธ๋ฅ Morgan์ ์ฌ์ฉํ๋ฉด ๋๊ธด ํ์ง๋ง, nest์์ ์ผ๋ฐ ๋ฏธ๋ค์จ์ด๋ก ์ด๋ฐ ์ญํ ์ ํ๋ ๋ชจ๋์ ์์ฑํด๋ณด์๋ค.
- src ์์ middlewaresํด๋ ์์ logger.middleware.ts๋ฅผ ๋ง๋ ๋ค
export class LoggerMiddleware implements NestMiddleware {
-> NestMiddelware๋ฅผ implementํด์ LoggerMiddelware๋ฅผ ์์ฑํ๋ค.
-> ์ฌ๊ธฐ์ implements๋ ๋ฐ๋์ ๊ตฌํํด์ผ ํ๋ ๊ฐ์ ์ฌํญ์ด ์๊ธด๋ค.
-> private logger = new Logger('HTTP'); ๋ context๋ฅผ ์์ฑํ๋ ๋ฌธ์ฅ์ด๋ซ, ์ถ๋ ฅ๋ฌธ์ด ๋ง์ ๋ ์ด ์ถ๋ ฅ๋ฌธ์ด ์ธ์ ์๊ธฐ๋ ๊ฑด์ง๋ฅผ ๋ณด์ฌ์ค๋ค.
use(request: Request, response: Response, next: NextFunction) : void {
}
-> ์์ ์ฝ๋ ๋ถ๋ถ๋ง ๋ณด๋ฉด express์ middleware ๊ตฌ์กฐ์ ๊ฐ๋ค.
-> ์ธ์๋ก req, res, next๋ฅผ ๊ฐ๋ ๊ฒ์ ์ ์ ์๊ณ , ๊ทธ๋ ๊ฒ ๋ฐ์ request ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค.
@Injectable()
export class LoggerMiddleware implements NestMiddleware {
private logger = new Logger('HTTP');
use(request: Request, response: Response, next: NextFunction) : void {
const { ip, method, originalUrl } = request;
const userAgent = request.get('user-agent') || '';
response.on('finish', () => {
const { statusCode } = response;
const contentLength = response.get('content-length');
this.logger.log(
`${method} ${originalUrl} ${statusCode} ${contentLength} - ${userAgent} ${ip}`,
);
});
next();
}
}
-> ์ดํ์ ์คํ๋๋ ๊ฒ์ next() ์ธ๋ฐ ๊ทธ ์ด์ ๋ on()ํจ์๋ ๋ผ์ฐํฐ ์คํ์ด ๋๋ฌ์ ๋ 'finish'๊ฐ ์คํ๋๊ณ ๊ทธ ์ ์ ๋น๋๊ธฐ๋ก ์ธํด next()ํจ์๊ฐ ๋จผ์ ์คํ๋๊ธฐ ๋๋ฌธ์ด๋ค.
-> ๋ผ์ฐํฐ ์คํ์ด ๋๋ฌ์ ๋๋ on() ํจ์์์ response์ ์ ๋ณผ๋ฅด ์ ์ฅํ์ฌ this.logger.logํจ์๋ฅผ ์ด์ฉํด ์ถ๋ ฅํ๋ค.
-> ๋ง์ฝ context๋ฅผ ์์ฑํ์ง ์์๋ค๋ฉด, Logger.log()๋ฅผ ํธ์ถํ๋ฉด ๋๋ค.
-> Nest.js์์๋ console.log() ๋์ Logger๋ฅผ ์ฌ์ฉํ๋๋ก ํ์!
(์ด์ : console.log๋ ์ด๋์ ์ฐ๊ฒฐ์ด ๋์ด์๋์ง ์ถ์ ์ด ํ๋ค๊ธฐ ๋๋ฌธ)
์๋ ์์>
new Logger('HTTP');
- HTTP๊ฐ context ์ด๋ค.
- http๊ด๋ จ๋ ์์ฒญ๋ค์ ํน๋ณํ๊ฒ this.logger์์ ๋ณด์ฌ์ค๋ค.
module.ts>
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer): any {
consumer.apply(LoggerMiddleware).forRoutes('*');
}
-> middleware์ฐ๊ฒฐ์ ์ํด, consumer ์์ ๊บผ๋ด์ LoggerMiddeleware๋ฅผ ์ฐ๊ฒฐํด์ค๋ค.
'Study_Develop > ์ธํ๋ฐ - Slack ํด๋ก ์ฝ๋ฉ(๋ฐฑ์๋)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค - ๋ฐฐ์ด ๋ง๋ค๊ธฐ 2 - js (everyํจ์, continue) (0) | 2023.08.04 |
---|---|
Nestjs ํ๊ฒฝ๋ณ์ (env) ์ค์ ๋ฐ ์ฌ์ฉ (0) | 2023.07.29 |
Nest.js ์ controller๊ธฐ๋ณธ ๋ฐ ์ฅ์ (0) | 2023.07.29 |
Nest JS Hot reload ์ค์ ํ๊ธฐ (0) | 2023.07.28 |