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

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

[Nest JS ๋กœ CRUD ๊ฒŒ์‹œํŒ ๋งŒ๋“ค๊ธฐ] (12) ์ปค์Šคํ…€ ํŒŒ์ดํ”„๋ฅผ ์ด์šฉํ•œ ์œ ํšจ์„ฑ ์ฒดํฌ

=> ๋”ฐ๋ผํ•˜๋ฉด์„œ ๋ฐฐ์šฐ๋Š” NestJS ๐Ÿงธ ์ปค์Šคํ…€ ํŒŒ์ดํ”„๋ฅผ ์ด์šฉํ•œ ์œ ํšจ์„ฑ ์ฒดํฌ : Pipe Transform ์ด๋ž€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒˆ๋กญ๊ฒŒ ๋งŒ๋“ค ์ปค์Šคํ…€ ํŒŒ์ดํ”„์— ๊ตฌํ˜„ํ•ด์ค˜์•ผ ํ•จ : Pipe Transform ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋ชจ๋“  ํŒŒ์ดํ”„์—์„œ ๊ตฌํ˜„ํ•ด์ค˜์•ผ ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค : ๋ชจ๋“  ํŒŒ์ดํ”„๋Š” transform() ๋ฉ”์†Œ๋“œ ํ•„์š” : NestJS ๊ฐ€ ์ธ์ž๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋จ ๐ŸŽ€ transform() ๋ฉ”์†Œ๋“œ : ๋‘ ๊ฐœ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ฐ€์ง : ์ฒซ ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์ฒ˜๋ฆฌ๊ฐ€ ๋œ ์ธ์ž์˜ ๊ฐ’ (value) : ๋‘ ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์ธ์ž์— ๋Œ€ํ•œ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•œ ๊ฐ์ฒด -> transform() ๋ฉ”์†Œ๋“œ์—์„œ return ๋œ ๊ฐ’์€ Route ํ•ธ๋“ค๋Ÿฌ๋กœ ์ „ํ•ด์ง (์˜ˆ์™ธ๊ฐ€ ์ƒ๊ธฐ๋ฉด ํด๋ผ์ด์–ธํŠธ๋กœ ์ „ํ•ด์ง) ๐Ÿงธ ์ปค์Šคํ…€ ํŒŒ์ดํ”„๋กœ ์ƒํƒœ ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๊ธฐ : ์ƒํƒœ๋Š” PU..

[Nest JS ๋กœ CRUD ๊ฒŒ์‹œํŒ ๋งŒ๋“ค๊ธฐ] (11) ํŠน์ • ๊ฒŒ์‹œ๋ฌผ์„ ์ฐพ์„ ๋•Œ ์—†๋Š” ๊ฒฝ์šฐ & ์—†๋Š” ๊ฒŒ์‹œ๋ฌผ์„ ์ง€์šธ ๊ฒฝ์šฐ ๊ฒฐ๊ณผ๊ฐ’ ์ฒ˜๋ฆฌํ•˜๊ธฐ

=> ๋”ฐ๋ผํ•˜๋ฉด์„œ ๋ฐฐ์šฐ๋Š” NestJS ๐Ÿงธ ํŠน์ • ๊ฒŒ์‹œ๋ฌผ์„ ์ฐพ์„ ๋•Œ ์—†๋Š” ๊ฒฝ์šฐ ๊ฒฐ๊ณผ๊ฐ’ ์ฒ˜๋ฆฌํ•˜๊ธฐ : ์˜ˆ์™ธ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑํ•˜์—ฌ ์—๋Ÿฌ ํ‘œ์ถœํ•˜๊ธฐ // ID๋กœ ํŠน์ • ๊ฒŒ์‹œ๋ฌผ ๊ฐ€์ ธ์˜ค๊ธฐ getBoardById(id: string): Board { const found = this.boards.find((board) => board.id === id); // ํŠน์ • ๊ฒŒ์‹œ๋ฌผ์„ ์ฐพ์„ ๋•Œ ์—†๋Š” ๊ฒฝ์šฐ ๊ฒฐ๊ณผ๊ฐ’ ์ฒ˜๋ฆฌํ•˜๊ธฐ // ์˜ˆ์™ธ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑํ•˜์—ฌ ์—๋Ÿฌ ํ‘œ์ถœ if (!found) { throw new NotFoundException(`Can't find Board with id ${id}`);; } return found; } ๐Ÿงธ ์—†๋Š” ๊ฒŒ์‹œ๋ฌผ์„ ์ง€์šธ ๊ฒฝ์šฐ ๊ฒฐ๊ณผ๊ฐ’ ์ฒ˜๋ฆฌํ•˜๊ธฐ : ์˜ˆ์™ธ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑํ•˜์—ฌ ์—๋Ÿฌ ํ‘œ์ถœํ•˜๊ธฐ // ID๋กœ ํŠน์ • ๊ฒŒ์‹œ๋ฌผ ์‚ญ..

[Nest JS ๋กœ CRUD ๊ฒŒ์‹œํŒ ๋งŒ๋“ค๊ธฐ] (10) NestJS PIPE & ๊ฒŒ์‹œ๋ฌผ ์ƒ์„ฑ ์‹œ ์œ ํšจ์„ฑ ์ฒดํฌํ•˜๊ธฐ

=> ๋”ฐ๋ผํ•˜๋ฉด์„œ ๋ฐฐ์šฐ๋Š” NestJS ๐Ÿงธ NestJS PIPE : ํŒŒ์ดํ”„๋Š” @Injectable () ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋กœ ์ฃผ์„์ด ๋‹ฌ๋ฆฐ ํด๋ž˜์Šค : data transformation ๊ณผ data validation ์„ ์œ„ํ•ด์„œ ์‚ฌ์šฉ๋จ : ์ปจํŠธ๋กค๋Ÿฌ ๊ฒฝ๋กœ ์ฒ˜๋ฆฌ๊ธฐ์— ์˜ํ•ด ์ฒ˜๋ฆฌ๋˜๋Š” ์ธ์ˆ˜์— ๋Œ€ํ•ด ์ž‘๋™ํ•จ : Nest ๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๊ธฐ ์ง์ „์— ํŒŒ์ดํ”„๋ฅผ ์‚ฝ์ž…ํ•˜๊ณ  ํŒŒ์ดํ”„๋Š” ๋ฉ”์†Œ๋“œ๋กœ ํ–ฅํ•˜๋Š” ์ธ์ˆ˜๋ฅผ ์ˆ˜์‹ ํ•˜๊ณ  ์ด์— ๋Œ€ํ•ด ์ž‘๋™ํ•จ ๐ŸŽ€ data transformation : ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์›ํ•˜๋Š” ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ ๐ŸŽ€ data validation : ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ํ‰๊ฐ€ํ•˜๊ณ  ์œ ์š”ํ•œ ๊ฒฝ์šฐ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ์ „๋‹ฌ (๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์—๋Ÿฌ ์ฒ˜๋ฆฌ) ๋ผ์šฐํ„ฐ ํ•ธ๋“ค๋Ÿฌ (Router Handler) ๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋Š” ์ธ์ˆ˜์— ๋Œ€ํ•ด ์ž‘๋™ํ•จ ํŒŒ์ดํ”„๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ๋ฐ”๋กœ ์ง์ „์—..

[Nest JS ๋กœ CRUD ๊ฒŒ์‹œํŒ ๋งŒ๋“ค๊ธฐ] (7) ๊ฒŒ์‹œ๋ฌผ ์ƒ์„ฑ์„ ์œ„ํ•œ DTO (Data Transfer Object)

=> ๋”ฐ๋ผํ•˜๋ฉด์„œ ๋ฐฐ์šฐ๋Š” NestJS ๐Ÿงธ DTO (Data Transfer Object) ๋ž€ : ๊ณ„์ธต๊ณผ ๋ฐ์ดํ„ฐ ๊ตํ™˜์„ ์œ„ํ•œ ๊ฐ์ฒด : DB ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์–ป์–ด Service ๋‚˜ Controller ๋“ฑ์œผ๋กœ ๋ณด๋‚ผ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด : DTO ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์ „์†ก๋˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•จ : Interface ๋‚˜ class ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ •์˜ ๋จ : ๋ฐ์ดํ„ฐ ์œ ํšจ์„ฑ์„ ์ฒดํฌํ•˜๋Š” ๋ฐ ํšจ์œจ์  + ๋” ์•ˆ์ •์ ์ธ ์ฝ”๋“œ๋กœ ๋งŒ๋“ค์–ด์คŒ : class ๋Š” ๋Ÿฐํƒ€์ž„์—์„œ ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ์ดํ”„ ๊ธฐ๋Šฅ ์ด์šฉ ์‹œ ์œ ์šฉํ•จ ๐ŸŽ€ src/boards/dto/create-board.dto.js export class CreateBoardDto { title: string; description: string; } ๐ŸŽ€ src/boards/boards...

[Nest JS ๋กœ CRUD ๊ฒŒ์‹œํŒ ๋งŒ๋“ค๊ธฐ] (6) ๊ฒŒ์‹œ๋ฌผ ์ƒ์„ฑํ•˜๊ธฐ (CRUD ์˜ C) : Controller

=> ๋”ฐ๋ผํ•˜๋ฉด์„œ ๋ฐฐ์šฐ๋Š” NestJS ๐Ÿงธ ๊ฒŒ์‹œ๋ฌผ ์ƒ์„ฑํ•˜๊ธฐ (CRUD ์˜ C) : Controller : request, response ๋Š” Controller ์—์„œ ์ฒ˜๋ฆฌํ•จ : Express ์—์„œ๋Š” bodyParser ๋ชจ๋“ˆ์„ ์ด์šฉํ•ด์„œ req.body ์‹์œผ๋กœ ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ณด๋‚ด์˜จ ๊ฐ’์„ ๋ฐ›์•„์˜ด : @Body body๋ฅผ ์ด์šฉํ•˜์—ฌ request ์—์„œ ๋ณด๋‚ด์˜จ ๊ฐ’์„ ๊ฐ€์ ธ์˜ด ๐ŸŽ€ src/boards/boards.controller.ts // ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์— ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•จ // @Controller ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋กœ ํด๋ž˜์Šค๋ฅผ ๋ฐ์ฝ”๋ ˆ์ด์…˜ํ•˜์—ฌ ์ •์˜ํ•จ // Handler : @Get, @Post, @Delete ๋“ฑ๊ณผ ๊ฐ™์€ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋กœ ์žฅ์‹ ๋œ ์ปจํŠธ๋กค๋Ÿฌ ํด๋ž˜์Šค ๋‚ด์˜ ๋‹จ์ˆœํ•œ ๋ฉ”์„œ๋“œ import { Body, Cont..