😎 κ³΅λΆ€ν•˜λŠ” μ§•μ§•μ•ŒνŒŒμΉ΄λŠ” μ²˜μŒμ΄μ§€?

[Nest JS 둜 CRUD κ²Œμ‹œνŒ λ§Œλ“€κΈ°] (7) κ²Œμ‹œλ¬Ό 생성을 μœ„ν•œ DTO (Data Transfer Object) λ³Έλ¬Έ

πŸ‘©‍πŸ’» λ°±μ—”λ“œ(Back-End)/Nest js

[Nest JS 둜 CRUD κ²Œμ‹œνŒ λ§Œλ“€κΈ°] (7) κ²Œμ‹œλ¬Ό 생성을 μœ„ν•œ DTO (Data Transfer Object)

μ§•μ§•μ•ŒνŒŒμΉ΄ 2023. 6. 1. 15:04
728x90
λ°˜μ‘ν˜•

<λ³Έ λΈ”λ‘œκ·ΈλŠ” John Ahn μ˜ 유튜브λ₯Ό μ°Έκ³ ν•΄μ„œ κ³΅λΆ€ν•˜λ©° μž‘μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€ :-)>

=> λ”°λΌν•˜λ©΄μ„œ λ°°μš°λŠ” 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.service.ts

// λ‹€λ₯Έ μ»΄ν¬λ„ŒνŠΈμ—μ„œ 이 μ„œλΉ„μŠ€λ₯Ό μ‚¬μš©ν•  수 있게 λ§Œλ“€μ–΄μ€Œ
// @Injectable λ°μ½”λ ˆμ΄ν„°λ‘œ κ°μ‹Έμ Έμ„œ λͺ¨λ“ˆμ— 제곡

import { Injectable } from '@nestjs/common';
import { Board, BoardStatus } from './board.model';
import { CreateBoardDto } from "./dto/create-board.dto";
import { v1 as uuid } from "uuid";

@Injectable()
export class BoardsService {
    // [] 둜 νƒ€μž… 지정함 
    private boards: Board[] = [];

    // λͺ¨λ“  κ²Œμ‹œλ¬Ό μ‘°νšŒν•˜κΈ°
    getAllBoards(): Board[] {
        return this.boards;
    }

    // κ²Œμ‹œλ¬Ό μƒμ„±ν•˜κΈ°
    createBoard(createBoardDto: CreateBoardDto) {
        const {title, description} = createBoardDto;
    
        const board: Board = {
            id: uuid(),    // λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μ•Œμ•„μ„œ ν•΄μ£Όμ§€λ§Œ, μ—¬κΈ°μ„œλŠ” uuid λͺ¨λ“ˆλ‘œ μž„μ˜λ‘œ λ„£μ–΄μ€Œ
            title,
            description,
            status: BoardStatus.PUBLIC
        }
        this.boards.push(board);
        return board;
    }
}

 

πŸŽ€ src/boards/boards.controler.ts

// λ“€μ–΄μ˜€λŠ” μš”μ²­μ„ μ²˜λ¦¬ν•˜κ³  ν΄λΌμ΄μ–ΈνŠΈμ— 응닡을 λ°˜ν™˜ν•¨
// @Controller λ°μ½”λ ˆμ΄ν„°λ‘œ 클래슀λ₯Ό λ°μ½”λ ˆμ΄μ…˜ν•˜μ—¬ μ •μ˜ν•¨
// Handler : @Get, @Post, @Delete λ“±κ³Ό 같은 λ°μ½”λ ˆμ΄ν„°λ‘œ μž₯식 된 컨트둀러 클래슀 λ‚΄μ˜ λ‹¨μˆœν•œ λ©”μ„œλ“œ
import { Body, Controller, Get, Post } from '@nestjs/common';
import { BoardsService } from './boards.service';
import { Board } from './board.model';
import { CreateBoardDto } from './dto/create-board.dto';

@Controller('boards')
export class BoardsController {
    constructor(private boardsService : BoardsService) {}
        
    @Get("/")
    getAllBoard(): Board[] {
        return this.boardsService.getAllBoards();
    }

    @Post()
    createBoard(
        @Body() createBoardDto: CreateBoardDto
    ): Board {
        return this.boardsService.createBoard(createBoardDto)
    }
}

 

728x90
λ°˜μ‘ν˜•
Comments