๋ชฉ๋ก๐Ÿ‘ฉ‍๐Ÿ’ป ๋ฐฑ์—”๋“œ(Back-End)/Nest js (38)

๐Ÿ˜Ž ๊ณต๋ถ€ํ•˜๋Š” ์ง•์ง•์•ŒํŒŒ์นด๋Š” ์ฒ˜์Œ์ด์ง€?

[Nest JS ๋กœ CRUD ๊ฒŒ์‹œํŒ ๋งŒ๋“ค๊ธฐ] (35) ์„ค์ • (Configuration)

=> ๋”ฐ๋ผํ•˜๋ฉด์„œ ๋ฐฐ์šฐ๋Š” NestJS ๐Ÿงธ ์„ค์ • (Configuration) runtime ๋„์ค‘์— ๋ฐ”๋€Œ๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹œ์ž‘ํ•  ๋•Œ ๋กœ๋“œ๊ฐ€ ๋˜์–ด ๊ทธ ๊ฐ’๋“ค์„ ์ •์˜ ์„ค์ • ํŒŒ์ผ์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํŒŒ์ผ ํ˜•์‹์„ ์‚ฌ์šฉ (XML, JSON, YAML, Environmant, Varaiables) ๐Ÿงธ Codebase VS Environment Variables (ํ™˜๊ฒฝ๋ณ€์ˆ˜) XML, JSON, YAML : Codebase ์— ํ•ด๋‹น & ํ™˜๊ฒฝ ๋ณ€์ˆ˜ => ๋‚˜๋ˆ„๋Š” ์ด์œ  : ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ API KEY ๊ฐ™์€ ๋‚จ๋“ค์—๊ฒŒ ๋…ธ์ถœ๋˜๋ฉด ์•ˆ๋˜๋Š” ์ •๋ณด๋ฅผ ์ฃผ๋กœ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ์ฒ˜๋ฆฌ ๐ŸŽ€ Codebase : ์ผ๋ฐ˜์ ์œผ๋กœ Port ์ฒ˜๋Ÿผ ๋…ธ์ถœ๋˜๋„ ์ƒ๊ด€ ์—†๋Š” ์ •๋ณด๋“ค ๐ŸŽ€ Environment Variables (ํ™˜๊ฒฝ๋ณ€์ˆ˜) : ๋น„๋ฐ€๋ฒˆํ˜ธ, API ์ฒ˜๋Ÿผ ๋…ธ์ธจ๋˜๋ฉด ์•ˆ๋˜๋Š”..

[Nest JS ๋กœ CRUD ๊ฒŒ์‹œํŒ ๋งŒ๋“ค๊ธฐ] (34) ๋กœ๊ทธ๋ž€

=> ๋”ฐ๋ผํ•˜๋ฉด์„œ ๋ฐฐ์šฐ๋Š” NestJS ๐Ÿงธ ๋กœ๊ทธ ์–ด๋””์—์„œ ๋ฌธ์ œ๊ฐ€ ๋‚˜๋Š”์ง€, ๋น ๋ฅด๊ฒŒ ์ •ํ™•ํ•˜๊ฒŒ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด ๋กœ๊ทธ๊ฐ€ ์ค‘์š”ํ•จ ๐ŸŽ€ ๋กœ๊ทธ์˜ ์ข…๋ฅ˜ - Log : ์ค‘์š”ํ•œ ์ •๋ณด์˜ ๋ฒ”์šฉ ๋กœ๊น… - Warning : ์น˜๋ช…์ ์ด๊ฑฐ๋‚˜ ํŒŒ๊ดด์ ์ด์ง€ ์•Š์€ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์€ ๋ฌธ์ œ - Error : ์น˜๋ช…์ ์ด๊ฑฐ๋‚˜ ํŒŒ๊ดด์ ์ธ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์€ ๋ฌธ์ œ - Debug : ์˜ค๋ฅ˜ ๋ฐœ์ƒ์‹œ ๋กœ์ง์„ ๋””๋ฒ„๊ทธํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ์œ ์šฉํ•œ ์ •๋ณด (๊ฐœ๋ฐœ์ž ์šฉ) - Berbose : ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ๋™์ž‘์— ๋Œ€ํ•œ ํ†ต์ฐฐ๋ ฅ ์ œ๊ณตํ•˜๋Š” ์ •๋ณด (์šด์˜์ž ์šฉ) ๐ŸŽ€ ๋กœ๊ทธ ๋ ˆ๋ฒจ ๐Ÿงธ ๋กœ๊ทธ ์ ์šฉํ•˜๊ธฐ expressjs ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” Wiston ์ด๋ž€ ๋ชจ๋“ˆ ์“ด๋‹ค nestjs ์—๋Š” ์ด๋ฏธ build-in ๋œ logger ํด๋ž˜์Šค ์žˆ์Œ ๐ŸŽ€ main.ts import { NestFactory } from '@n..

[Nest JS ๋กœ CRUD ๊ฒŒ์‹œํŒ ๋งŒ๋“ค๊ธฐ] (33) ์ž์‹ ์ด ์ƒ์„ฑํ•œ ๊ฒŒ์‹œ๋ฌผ์„ ์‚ญ์ œํ•˜๊ธฐ

=> ๋”ฐ๋ผํ•˜๋ฉด์„œ ๋ฐฐ์šฐ๋Š” NestJS ๐Ÿงธ ์ž์‹ ์ด ์ƒ์„ฑํ•œ ๊ฒŒ์‹œ๋ฌผ์„ ์‚ญ์ œํ•˜๊ธฐ ํ˜„์žฌ๋Š”, ๊ฒŒ์‹œ๋ฌผ์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์–ด๋– ํ•œ ์œ ์ €์ธ์ง€์— ์ƒ๊ด€์—†์ด ๋ชจ๋“  ๊ฒŒ์‹œ๋ฌผ์„ ๊ฐ€์ ธ์˜ด ๊ฒŒ์‹œ๋ฌผ์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ ํ•ด๋‹น ์œ ์ €๊ฐ€ ์ƒ์„ฑํ•œ ๊ฒŒ์‹œ๋ฌผ๋งŒ ๊ฐ€์ ธ์˜ค๋„๋ก ํ•œ๋‹ค ๐ŸŽ€ boards.controller.ts // ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์— ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•จ // @Controller ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋กœ ํด๋ž˜์Šค๋ฅผ ๋ฐ์ฝ”๋ ˆ์ด์…˜ํ•˜์—ฌ ์ •์˜ํ•จ // Handler : @Get, @Post, @Delete ๋“ฑ๊ณผ ๊ฐ™์€ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋กœ ์žฅ์‹ ๋œ ์ปจํŠธ๋กค๋Ÿฌ ํด๋ž˜์Šค ๋‚ด์˜ ๋‹จ์ˆœํ•œ ๋ฉ”์„œ๋“œ import { Body, Controller, Delete, Get, Param, ParseIntPipe, Patch, Post, UseGuards, UsePipes, ValidationPipe } f..

[Nest JS ๋กœ CRUD ๊ฒŒ์‹œํŒ ๋งŒ๋“ค๊ธฐ] (32) ํ•ด๋‹น ์œ ์ €์˜ ๊ฒŒ์‹œ๋ฌผ๋งŒ ๊ฐ€์ ธ์˜ค๊ธฐ (getAllBoards)

=> ๋”ฐ๋ผํ•˜๋ฉด์„œ ๋ฐฐ์šฐ๋Š” NestJS ๐Ÿงธ ํ•ด๋‹น ์œ ์ €์˜ ๊ฒŒ์‹œ๋ฌผ๋งŒ ๊ฐ€์ ธ์˜ค๊ธฐ (getAllBoards) ํ˜„์žฌ๋Š”, ๊ฒŒ์‹œ๋ฌผ์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์–ด๋– ํ•œ ์œ ์ €์ธ์ง€์— ์ƒ๊ด€์—†์ด ๋ชจ๋“  ๊ฒŒ์‹œ๋ฌผ์„ ๊ฐ€์ ธ์˜ด ๊ฒŒ์‹œ๋ฌผ์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ ํ•ด๋‹น ์œ ์ €๊ฐ€ ์ƒ์„ฑํ•œ ๊ฒŒ์‹œ๋ฌผ๋งŒ ๊ฐ€์ ธ์˜ค๋„๋ก ํ•œ๋‹ค ๐ŸŽ€ boards.controller.ts // ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์— ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•จ // @Controller ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋กœ ํด๋ž˜์Šค๋ฅผ ๋ฐ์ฝ”๋ ˆ์ด์…˜ํ•˜์—ฌ ์ •์˜ํ•จ // Handler : @Get, @Post, @Delete ๋“ฑ๊ณผ ๊ฐ™์€ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋กœ ์žฅ์‹ ๋œ ์ปจํŠธ๋กค๋Ÿฌ ํด๋ž˜์Šค ๋‚ด์˜ ๋‹จ์ˆœํ•œ ๋ฉ”์„œ๋“œ import { Body, Controller, Delete, Get, Param, ParseIntPipe, Patch, Post, UseGuards, UsePipes, Vali..

[Nest JS ๋กœ CRUD ๊ฒŒ์‹œํŒ ๋งŒ๋“ค๊ธฐ] (31) ์œ ์ €์™€ ๊ฒŒ์‹œ๋ฌผ์˜ ๊ด€๊ณ„ ํ˜•์„ฑ ํ•ด์ฃผ๊ธฐ

=> ๋”ฐ๋ผํ•˜๋ฉด์„œ ๋ฐฐ์šฐ๋Š” NestJS ๐Ÿงธ ์œ ์ €์™€ ๊ฒŒ์‹œ๋ฌผ์˜ ๊ด€๊ณ„ ํ˜•์„ฑ ํ•ด์ฃผ๊ธฐ ํ˜„์žฌ ์œ ์ €๋‚˜ ๊ฒŒ์‹œ๋ฌผ์— ์ƒ์„ฑํ•  ๋Œ€ ๊ทธ ๋‘˜์˜ ๊ด€๊ณ„ ์„ค์ •์ด ์—†์Œ ๊ฒŒ์‹œ๋ฌผ ์ƒ์„ฑ ์‹œ, ์–ด๋–ค ์œ ์ €๊ฐ€ ์ƒ์„ฑํ–ˆ๋Š”์ง€ ์ •๋ณด ๋„ฃ์–ด์•ผ ํ•จ ๐ŸŽ€ ์œ ์ €์™€ ๊ฒŒ์‹œ๋ฌผ ๋ฐ์ดํ„ฐ์˜ ๊ด€๊ณ„ ํ˜•์„ฑ 1) ๊ด€๊ณ„๋ฅผ ํ˜•์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ ์—”ํ‹ฐํ‹ฐ์— ์„œ๋กœ ๊ฐ„์˜ ํ•„๋“œ๋ฅผ ๋„ฃ์–ด์•ผ ํ•จ 2) ํŒŒ๋ผ๋ฏธํ„ฐ - Type - InverseSide (board ์—์„œ ์œ ์ €๋กœ ์ ‘๊ทผํ•˜๋ ค๋ฉด board.user ๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•จ) - Option (eager : true ์ผ ๋•Œ user ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ board ๋„ ๊ฐ™์ด ๊ฐ€์ ธ์˜ด) user (OneToMany) => board (ManyToOne) ๐Ÿงธ ๊ฒŒ์‹œ๋ฌผ ์ƒ์„ฑํ•  ๋•Œ ์œ ์ € ์ •๋ณด ๋„ฃ์–ด์ฃผ๊ธฐ ๊ฒŒ์‹œ๋ฌผ ์ƒ์„ฑ ์š”์ฒญ -> ํ—ค๋” ์•ˆ์— ์žˆ๋Š” ํ† ํฐ์œผ๋กœ ์œ ์ € ์ •๋ณด-> ์œ ์ € ์ •๋ณด์™€ ๊ฒŒ์‹œ๋ฌผ..

[Nest JS ๋กœ CRUD ๊ฒŒ์‹œํŒ ๋งŒ๋“ค๊ธฐ] (30) ์ธ์ฆ๋œ ์œ ์ €๋งŒ ๊ฒŒ์‹œ๋ฌผ ๋ณด๊ณ  ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ธฐ

=> ๋”ฐ๋ผํ•˜๋ฉด์„œ ๋ฐฐ์šฐ๋Š” NestJS ๐Ÿงธ ์ธ์ฆ๋œ ์œ ์ €๋งŒ ๊ฒŒ์‹œ๋ฌผ ๋ณด๊ณ  ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ธฐ ๐ŸŽ€ ์œ ์ €์—๊ฒŒ ๊ฒŒ์‹œ๋ฌผ ์ ‘๊ทผ ๊ถŒํ•œ ์ฃผ๊ธฐ ์ธ์ฆ์— ๊ด€ํ•œ ๋ชจ๋“ˆ์„ board ๋ชจ๋“ˆ์— ์“ธ ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋ฏ€๋กœ, board module ์—์„œ ์ธ์ฆ ๋ชจ๋“ˆ imports ํ•˜ ๐ŸŽ€ UseGuards (AuthGuard()) ์‚ฌ๋žŒ์ด ์š”์ฒญ์„ ์ค„ ๋•Œ ์˜ฌ๋ฐ”๋ฅธ ํ† ํฐ์„ ๊ฐ€์ง€๊ณ  ์š”์ฒญ์„ ์ฃผ๋Š”์ง€ ๋ณธ ํ›„์— ๊ฒŒ์‹œ๋ฌผ์— ์ ‘๊ทผ ํ•  ๊ถŒํ•œ ์คŒ AuthGuard (์ธ์ฆ ๋ฏธ๋“ค์›จ์–ด) ๋Š” ๊ฐ๊ฐ์˜ ๋ผ์šฐํŠธ ๋ณ„๋กœ ์ค„ ์ˆ˜ ์žˆ๊ณ , ํ•œ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ปจํŠธ๋กค๋Ÿฌ ์•ˆ์— ๋“ค์–ด์žˆ๋Š” ๋ชจ๋“  ๋ผ์šฐํ„ฐ ์ค„ ์ˆ˜ ์žˆ์Œ ๐ŸŽ€ boards.controller.ts // ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์— ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•จ // @Controller ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋กœ ํด๋ž˜์Šค๋ฅผ ๋ฐ์ฝ”๋ ˆ์ด์…˜ํ•˜์—ฌ ์ •์˜ํ•จ // Handler : @Get..