๋ชฉ๋ก์ ์ฒด ๊ธ (1005)
๐ ๊ณต๋ถํ๋ ์ง์ง์ํ์นด๋ ์ฒ์์ด์ง?
=> ๋ฐ๋ผํ๋ฉด์ ๋ฐฐ์ฐ๋ NestJS ๐งธ ์ ์ ๋ฐ์ดํฐ ์ ํจ์ฑ ์ฒดํฌ ์ ์ ๋ฅผ ์์ฑํ ๋ ์ํ๋ ์ด๋ฆ์ ๊ธธ์ด, ๋น๋ฐ๋ฒํธ ๊ธธ์ด ๋ฑ ์ ํจ์ฑ ์ฒดํฌํ ์ ์๋๋ก Column์ ์กฐ๊ฑด ๋ฃ๊ธฐ ๐ Class-validator ์ ํจ์ฑ ์ฒดํฌ๋ฅผ ํ๊ธฐ ์ํด์๋ class-validator ๋ชจ๋ ์ฌ์ฉ Dto ์์ Request๋ก ๋ค์ด์ค๋ ๊ฐ์ ์ ์ํจ -> Dto ํ์ผ ๊ฐ๋ค ํ๋ํ๋์ class-validator ์ด์ฉํด์ ์ ํจ์ฑ ์กฐ๊ฑด ๋ฃ๊ธฐ ๐ auth-credentials.ts import { IsString, Matches, MinLength, MaxLength } from "class-validator"; export class AuthCredentialsDto { @IsString() @MinLength(4) @MaxLength(..
=> ๋ฐ๋ผํ๋ฉด์ ๋ฐฐ์ฐ๋ NestJS ๐งธ ํ์ ๊ฐ์ ๊ธฐ๋ฅ ๊ตฌํ ๐ user.repository.ts import { EntityRepository, Repository } from "typeorm"; import { User } from "./user.entity"; import { AuthCredentialsDto } from "./dto/auth-credential.dto"; @EntityRepository(User) export class UserRepository extends Repository { async createUser(authCredentialsDto: AuthCredentialsDto): Promise { const { username, password } = authCredentia..
=> ๋ฐ๋ผํ๋ฉด์ ๋ฐฐ์ฐ๋ NestJS ๐งธ ์ธ์ฆ ๊ธฐ๋ฅ ๊ตฌํ์ ์ํ ์ค๋น ๐CLS ๋ฅผ ์ด์ฉํ ๋ชจ๋, ์ปจํธ๋กค๋ฌ, ์๋น์ค ์์ฑ // auth ๋ชจ๋ ์์ฑ nest g module auth // auth ์ปจํธ๋กค๋ฌ ์์ฑ nest g controller auth --no-spec // auth ์๋น์ค ์์ฑ nest g service auth --no-spec ๐งธ User๋ฅผ ์ํ Entity ์์ฑ ์ ์ ์ ๋ํ ์ธ์ฆ์ ํด์ผํ๋ฏ๋ก, ์ ์ ๊ฐ ํ์ํจ ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ํ ์ ์ Entity ์์ฑํ๊ธฐ ๐ user.entity.ts import { BaseEntity, Column, PrimaryColumn, PrimaryGeneratedColumn } from "typeorm"; export class User extends Base..
=> ์ค๋์ ํ ํฌ์ฉ์ด : ์น์์ผ์ด ๋ญ๋๋ฉด ๐ซง ์น์์ผ์ผ๋ก http ์ ์๋ ์ ์ ๋ฉ์์ง ๋ณด๋ด๊ธฐ ๐ฟ server.js const express = require("express"); const app = express(); app.use("/", (req, res) => { res.sendFile(__dirname + "/index.html"); }); app.listen(8080); // ์น์์ผ ์ฐ๊ฒฐ const WebSocket = require("ws"); const socket = new WebSocket.Server({ port: 8081, }); // ์น์์ผ์ผ๋ก ์ค๋ ์ ์ ๋ฉ์์ง ๋ฐ๊ธฐ socket.on("connection", (ws, req) => { ws.on("message", (msg) =>..
=> ๋ฐ๋ผํ๋ฉด์ ๋ฐฐ์ฐ๋ NestJS ๐งธ ๋ชจ๋ ๊ฒ์๋ฌผ ๊ฐ์ ธ์ค๊ธฐ ๐ board.service.ts // ๋ชจ๋ ๊ฒ์๋ฌผ ์กฐํํ๊ธฐ async getAllBoards(): Promise { return this.boardRepository.find(); } ๐ board.controller.ts // ๋ชจ๋ ๊ฒ์๋ฌผ ์กฐํํ๊ธฐ @Get("/") getAllBoard(): Promise { return this.boardsService.getAllBoards(); }
=> ๋ฐ๋ผํ๋ฉด์ ๋ฐฐ์ฐ๋ NestJS ๐งธ ๊ฒ์๋ฌผ ์ ๋ฐ์ดํธ ํ๊ธฐ ๐ board.service.ts // ํน์ ๊ฒ์๋ฌผ์ ์ํ ์ ๋ฐ์ดํธ async updateBoardStatus(id: number, status: BoardStatus): Promise { const board = await this.getBoardById(id); board.status = status; await this.boardRepository.save(board); return board; } ๐ board.controller.ts // ํน์ ๊ฒ์๋ฌผ์ ์ํ ์ ๋ฐ์ดํธ @Patch("/:id/status") updateBoardStatus( @Param("id", ParseIntPipe) id: number, @Body('status',..
=> ๋ฐ๋ผํ๋ฉด์ ๋ฐฐ์ฐ๋ NestJS ๐งธ remove() VS delete() remove : ๋ฌด์กฐ๊ฑด ์กด์ฌํ๋ ์์ดํ ์ remove ๋ฉ์๋๋ฅผ ์ด์ฉํด์ ์ง์ฐ๊ธฐ (๊ทธ๋ ์ง ์์ผ๋ฉด ์๋ฌ) delete : ์์ดํ ์ด ์กด์ฌํ๋ฉด ์ง์ฐ๊ณ , ์กด์ฌํ์ง ์์ผ๋ฉด ์๋ฌด๋ฐ ์ํฅ์ด ์์ remove๋ ํ๋์ ์์ดํ ์ ์ง์ธ ๋ ๋๋ฒ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด์ฉํจ (์์ดํ ์ ๋ฌด + ์ง์ฐ๊ธฐ) delete ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ๋ฒ๋ง ์ ๊ทผ ๊ฐ๋ฅ ๐งธ ๊ฒ์๋ฌผ ์ญ์ ํ๊ธฐ ๐ board.service.ts // ID๋ก ํน์ ๊ฒ์๋ฌผ ์ญ์ ํ๊ธฐ async deleteBoard(id: number): Promise { const result = await this.boardRepository.delete(id); // ID๊ฐ ์กด์ฌํ๋ ๊ฒ์๋ฌผ์ด๋? if (result.af..
=> ๋ฐ๋ผํ๋ฉด์ ๋ฐฐ์ฐ๋ NestJS ๐งธ board.service.ts // ๊ฒ์๋ฌผ ์์ฑํ๊ธฐ async createBoard(createBoardDto: CreateBoardDto): Promise { const {title, description} = createBoardDto; const board = this.boardRepository.create({ title, description, status: BoardStatus.PUBLIC }) await this.boardRepository.save(board); return board; } ํ์ repository ๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ค๋ฉด! ๐ board.repository.ts import { EntityRepository, Repository } fro..