λͺ©λ‘π©π» λ°±μλ(Back-End) (156)
π 곡λΆνλ μ§μ§μνμΉ΄λ μ²μμ΄μ§?

=> Realtime Chat With Users & Rooms - Socket.io, Node & Express π 1) Front-End μ½λ νμΌ λ³΅λΆνκΈ° https://github.com/bradtraversy/chatcord/tree/master/public π 2) νκ²½μ€μ npm init npm install express socket.io moment npm install -D nodemon π package.json { "name": "realtimechat", "version": "1.0.0", "description": "realtime chat app with rooms", "main": "index.js", "scripts": { "start": "node server", "dev..

=> λ°λΌνλ©΄μ λ°°μ°λ NestJS π§Έ μ€μ (Configuration) runtime λμ€μ λ°λλ κ²μ΄ μλ, μ ν리μΌμ΄μ μ΄ μμν λ λ‘λκ° λμ΄ κ·Έ κ°λ€μ μ μ μ€μ νμΌμ μ¬λ¬κ°μ§ νμΌ νμμ μ¬μ© (XML, JSON, YAML, Environmant, Varaiables) π§Έ Codebase VS Environment Variables (νκ²½λ³μ) XML, JSON, YAML : Codebase μ ν΄λΉ & νκ²½ λ³μ => λλλ μ΄μ : λΉλ°λ²νΈμ API KEY κ°μ λ¨λ€μκ² λ ΈμΆλλ©΄ μλλ μ 보λ₯Ό μ£Όλ‘ νκ²½ λ³μλ‘ μ²λ¦¬ π Codebase : μΌλ°μ μΌλ‘ Port μ²λΌ λ ΈμΆλλ μκ΄ μλ μ λ³΄λ€ π Environment Variables (νκ²½λ³μ) : λΉλ°λ²νΈ, API μ²λΌ λ ΈμΈ¨λλ©΄ μλλ..

=> λ°λΌνλ©΄μ λ°°μ°λ NestJS π§Έ λ‘κ·Έ μ΄λμμ λ¬Έμ κ° λλμ§, λΉ λ₯΄κ² μ ννκ² νμ νκΈ° μν΄ λ‘κ·Έκ° μ€μν¨ π λ‘κ·Έμ μ’ λ₯ - Log : μ€μν μ 보μ λ²μ© λ‘κΉ - Warning : μΉλͺ μ μ΄κ±°λ νκ΄΄μ μ΄μ§ μμ μ²λ¦¬λμ§ μμ λ¬Έμ - Error : μΉλͺ μ μ΄κ±°λ νκ΄΄μ μΈ μ²λ¦¬λμ§ μμ λ¬Έμ - Debug : μ€λ₯ λ°μμ λ‘μ§μ λλ²κ·Ένλ λ° λμμ΄ λλ μ μ©ν μ 보 (κ°λ°μ μ©) - Berbose : μμ© νλ‘κ·Έλ¨μ λμμ λν ν΅μ°°λ ₯ μ 곡νλ μ 보 (μ΄μμ μ©) π λ‘κ·Έ λ 벨 π§Έ λ‘κ·Έ μ μ©νκΈ° expressjs λ₯Ό μ¬μ©ν λλ Wiston μ΄λ λͺ¨λ μ΄λ€ nestjs μλ μ΄λ―Έ build-in λ logger ν΄λμ€ μμ π main.ts import { NestFactory } from '@n..
=> λ°λΌνλ©΄μ λ°°μ°λ NestJS π§Έ μμ μ΄ μμ±ν κ²μλ¬Όμ μμ νκΈ° νμ¬λ, κ²μλ¬Όμ κ°μ Έμ¬ λ μ΄λ ν μ μ μΈμ§μ μκ΄μμ΄ λͺ¨λ κ²μλ¬Όμ κ°μ Έμ΄ κ²μλ¬Όμ κ°μ Έμ¬ λ ν΄λΉ μ μ κ° μμ±ν κ²μλ¬Όλ§ κ°μ Έμ€λλ‘ νλ€ π boards.controller.ts // λ€μ΄μ€λ μμ²μ μ²λ¦¬νκ³ ν΄λΌμ΄μΈνΈμ μλ΅μ λ°νν¨ // @Controller λ°μ½λ μ΄ν°λ‘ ν΄λμ€λ₯Ό λ°μ½λ μ΄μ νμ¬ μ μν¨ // Handler : @Get, @Post, @Delete λ±κ³Ό κ°μ λ°μ½λ μ΄ν°λ‘ μ₯μ λ 컨νΈλ‘€λ¬ ν΄λμ€ λ΄μ λ¨μν λ©μλ import { Body, Controller, Delete, Get, Param, ParseIntPipe, Patch, Post, UseGuards, UsePipes, ValidationPipe } f..
=> λ°λΌνλ©΄μ λ°°μ°λ NestJS π§Έ ν΄λΉ μ μ μ κ²μλ¬Όλ§ κ°μ Έμ€κΈ° (getAllBoards) νμ¬λ, κ²μλ¬Όμ κ°μ Έμ¬ λ μ΄λ ν μ μ μΈμ§μ μκ΄μμ΄ λͺ¨λ κ²μλ¬Όμ κ°μ Έμ΄ κ²μλ¬Όμ κ°μ Έμ¬ λ ν΄λΉ μ μ κ° μμ±ν κ²μλ¬Όλ§ κ°μ Έμ€λλ‘ νλ€ π boards.controller.ts // λ€μ΄μ€λ μμ²μ μ²λ¦¬νκ³ ν΄λΌμ΄μΈνΈμ μλ΅μ λ°νν¨ // @Controller λ°μ½λ μ΄ν°λ‘ ν΄λμ€λ₯Ό λ°μ½λ μ΄μ νμ¬ μ μν¨ // Handler : @Get, @Post, @Delete λ±κ³Ό κ°μ λ°μ½λ μ΄ν°λ‘ μ₯μ λ 컨νΈλ‘€λ¬ ν΄λμ€ λ΄μ λ¨μν λ©μλ import { Body, Controller, Delete, Get, Param, ParseIntPipe, Patch, Post, UseGuards, UsePipes, Vali..
=> λ°λΌνλ©΄μ λ°°μ°λ NestJS π§Έ μ μ μ κ²μλ¬Όμ κ΄κ³ νμ± ν΄μ£ΌκΈ° νμ¬ μ μ λ κ²μλ¬Όμ μμ±ν λ κ·Έ λμ κ΄κ³ μ€μ μ΄ μμ κ²μλ¬Ό μμ± μ, μ΄λ€ μ μ κ° μμ±νλμ§ μ 보 λ£μ΄μΌ ν¨ π μ μ μ κ²μλ¬Ό λ°μ΄ν°μ κ΄κ³ νμ± 1) κ΄κ³λ₯Ό νμ±νκΈ° μν΄μ μν°ν°μ μλ‘ κ°μ νλλ₯Ό λ£μ΄μΌ ν¨ 2) νλΌλ―Έν° - Type - InverseSide (board μμ μ μ λ‘ μ κ·Όνλ €λ©΄ board.user λ‘ μ κ·Όν΄μΌ ν¨) - Option (eager : true μΌ λ user μ 보λ₯Ό κ°μ Έμ¬ λ board λ κ°μ΄ κ°μ Έμ΄) user (OneToMany) => board (ManyToOne) π§Έ κ²μλ¬Ό μμ±ν λ μ μ μ 보 λ£μ΄μ£ΌκΈ° κ²μλ¬Ό μμ± μμ² -> ν€λ μμ μλ ν ν°μΌλ‘ μ μ μ 보-> μ μ μ 보μ κ²μλ¬Ό..
=> λ°λΌνλ©΄μ λ°°μ°λ NestJS π§Έ μΈμ¦λ μ μ λ§ κ²μλ¬Ό λ³΄κ³ μΈ μ μκ² νκΈ° π μ μ μκ² κ²μλ¬Ό μ κ·Ό κΆν μ£ΌκΈ° μΈμ¦μ κ΄ν λͺ¨λμ board λͺ¨λμ μΈ μ μμ΄μΌ νλ―λ‘, board module μμ μΈμ¦ λͺ¨λ imports ν π UseGuards (AuthGuard()) μ¬λμ΄ μμ²μ μ€ λ μ¬λ°λ₯Έ ν ν°μ κ°μ§κ³ μμ²μ μ£Όλμ§ λ³Έ νμ κ²μλ¬Όμ μ κ·Ό ν κΆν μ€ AuthGuard (μΈμ¦ λ―Έλ€μ¨μ΄) λ κ°κ°μ λΌμ°νΈ λ³λ‘ μ€ μ μκ³ , νλ²μ νλμ 컨νΈλ‘€λ¬ μμ λ€μ΄μλ λͺ¨λ λΌμ°ν° μ€ μ μμ π boards.controller.ts // λ€μ΄μ€λ μμ²μ μ²λ¦¬νκ³ ν΄λΌμ΄μΈνΈμ μλ΅μ λ°νν¨ // @Controller λ°μ½λ μ΄ν°λ‘ ν΄λμ€λ₯Ό λ°μ½λ μ΄μ νμ¬ μ μν¨ // Handler : @Get..
=> λ°λΌνλ©΄μ λ°°μ°λ NestJS 𧸠컀μ€ν λ°μ½λ μ΄ν° μμ±νκΈ° π get-decorator.ts import { ExecutionContext, createParamDecorator } from "@nestjs/common"; import { User } from "./user.entity"; // 컀μ€ν λ°μ½λ μ΄ν° μμ±ν¨ // req.user κ° μλ user νλΌλ§ν°λ‘ λ°λ‘ μ μ κ°μ²΄ κ°κ³ μ€κΈ° export const GetUser = createParamDecorator((data, ctx: ExecutionContext): User => { const req = ctx.switchToHttp().getRequest(); return req.user; }) π auth.controller.ts ..