[NestJS] Middleware, Filters , Guards, Interceptors ๋น„๊ต
ยท
Framework/Nest.js
NestJS๋ฅผ ํ•™์Šตํ•˜๋ฉด์„œ ํ˜ผ๋™๋˜์—ˆ๋˜ ๊ฐœ๋…๋“ค์„ ๊ฐ„๋‹จํžˆ ๋น„๊ตํ•˜๊ณ  ์ •๋ฆฌํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค. ๊ฐ๊ฐ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ณต์‹๋ฌธ์„œ๋ฅผ ์ฐธ์กฐNestJS - MiddlewareNestJS - Guard, JWTNestJS - InterceptorNestJS - Pipe, Validation MiddlewareExpress์˜ ๋ฏธ๋“ค์›จ์–ด์™€ ๊ฐ™์ดํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ธ ์š”์ฒญ์„ ์ปจํŠธ๋กค๋Ÿฌ์˜ ์š”์ฒญ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์ด์ „์— ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ๋‹ค.๋ฏธ๋“ค์›จ์–ด๋Š” ์ „์—ญ์œผ๋กœ ๋ฐ”์ธ๋”ฉ๋œ ๋ฏธ๋“ค์›จ์–ด ์‹คํ–‰ ํ›„ ๋ชจ๋“ˆ์— ๋ฐ”์ธ๋”ฉ๋˜๋Š” ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰ํ•œ๋‹ค.๋‹ค๋ฅธ ๋ชจ๋“ˆ์— ๋ฐ”์ธ๋”ฉ๋˜์–ด ์žˆ๋Š” ๋ฏธ๋“ค์›จ์–ด๋“ค์ด ์žˆ์œผ๋ฉด ๋จผ์ € ๋ฃจํŠธ ๋ชจ๋“ˆ์— ๋ฐ”์ธ๋”ฉ๋œ ๋ฏธ๋“ค์›จ์–ด ์‹คํ–‰ ํ›„ imports์— ์ •์˜ํ•œ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰ํ•œ๋‹ค.๊ธฐ๋Šฅ๋ฏธ๋“ค์›จ์–ด ๊ธฐ๋Šฅ์€ ๋‹ค์Œ  ๋‚ด์šฉ์„ ์ˆ˜ํ–‰ ๊ฐ€๋Šฅํ•˜๋‹ค์ฝ”๋“œ ์‹คํ–‰์š”์ฒญ ๋ฐ ์‘๋‹ต ๊ฐ์ฒด ..
[NestJS] Interface, type, class์˜ ์ฐจ์ด
ยท
Framework/Nest.js
Express์—์„œ Nest๋กœ ์ฒ˜์Œ ๋„˜์–ด๊ฐ”์„ ๋•Œ, Nest์˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ๊ฝค๋‚˜ ์–ด๋ ค์› ๋‹ค.๊ณต์‹๋ฌธ์„œ๋ฅผ ์ฝ๊ณ  ์–ด๋А ์ •๋„๋Š” ์ดํ•ดํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ ์ƒํƒœ๋กœ ์ผ๋‹จ ๋ญ๋ผ๋„ ์ง์ ‘ ๋งŒ๋“ค์–ด๋ณด์ž ๋ผ๋Š” ์ƒ๊ฐ์— ๊นƒํ—ˆ๋ธŒ์— ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๋“ค์ด Nest๋ฅผ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ๋ฅผ ์˜ฌ๋ ค๋‘” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ๋ฌด์ž‘์ • ๋”ฐ๋ผ ๋งŒ๋“ค๊ณ  ์—ฌ๋Ÿฌ ์ฝ”๋“œ๋ฅผ ๋‘˜๋Ÿฌ๋ดค์—ˆ๋Š”๋ฐ๊ฐœ๋ฐœ์ž๋“ค๋งˆ๋‹ค ๋ˆ„๊ตฌ๋Š”  types, ๋ˆ„๊ตฌ๋Š” interface, class๋ฅผ  ์—ฌ๊ธฐ์ €๊ธฐ์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ฑธ ๋ณด๋‹ˆ ์™œ ๋‹ค ๋‹ค๋ฅด๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ฑด์ง€ ํ˜ผ๋ž€์Šค๋Ÿฝ๊ธฐ๋งŒ ํ•˜๊ณ ,  ์ด๊ฒƒ๋“ค์€ ๋„๋Œ€์ฒด ์–ธ์ œ ์–ด๋””์— ์“ฐ๋Š” ๊ฑด์ง€ ๊ถ๊ธˆํ•ด์กŒ๋‹ค.ํƒ€์ž…์„ ์ •์˜ํ•˜๋Š” ์ด์œ ? ์šฐ์„  ์„ธ๊ฐ€์ง€ ๋ฐฉ์‹์„ ๋‹ค๋ฃจ๊ธฐ์— ์•ž์„œ ์ด ์„ธ ๊ฐ€์ง€ ๋ฐฉ์‹ ๋ชจ๋‘ ํƒ€์ž…์„ ์ •์˜ํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๋ฌธ๋ฒ•์ด๋ผ๋Š” ๊ฒƒ์„ ์งš๊ณ  ๋„˜์–ด๊ฐ„๋‹ค.ํƒ€์ž…์„ ์ •์˜ํ•˜๋Š” ๊ฒƒ์€ ์„ ํƒ์‚ฌํ•ญ์ด์ง€๋งŒ, ํƒ€์ž…์„ ..
[NestJS] - NestJS์˜ ๊ธฐ๋ณธ ์•„ํ‚คํ…์ฒ˜ (๋ชจ๋“ˆ/์ปจํŠธ๋กค๋Ÿฌ/์„œ๋น„์Šค ํŒจํ„ด) ์ •๋ฆฌ
ยท
Framework/Nest.js
NestJS๋Š” Node.js์—์„œ ์„œ๋ฒ„์‚ฌ์ด๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋ ˆ์ž„ ์›Œํฌ๋กœ, Angular์—์„œ ์˜๊ฐ์„ ๋ฐ›์•„ ๋ชจ๋“ˆํ™”๋œ ๊ตฌ์กฐ์™€ ์˜์กด์„ฑ ์ฃผ์ž…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜์—ฌ, ํšจ์œจ์ ์ธ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.  JavaScript์™€ TypeScript๋นŒ๋“œ๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ์ง€์›ํ•˜๋ฉฐ OOP, FP ๋ฐ FRP ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.Nest JS๋‚ด๋ถ€์ ์œผ๋กœ Nest๋Š” Express์™€ ๊ฐ™์€ HTTP ํ”„๋ ˆ์ž„ ์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ์„ ํƒ์ ์œผ๋กœ Fastify๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.์ด๋Ÿฐ ๊ณตํ†ต Node.js ํ”„๋ ˆ์ž„์›Œํฌ(Express/Fastiffy) ์œ„์— ์ถ”์ƒํ™” ์ˆ˜์ค€์„ ์ œ๊ณตํ•˜๋ฉด์„œ๋„ API๋ฅผ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ง์ ‘ ๋…ธ์ถœํ•œ๋‹ค.์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ๊ธฐ๋ณธ ํ”Œ๋žซํผ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋งŽ์€ ํƒ€์‚ฌ ๋ชจ๋“ˆ์„ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ Nest ..
connection.query()์˜ ๋ฆฌํ„ด๊ฐ’
ยท
Framework/Node.js
Object.values(query() ์˜ ๋ฆฌํ„ด ๊ฐ’['0'])[0] ์—์„œ ์˜๋ฌธ ์‹œ์ž‘Object.values()๊ฐ์ฒด์˜ key๋ฅผ ๋ฌด์‹œํ•˜๊ณ , ๊ทธ ๊ฐ’๋“ค์„ ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ๋ฌถ์–ด์„œ ๋ฆฌํ„ดํ•จObject.values({a: 1, b: 2 }) => [1,2]connection.query() ์˜ ๊ฒฐ๊ณผ๊ฐ’selectconnection.query('select * ... ')์ด๋Ÿฐ select๋ฌธ์˜ ๊ฒฐ๊ณผ๊ฐ’์€์ถœ๋ ฅ๋˜๋Š” ๊ฐ’์„ ๋กœ์šฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆ ์„œ ๋ฐฐ์—ด๋กœ ๋ฆฌํ„ดํ•œ๋‹ค.[raw1, raw2, raw3 ...]์—ฌ๊ธฐ์„œ ๊ฐ๊ฐ์˜ raw๋Š” ๊ฐ์ฒด๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๋‹ค.raw1 === { values } ํ•˜๋‚˜์˜ raw๊ฐ€ ๊ฐ€์ง€๋Š” ์†์„ฑ๋“ค์„ key์—, ์†์„ฑ๊ฐ’๋“ค์„ value์— ๋„ฃ์–ด์ค€๋‹ค{ Attribute1: Attribute Value1 Attribute..