NestJS -1

sein leeยท2024๋…„ 4์›” 11์ผ
0

nestJS-study

๋ชฉ๋ก ๋ณด๊ธฐ
1/4
post-thumbnail
post-custom-banner

NestJS ๋ž€?

NestJS๋Š” ํšจ์œจ์ ์ด๊ณ  ํ™•์žฅ๊ฐ€๋Šฅํ•œ Node.js ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค.

๋‚ด๋ถ€์ ์œผ๋กœ Nest๋Š” Express (๊ธฐ๋ณธ๊ฐ’)์™€ ๊ฐ™์€ ๊ฐ•๋ ฅํ•œ HTTP ์„œ๋ฒ„ ํ”„๋ ˆ์ž„ ์›Œํฌ๋ฅผ
์‚ฌ์šฉํ•˜๋ฉฐ ์„ ํƒ์ ์œผ๋กœ Fastify๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๊ตฌ์„ฑ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

Nest JS CLI ์„ค์น˜


๊ฒŒ์‹œ๋ฌผ CRUD ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์†Œ๊ฐœ


์ด๋Ÿฌํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ œ์ž‘ํ•  ์˜ˆ์ •์ด๋‹ค.

  • ๊ฒŒ์‹œ๊ธ€์— ๊ด€ํ•œ ๋ชจ๋“ˆ(BoardModule)
  • ๊ฒŒ์‹œ๊ธ€์„ ๋งŒ๋“œ๋Š” ์‚ฌ๋žŒ์— ๋Œ€ํ•œ ์ธ์ฆ ๋ชจ๋“ˆ(AuthModule)

ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ํ•˜๊ธฐ

ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

  1. ์›ํ•˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด์— ํ”„๋กœ์ ํŠธ ํด๋” ์ƒ์„ฑ
mkdir nestjs-board-app
  1. ํ”„๋กœ์ ํŠธ ํด๋”๋กœ ์ด๋™ ํ›„
nest new ./  ์ž…๋ ฅ
npm ์„ ํƒ
  1. vscode ๋กœ ํ”„๋กœ์ ํŠธ ํด๋” ์—ด๊ธฐ

NestJS ๊ธฐ๋ณธ ๊ตฌ์กฐ ์„ค๋ช…

  • eslintrc.js
    • ๊ทœ์น™์„ ๊ฐ€์ง€๊ณ  ์ฝ”๋“œ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์งค์ˆ˜์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
    • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๊ฐ€์ด๋“œ๋ผ์ธ ์ œ์‹œ, ๋ฌธ๋ฒ•์— ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋ฉด ์•Œ๋ ค์ฃผ๋Š” ์—ญํ• 
  • .prettierrc
    • ์ฝ”๋“œ์˜ ํ˜•์‹์„ ๋งž์ถฐ์ค€๋‹ค.
    • ์ž‘์€๋”ฐ์˜ดํ‘œ(')๋ฅผ ์‚ฌ์šฉํ• ์ง€ ํฐ ๋”ฐ์˜ดํ‘œ(")๋ฅผ ์‚ฌ์šฉํ• ์ง€,Indent ๊ฐ’์„ 2๋กœ ์ค„์ง€ 4๋กœ ์ค„์ง€ ๋“ฑ๋“ฑ
    • ์—๋Ÿฌ๋ฅผ ์ฐพ๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ฝ”๋“œ ํฌ๋ฉงํ„ฐ ์—ญํ• (eslintrc.js์™€ ์ฐจ์ด์ )
  • nest-cli.json
    • nest ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•ด ํŠน์ •ํ•œ ์„ค์ •์„ ํ•  ์ˆ˜ ์žˆ๋Š” json ํŒŒ์ผ
  • tsconfig.json
  • tsconfig.build.json
  • package.json
    • ํ”„๋กœ์ ํŠธ ์ด๋ฆ„, ์ž‘์„ฑ์ž ๋“ฑ๋“ฑ
    • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ชฉ๋ก, ๋ช…๋ น์–ด ๋ชฉ๋ก ๋“ฑ๋“ฑ
  • src
    • ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•œ ๋กœ์ง๋“ค์ด ๋“ค์–ด๊ฐ€์žˆ์Œ
    • main.ts : ์•ฑ์„ ์ƒ์„ฑํ•˜๊ณ  ์‹คํ–‰, ์‹œ์ž‘์ ..
    • app.module.ts : ์•ฑ ๋ชจ๋“ˆ์„ ์ •์˜

์‹คํ–‰ํ•ด๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด ํ„ฐ๋ฏธ๋„์—

npm run start:dev
#start:dev ๋Š” package.json์— ๋‚˜์˜ด

<๊ฒฐ๊ณผ>
main.ts ์˜
await app.listen(3000); => 3000๋ฒˆ ํฌํŠธ์ด๊ธฐ ๋•Œ๋ฌธ์—

๊ธฐ๋ณธ ๊ตฌ์กฐ์—์„œ ์‚ดํŽด๋ณด๋Š” NestJS ๋กœ์ง ํ๋ฆ„

Hello World ํ…์ŠคํŠธ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” API

main.ts์˜

 const app = await NestFactory.create(AppModule);

AppModule์— ๊ฐ€๋ฉด

AppController, AppService ๊ฐ€ ๋“ฑ๋ก์ด ๋˜์–ด์žˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ(๋ธŒ๋ผ์šฐ์ €)์—์„œ ์„œ๋ฒ„(nestjs-app)๋กœ ์š”์ฒญ์„ ์ฃผ๋ฉด app.controller ๋กœ ์˜จ๋‹ค.

Get ๋ฉ”์„œ๋“œ๋กœ ์‹คํ–‰, app.service ๋ฅผ return

getHello ์‹คํ–‰ํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €๋กœ return

NestJS ๋ชจ๋“ˆ์ด๋ž€?

NestJS๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋งŒ๋“œ๋Š” ์•ฑ ๊ตฌ์กฐ

App Module์•ˆ์— BoardModule๊ณผ AuthModule์ด ์žˆ์œผ๋ฉด ๊ฐ ๋ชจ๋“ˆ์•ˆ์— Controller Entity Service๋“ฑ์ด ์žˆ๋‹ค.

NestJS?

๋ชจ๋“ˆ์€ @Module () ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋กœ ์ฃผ์„์ด ๋‹ฌ๋ฆฐ ํด๋ž˜์Šค๋‹ค. @Module () ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋Š” Nest๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์กฐ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
๊ฐ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ชจ๋“ˆ (๋ฃจํŠธ ๋ชจ๋“ˆ) ์ด ์žˆ๋‹ค. ๋ฃจํŠธ ๋ชจ๋“ˆ์€ Nest๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์‹œ์ž‘์ ์ด๋‹ค.
๋ชจ๋“ˆ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹ฑ๊ธ€ ํ†ค์ด๋ฏ€๋กœ ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ๊ฐ„์— ์‰ฝ๊ฒŒ ๊ณต๊ธ‰์ž์˜ ๋™์ผํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ณต์œ  ํ•  ์ˆ˜ ์žˆ๋‹ค. => ์–ด๋– ํ•œ ๋ชจ๋“ˆ ํ•˜๋‚˜๋ฅผ ๋งŒ๋“ค๋ฉด ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ์—์„œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ๋‹ค.(๋ฐ‘ ์ด๋ฏธ์ง€)

Board Module ์ƒ์„ฑํ•˜๊ธฐ

์šฐ์„  src ์— app.service, appcontroller, app.spec ํŒŒ์ผ ์‚ญ์ œ, app.moule์˜ ๋‚ด์šฉ ์ˆ˜์ •,
test ํด๋” ์‚ญ์ œ

<app.module.ts>

import { Module } from '@nestjs/common';

@Module({
  imports: [],

})
export class AppModule {}

๋ชจ๋“ˆ ์ƒ์„ฑํ•˜๊ธฐ

nest g module boards

nest: using nestcli
g: generate
module: schematic that i want to create
boards: name of the schematic

์œ„ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋‹ˆ nest.ps1 ํŒŒ์ผ์„ ๋กœ๋“œํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ด์„œ
Window PowerShell์„ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์œผ๋กœ ์—ฐ ํ›„

get-ExecutionPolicy
=> Restricted ํ™•์ธ
Set-ExecutionPolicy Unrestricted
Y ์ž…๋ ฅ
get-ExecutionPolicy
=> Unrestricted ํ™•์ธ

์œ„์˜ ๊ณผ์ •์„ ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋‹ˆ ์ •์ƒ์ ์œผ๋กœ ๋˜์—ˆ๋‹ค.
boards ํด๋” ์ƒ์„ฑํ™•์ธ !

BoardsModule import ํ™•์ธ !
<app.module.ts>

import { Module } from '@nestjs/common';
import { BoardsModule } from './boards/boards.module';
@Module({
  imports: [BoardsModule],
})
export class AppModule {}

NestJS Controllers ์ด๋ž€?

Controller๋ž€?

์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์— ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

@Controller ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋กœ ํด๋ž˜์Šค๋ฅผ ๋ฐ์ฝ”๋ ˆ์ด์…˜ํ•˜์—ฌ ์ •์˜๋œ๋‹ค.

Handler ๋ž€ ?

ํ•ธ๋“ค๋Ÿฌ๋Š” @Get, @Post, @Delete ๋“ฑ๊ณผ ๊ฐ™์€ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋กœ ์žฅ์‹๋œ ์ปจํŠธ๋กค๋Ÿฌ ํด๋ž˜์Šค ๋‚ด์˜ ๋‹จ์ˆœํ•œ ๋ฉ”์„œ๋“œ์ด๋‹ค.

Boards Controller ์ƒ์„ฑํ•˜๊ธฐ

nest g controller boards --no-spec
=> boards.controller.ts ์ƒ์„ฑ

nest: using nestcli
g: generate
controller: controller schematic
boards: name of the schematic
--no-spec: ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์†Œ์Šค ์ฝ”๋“œ ์ƒ์„ฑ x

CLI๋กœ ๋ช…๋ น์–ด ์ž…๋ ฅ ์‹œ Controller ๋งŒ๋“œ๋Š” ์ˆœ์„œ

NestJS Providers, Service ๋ž€?

Provides ๋ž€?

ํ”„๋กœ๋ฐ”์ด๋”๋Š” Nest์˜ ๊ธฐ๋ณธ ๊ฐœ๋…์ด๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ๋ณธ Nest ํด๋ž˜์Šค๋Š” ์„œ๋น„์Šค, ๋ฆฌํฌ์ง€ํ† ๋ฆฌ, ํŒฉํ† ๋ฆฌ, ํ—ฌํผ๋“ฑ ํ”„๋กœ๋ฐ”์ด๋”๋กœ ์ทจ๊ธ‰๋  ์ˆ˜ ์žˆ๋‹ค. ํ”„๋กœ๋ฐ”์ด๋”์˜ ์ฃผ์š” ์•„์ด๋””์–ด๋Š” ์ข…์†์„ฑ์œผ๋กœ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰, ๊ฐ์ฒด๋Š” ์„œ๋กœ ๋‹ค์–‘ํ•œ ๊ด€๊ณ„๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค๋ฅผ "์—ฐ๊ฒฐ"ํ•˜๋Š” ๊ธฐ๋Šฅ์€ ๋Œ€๋ถ€๋ถ„ Nest ๋Ÿฐํƒ€์ž„ ์‹œ์Šคํ…œ์— ์œ„์ž„๋  ์ˆ˜ ์žˆ๋‹ค.
=> Controller ์—์„œ ํ•„์š”ํ•˜๋Š” ๋งŽ์€ ๊ฒƒ๋“ค์„ Controller ๋‚ด์—์„œ ๋‹ค ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๊ธฐ๋Šฅ๋ณ„๋กœ ์„œ๋น„์Šค, ๋ฆฌํฌ์ง€ํ† ๋ฆฌ, ํŒฉํ† ๋ฆฌ, ํ—ฌํผ ๋“ฑ์„ ๋„ฃ์–ด์„œ ์‚ฌ์šฉํ•œ๋‹ค .
=> ์ข…์†์„ฑ์„ ์ฃผ์ž…ํ•œ๋‹ค.

Service ๋ž€?

@Injectable ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋กœ ๊ฐ์‹ธ์ ธ์„œ ๋ชจ๋“ˆ์— ์ œ๊ณต๋˜๋ฉฐ, ์ด ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์—์„œ ์‚ฌ์šฉ ๋  ์ˆ˜ ์žˆ๋‹ค.
์„œ๋น„์Šค๋Š” ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋ฐ์ดํ„ฐ์˜ ์œ ํšจ์„ฑ ์ฒดํฌ๋ฅผ ํ•˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์•„์ดํ…œ์„ ์ƒ์„ฑํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์„ ํ•˜๋Š” ๋ถ€๋ถ„์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

Service๋ฅผ Controller์—์„œ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•( Dependency Injection)


์œ„์— ๋ณด๋ฉด Contoller์—์„œ this.appService.getHello(); ์ด๋Ÿฐ์‹์œผ๋กœ Service์— ์ •์˜ํ•ด๋†“์€ ๋ฉ”์†Œ๋“œ๋ฅผ Controller์—์„œ ๊ฐ€์ ธ์™€์„œ ์“ฐ๋Š” ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์œ„์— ๋ณด๋ฉด BoardsService๋ฅผ Constructor ํด๋ž˜์Šค์—์„œ ๊ฐ€์ ธ์˜ค๊ณ (Injected) ์žˆ๋‹ค. ๊ทธ๋Ÿฐ ํ›„์— Private ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•ด์„œ boardsService๋ฅผ ์ •์˜ํ•ด์„œ Controller์•ˆ์—์„œ ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.
=> ์ด๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋Š” ์ด์œ ๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์˜ ๊ธฐ๋Šฅ์„ ์ด์šฉํ•ด์„œ ์ข…์†์„ฑ์„ ํƒ€์ž…์œผ๋กœ ํ•ด๊ฒฐํ• ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

Provider ๋“ฑ๋กํ•˜๊ธฐ

Provider๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด๊ฒƒ์„ Nest์— ๋“ฑ๋กํ•ด์ค˜์•ผ์ง€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
๋“ฑ๋กํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” module ํŒŒ์ผ์—์„œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ค. module ํŒŒ์ผ์— providersํ•ญ๋ชฉ์•ˆ์— ํ•ด๋‹น ๋ชจ๋“ˆ์—์„œ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” Provider ๋ฅผ ๋„ฃ์–ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

Boards Service ๋งŒ๋“ค๊ธฐ

nest g service boards --no-spec
=>boards.service.ts ์ƒ์„ฑ

Board Service

boards.service.ts ํŒŒ์ผ ์•ˆ์—๋Š” Injectable ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๊ฐ€ ์žˆ์œผ๋ฉฐ ์ด NestJS๋Š” ์ด๊ฒƒ์„ ์ด์šฉํ•ด์„œ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ด ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉ ํ•  ์ˆ˜์žˆ๊ฒŒ(Injectable)๋งŒ๋“ค์–ด์ค€๋‹ค.
๊ทธ๋ฆฌ๊ณ  CLI๋กœ Service ์ƒ์„ฑ์‹œ์—๋Š” module์—๋„ ์ž๋™์œผ๋กœ Service๊ฐ€ ์ถ”๊ฐ€๋œ๋‹ค.

 providers: [BoardsService]

Board Service๋ฅผ Board Controller์—์„œ ์ด์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๊ธฐ(Dependency Injection)(์ข…์†์„ฑ ์ฃผ์ž…)


Controller class์˜ constructor ์•ˆ์—์„œ ์ข…์†์„ฑ ์ฃผ์ž…์ด ์ด๋ฃจ์–ด์ง„๋‹ค.

์›๋ž˜๋Š”..


Typescriptdml ๊ธฐ๋Šฅ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.
(์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” private๊ฐ™์€ ์ ‘๊ทผ ์ œํ•œ์ž(Access modifier)๋ฅผ ์‚ฌ์šฉํ• ์ˆ˜ ์—†์ง€๋งŒ Typescript์—์„œ๋Š” ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.)

1. boardsService ํŒŒ๋ผ๋ฏธํ„ฐ์— BoardsService ๊ฐ์ฒด๋ฅผ ํƒ€์ž…์œผ๋กœ ์ง€์ •
2. ์ด boardsService ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ BoardsController ํด๋ž˜์Šค ์•ˆ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ this.boardsService ํ”„๋กœํผํ‹ฐ์— boardsService ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ• ๋‹น
3. ํ•˜์ง€๋งŒ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ์„ ์–ธํ•œ ๊ฐ’๋งŒ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋กœ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—
์œ„์— boardsService: BoardsService๋กœ ์„ ์–ธ
4. ์ด๋ ‡๊ฒŒ ๊ฐ–๊ฒŒ๋œ boardsService ํ”„๋กœํผํ‹ฐ๋ฅผ ์ด์šฉํ•ด์„œ BoardsController ํด๋ž˜์Šค์•ˆ์—์„œ ํ™œ์šฉ์„ ํ• ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

์ ‘๊ทผ ์ œํ•œ์ž๋ฅผ ์ด์šฉํ•ด์„œ ์†Œ์Šค ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•˜๊ธฐ

์ ‘๊ทผ ์ œํ•œ์ž(public, protected, private) ์„ ์ƒ์„ฑ์ž(constructor) ํŒŒ๋ผ๋ฏธํ„ฐ์— ์„ ์–ธ
=>์ ‘๊ทผ ์ œํ•œ์ž๊ฐ€ ์‚ฌ์šฉ๋œ ์ƒ์„ฑ์ž ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์•”๋ฌต์ ์œผ๋กœ ํด๋ž˜์Šค ํ”„๋กœํผํ‹ฐ๋กœ ์„ ์–ธ

Private์„ ์‚ฌ์šฉํ•˜๋ฉด ?

private์ด ์„ ์–ธ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— boardsService ํ”„๋กœํผํ‹ฐ๋Š” BoardsController ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

profile
๊ฐœ๋ฐœ๊ฐ์ž
post-custom-banner

0๊ฐœ์˜ ๋Œ“๊ธ€