์ฌ์ฉ์ค์ธ ์คํ์์ค์ ๋ฒ๊ทธ ์์ ํ๊ธฐ
- #wonderwall
- #fromm
- #nestjs
- #nestjs-pino
- #pino-http
- #logger
- #opensource
๋ค์ด๊ฐ๋ฉฐ
์๋ ํ์ธ์. ๋ ธ๋จธ์ค์์ ๋ฐฑ์๋ ๊ฐ๋ฐ์ ํ๊ณ ์๋ JetBrains์ ์ข์ํ๋ ์ ์๊ธฐ์ ๋๋ค.
ํน๋ณํ JetBrains ์ธ๊ธํ ์ด์ ๋ ์ด๋ฒ์ ๊ธฐ์ฌํ๊ฒ๋ https://github.com/pinojs/pino-http/pull/288 ์ ๊น์ ๊ด๋ จ์ด ์์ต๋๋ค.
์ฌ์ฉ์ค์ธ ์คํ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๊ธฐ๋์ ๋ค๋ฅธ ๋์์ ํ ๋, WebStorm(JetBrains)์ ํตํด node_modules ํํํ๊ธฐ ์ข์ต๋๋ค.
(๋ค๋ฅธ IDE๋ Debug ๊ธฐ๋ฅ์ด ์๋ ๊ฒ์ ์๋์ง๋ง, break๋ฅผ ์ก๊ธฐ๊น์ง ํ๊ฒฝ์ค์ ์ ๋ง์ ์๊ฐ์ ์จ์ผ ํฉ๋๋ค.)
์ ์ฌ ์ด ์จ๋ณด๋ฉ ์๊ธฐ
๋
ธ๋จธ์ค๋ Serverless + NestJS + TypeORM ๋ฑ์ ๊ธฐ์ ์คํ์ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ๋ฐํ๊ณ ์์ต๋๋ค.
๊ทธ๋์ ์
์ฌ ์ด๋ฐ์ NestJS ๊ด๋ จ ์ฌ์ฉ์ค์ธ ์ฌ๋ฌ ์คํ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ดํด๋ณด๊ฒ ๋์๊ณ , ๊ทธ์ค ์๋ฌ์ ๋ก๊ทธ ๊ด๋ จ ํจํค์ง๋ฅผ ๋ณด๋ ์ค์, nestjs-pino์ ์ด๋ฆ์ด ์ ์ ํ์ง ์๋ค๊ณ ์๊ฐํ์ต๋๋ค.
nestjs-pino๋ pino๋ฅผ ๋ฐ๋ก ์ฐ๊ฒฐํ๋ ๊ฒ์ด ์๋๋ผ, pino-http๋ฅผ nestjs module๋ก ๋ง๋ ๊ฒ์ด๋ผ, nestjs-pino ๋ณด๋ค๋ nestjs-pino-http๊ฐ ๋ ์ ํฉํด ๋ณด์์ต๋๋ค.
https://www.npmjs.com/package/nestjs-pino ์์๋ ์๋์ ๊ฐ์ด ์ค์น ๊ฐ์ด๋ ํ๊ณ ์์ต๋๋ค.
npm i nestjs-pino pino-http
๋ฒ๊ทธ ๋ฐ๊ฒฌ
@Module({
imports: [
...
LoggerModule.forRoot({
pinoHttp: {
customProps: (req, res) => ({
context: 'HTTP',
}),
},
}),
...
],
...
})
export class AppModule {}
nestjs-pino์ ๋ณธ์ฒด๊ฐ pino-http๋ผ๋ ์ทจ์ง๋ก ์์ ๊ฐ์ด customProps๋ฅผ ์ถ๊ฐํ์๋๋, context๊ฐ ๋ฐ๋ณต๋๋ ์ํฉ์ด ๋ฐ์ํ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ , ๊ตฌ๊ธ๋ง์ ํด๋ณธ ๊ฒฐ๊ณผ https://github.com/pinojs/pino-http/issues/216, 1๋ ์ด์๋ ์ค๋๋ ์ด์๋ก ์ฌ๋ฌ ์ฌ๋์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค๊ณ ์ด์๋ง ์ ๊ธฐํ๊ณ ์๋ ์ํ์์ต๋๋ค.
์ฌ์ง์ด, maintainer๋ ๊ณ ์น์ง ์๊ณ ์๋ ์ํฉ์ด์์ต๋๋ค.
๋ฒ๊ทธ ์์
pino-http repository์ example.js ์์ ์ฝ๋๋ฅผ ์ฝ๊ฐ ์์ ํ์ฌ, ๋ฐ๋ก ์ฌํํ ์ ์์์ต๋๋ค.
์ด์ ์์ ์ ์ฝ๋์์ 2๋ฒ์งธ customProps์ ์ฝ์ ํ๋ ค๋ ์์ ์ break ์ก์ ์ฅ๋ฉด์ ๋๋ค.
์ด ๋ถ๋ถ์ ์ฌ๋ฌ๋ฒ ์คํํ๋ฉด์ ๊ด์ฐฐํ์์ต๋๋ค.
meta์ ์ผ๋ก ํด๊ฒฐํด ๋ณด๋ ค๋ ์๋๋ฅผ ๋จผ์ ํ์๋๋ฐ, pino-http ๊ตฌ์กฐ์ ์ด๋ ค์ ๊ณ ,
์ด์์ ํต์ฌ์ ์ธ ๋ด์ฉ์ context ๊ฐ์ meta๋ก ๊ฐ์ง๊ณ ์์ง ์๊ณ , req
, res
๊ฐ๊ฐ ๋ฐ๋ก stringifyํ์ฌ, chindingsSym
property์ ์ ์ฅํด ๋๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ์์ต๋๋ค.
2๋ฒ์งธ customProps
์ ์ถ๊ฐํ๋ ค๋ ์์ ์ chindingsSym
์ customProps
๊ฐ ๋ค์ด์๋์ง ์ฒดํฌํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์์ต๋๋ค.
https://github.com/pinojs/pino-http/pull/288/files
ํ ์คํธ ์์ฑ
๊ทธ๋ ๊ฒ ์ด์๋ ์์ ํ์์ง๋ง, ๋ฐ์์ด ๋ฐ๋ก ์์ง๋ ์์์ต๋๋ค.
ํ์ง๋ง, ์ฌ๋ฌ ๊ฐ๋ฐ์์ ํ์๋ ์์๋์ง, PR์ ์์, ์์ง์ฒ ํ๋ ์ฌ๋๋ ์๊ณ ,
์ถ๊ฐ๋ก github issue์ ์ด์ ์์ ์ ํธ์ ํ๋ ๋ถ๋ ์์์ต๋๋ค.
์๊ณ ์ง๋ด๊ณ ์์๋๋ฐ, 1๋ฌ ๋ฐ์ฏค ์ง๋ฌ์ ๋ฌด๋ ต maintainer์ ์์ฒญ์ด ์์์ต๋๋ค.
์ด ๋๋ BEST fromm FRIEND ๋ผ๋ ํ์ฌ ํ๋ก์ ํธ๊ฐ ํ์ฐฝ ์งํ์ค์ผ ๋๋ผ, ์ฌ์ ์ฌ์ ๊ฐ ์์์ต๋๋ค.
๋ฌดํํ๊ฒ ํ๋ก์ ํธ๋ฅผ ์ ๋ง๋ฌด๋ฆฌ ํ๊ณ , ์ด๋ ๋ ๋ฐค ์ด ์ด์๊ฐ ์๊ฐ๋ ๋จ์ ํ ์คํธ ์ฝ๋๋ ์์ฑํ์์ต๋๋ค.
๋ชจ๋ ํ
์คํธ ์ฝ๋๋ stream์ ๊ธฐ๋ฐ์ผ๋ก 'data'
์ด๋ฒคํธ์์ ๋ฐ์ดํ๋ฅผ ๊ฒ์ฆํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํ๋์ด ์์์ต๋๋ค.
๊ทธ ๋์ ์ด์๊ฐ ๋์ค์ง ์์ ์ด์ ๋ ํญ์ JSON.parse
๋ฅผ ๋๋ฐํ ์ํ์ stream์ ๊ฐ์ง๊ณ ํ
์คํธ ํ๊ธฐ ๋๋ฌธ์ด์์ต๋๋ค.
(JSON.parse
์์ ๋์ผํ key๊ฐ ์๋ค๋ฉด, overwrite ํ๊ธฐ ๋๋ฌธ์, ๊ฐ์ key๊ฐ 2๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค.)
ํ
์คํธ ์ฝ๋ ๋ถ์์ ์ด์ ํด๊ฒฐ๊ณผ์ ๋ชป์ง ์๊ฒ ์ค๋ ์ดํด ๋ณด์์ผ ํ์ง๋ง, JSON.parse
์๋ stream์ ์๊ฐํด ๋ด๊ณ , ์ฝ๋๋ ๋ฐ๋ก ์์ฑํ์์ต๋๋ค.
ํ
์คํธ ์ฝ๋๊น์ง ์์ฑํ๊ณ , Request Changes์ ์ถ๊ฐ๋ก ํ๋ถ ๋ reviewer๋ก ์ฐธ์ฌ ํ์
จ๋๋ฐ,
์ฌ ์์ฒญํ ์ฝ๋ ๋ฆฌ๋ทฐ์์๋ ํ๋ฃจ๋ฅผ ๋๊ธฐ์ง ์๊ณ , ๋ฆฌ๋ทฐํด ์ฃผ์
จ์ต๋๋ค.
์ด PR์ v8.4.0๋ก ๋ฆด๋ฆฌ์ฆ ๋์์ต๋๋ค.
์์ ์ด๋ ฅ
๋ง์น๋ฉฐ
์๋ฌด๋๋ ์กฐ์ง์ ๊ตฌ์ฑ์์ผ๋ก์ ์งํํ๊ณ ์๋ ํ๋ก์ ํธ๊ฐ ์ฐ์ ์๋์ง๋ง, ์ฌ์ฉ์ค์ธ ์คํ์์ค์ ์ด์ํ ์ ์ ๋ฐ๊ฒฌ ํ์ ๋, ์ง๋์น์ง ๋ง์๊ณ ์ฌ์ ์๋ ์๊ฐ์ ์ฐธ์ฌํด ๋ณด์ธ์!
ํนํ, Debugger๋ฅผ ํตํด, ํ์ ์ต์ํ์ง ์์ ์ฝ๋๋ฅผ ๋ถ์(read)ํ ๋๋ ๋ฌผ๋ก , ์ต์ํ ์ฝ๋์ ๊ฐ๋ฐ(write) ์๋ ์ธก๋ฉด์์๋ ๋งค์ฐ ์ ์ฉํฉ๋๋ค. IDE์์ Debugger๋ฅผ Enable ํด๋ณด์์ฃ !
์ด๋ ๊ฒ ๋ ํ๋์ ๋ก๊ทธ(์คํ์์ค ์ปค๋ฐ, ๋ธ๋ก๊ทธ)๊ฐ ์์ฌ์ ธ ๊ฐ๋๋ค.