Framework/NestJS

[NestJS] NestJS ํ”„๋กœ์ ํŠธ ์ฒซ ์‹œ์ž‘

  • -
๐Ÿ“š Nest.js ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๊ณ , ํŒจํ‚ค์ง€์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

 

๐Ÿ“ฃ ์ฐธ๊ณ  ์‚ฌํ•ญ

 

1๏ธโƒฃ node์™€ npm์ด ์„ค์น˜๋˜์–ด์žˆ๋Š” ๊ฒƒ์„ ๊ฐ€์ •ํ•˜๊ณ  ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

2๏ธโƒฃ node ๋ฒ„์ „์€ 21.5.0, npm์€ 10.2.4๋ฒ„์ „ ์ž…๋‹ˆ๋‹ค


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

ํ„ฐ๋ฏธ๋„์—์„œ ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ด nest-cli๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

@nest/cli๋Š” NestJS์—์„œ ์ œ๊ณตํ•˜๋Š” Command Line Interface์ด๋ฏ€๋กœ -g ์˜ต์…˜์œผ๋กœ ์„ค์น˜ํ•˜์—ฌ ์ „์—ญ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

npm install -g @nest/cli

 

์ƒˆ๋กœ์šด NestJS ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“œ๋Š” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค.

. ์€ ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์— ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

nest new .

 

๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ๋ฅผ ์ž…๋ ฅํ•ด์„œ ๋งŒ๋“ค์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

nest new ๋””๋ ‰ํ† ๋ฆฌ๊ฒฝ๋กœ



๊ทธ๋Ÿผ ์–ด๋–ค ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋ฅผ ์‚ฌ์šฉํ•˜๊ฒ ๋ƒ๊ณ  ๋ฌผ์Œ์ด ๋‚˜์˜ค๋Š”๋ฐ ์ €๋Š” npm์œผ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.

npm, yarn, pnpm ๋ชจ๋‘ ์ƒ๊ด€ ์—†์Šต๋‹ˆ๋‹ค.

 

์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ด ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์šด ๋ฐ›์Šต๋‹ˆ๋‹ค.

npm install


์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๊ณ  localhost:3000์— ์ ‘์†ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ํ™”๋ฉด์ด ๋‚˜์˜ต๋‹ˆ๋‹ค.

npm run start

NestJS ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ตฌ์กฐ

  • node_modules: ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” npm ํŒจํ‚ค์ง€๋“ค์ด ์„ค์น˜๋˜๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์ด ๋””๋ ‰ํ„ฐ๋ฆฌ๋Š” ์ง์ ‘ ์†๋Œ€์ง€ ์•Š์œผ๋ฉฐ, npm์ด๋‚˜ yarn๊ณผ ๊ฐ™์€ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋ฅผ ํ†ตํ•ด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  • src: ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ์ €์žฅ๋˜๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ ๋ฐ ๋ชจ๋“ˆ, ์ปจํŠธ๋กค๋Ÿฌ, ์„œ๋น„์Šค ๋“ฑ์ด ์—ฌ๊ธฐ์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค.
    • src/main.ts: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ง„์ž…์ (entry point)์ž…๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์—์„œ NestJS ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ƒ์„ฑํ•˜๊ณ  ์‹œ์ž‘ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • src/app.module.ts: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ฃผ ๋ชจ๋“ˆ์ž…๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋ณธ ์„ค์ • ๋ฐ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ๋“ค์ด ์—ฌ๊ธฐ์— ์ •์˜๋ฉ๋‹ˆ๋‹ค.
  • test: ํ…Œ์ŠคํŠธ ํŒŒ์ผ๋“ค์ด ์ €์žฅ๋˜๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ์ž…๋‹ˆ๋‹ค. NestJS๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Jest๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • tsconfig.json: TypeScript ์ปดํŒŒ์ผ๋Ÿฌ ์„ค์ • ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. TypeScript ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๊ณ  ํ”„๋กœ์ ํŠธ๋ฅผ ์–ด๋–ป๊ฒŒ ์ปดํŒŒ์ผํ• ์ง€์— ๋Œ€ํ•œ ์„ค์ •์ด ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • package.json ๋ฐ package-lock.json ๋˜๋Š” yarn.lock: ํ”„๋กœ์ ํŠธ์˜ ์˜์กด์„ฑ ๋ฐ ์Šคํฌ๋ฆฝํŠธ ๋“ฑ์ด ์ •์˜๋œ ํŒŒ์ผ๋“ค์ž…๋‹ˆ๋‹ค.
  • nest-cli.json: NestJS CLI ์„ค์ • ํŒŒ์ผ๋กœ, ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ CLI ๋™์ž‘์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

 

 


์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ๋Š” ํŒจํ‚ค์ง€๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ์„ค์น˜ํ•˜๊ณ , ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์„œ NestJS ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค!

๊ณต๋ถ€ํ•˜์‹ค ๋ถ„๋“ค๋งŒ ์ฝ์–ด์ฃผ์„ธ์š” ๐Ÿ™

 

 

 

NestJS ์„ค์น˜ํ•˜๊ธฐ

ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ์•„๋ž˜ ๋ช…๋ น์„ ์ž…๋ ฅํ•˜์—ฌ ์˜์กด์„ฑ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

cd ํ”„๋กœ์ ํŠธ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฒฝ๋กœ
npm install @nestjs/core @nestjs/common @nestjs/platform-express reflect-metadata typescript

 

NestJS ํ™˜๊ฒฝ์„ ์ „์—ญ์œผ๋กœ ์„ค์น˜ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. @nestjs/cli ๋Š” NestJS ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ œ๊ณตํ•˜๋Š” Command Line Interface์ž…๋‹ˆ๋‹ค. 

 

๋˜ ์ด์–ด์„œ ์„ค์น˜ํ•˜๋Š” ํŒจํ‚ค์ง€์— ๋Œ€ํ•ด์„œ ๊ฐ„๋žตํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

  • @nestjs/core: NestJS ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ์™€ ๋Ÿฐํƒ€์ž„์„ ์ œ๊ณต
  • @nestjs/common: NestJS์—์„œ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ฐ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ์ œ๊ณต
  • @nestjs/platform-express: NestJS ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ต์Šคํ”„๋ ˆ์Šค์˜ req, res ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  • reflect-metadata: TypeScript์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  • typescript: TypeScript ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ NestJS ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ํŒจํ‚ค์ง€

 

package.json ์— ์•„๋ž˜์ฒ˜๋Ÿผ ์˜์กด์„ฑ์ด ์ถ”๊ฐ€๋œ ๊ฒƒ์„ ํ™•์ธํ•ด์ฃผ์„ธ์š”

{
  "dependencies": {
    "@nestjs/common": "^10.3.0",
    "@nestjs/core": "^10.3.0",
    "@nestjs/platform-express": "^10.3.0",
    "reflect-metadata": "^0.1.14",
    "typescript": "^5.3.3"
  }
}



 

 

 

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์„ค์ •ํ•˜๊ธฐ

NestJS๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ•์„ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ NestJS๋ฅผ ๋”์šฑ ํŽธ๋ฆฌํ•˜๊ฒŒ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ํƒ€์ž…์„ ์ถ”๊ฐ€ํ•œ ์–ธ์–ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋˜๊ณ , ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ํŠธ๋žœ์ŠคํŒŒ์ผ๋˜์–ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋–„๋ฌธ์— ์–ด๋–ค์‹์œผ๋กœ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ์ปดํŒŒ์ผ ํ•  ์ง€ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— tsconfig.json ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋„๋ก ํ•ฉ์‹œ๋‹ค.

{
  "compilerOptions": {
    "module": "CommonJS",
    "target": "ESNext",
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true
  }
}

 

์œ„ ์ฝ”๋“œ์— ๋Œ€ํ•ด ๊ฐ„๋žตํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

  • module: "CommonJS": ์ด ์˜ต์…˜์€ TypeScript๊ฐ€ ๋ชจ๋“ˆ์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ์ง€๋ฅผ ์ง€์ •
  • target: "ESNext": TypeScript๊ฐ€ ์ƒ์„ฑํ•˜๋Š” JavaScript ์ฝ”๋“œ๊ฐ€ ์–ด๋–ค ๋ฒ„์ „์„ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋ƒ„
  • experimentalDecorators: true: ์ด ์˜ต์…˜์€ TypeScript๊ฐ€ ์‹คํ—˜์ ์ธ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ. ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋Š” ํด๋ž˜์Šค ๋ฐ ํด๋ž˜์Šค ๋ฉค๋ฒ„์— ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋จ. NestJS์™€ ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ž์ฃผ ์‚ฌ์šฉ.
  • emitDecoratorMetadata: true: ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋ƒ„. ์ด ์˜ต์…˜์„ true๋กœ ์„ค์ •ํ•˜๋ฉด, ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ์— ๋Œ€ํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ๋Ÿฐํƒ€์ž„์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ. NestJS์™€ ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ๋Š” ์ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด ์˜์กด์„ฑ ์ฃผ์ž…๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„.

 

 

 

NestJS ๋ชจ๋“ˆ๊ณผ ์ปจํŠธ๋กค๋Ÿฌ ๋งŒ๋“ค๊ธฐ

๋ฃจํŠธ ํด๋”์— src ํด๋”๋ฅผ ๋งŒ๋“ค๊ณ  src ์•ˆ์— app.controller.ts ํŒŒ์ผ์„ ๋งŒ๋“ค๊ฒ ์Šต๋‹ˆ๋‹ค.

import { Controller, Get } from "@nestjs/common";

@Controller()
export class HelloController {
    @Get()
    hello() {
        return "Hello NestJS"
    }
}

 

import { Controller, Get } from "@nestjs/common";

  • @nestjs/common ํŒจํ‚ค์ง€์—์„œ Controller์™€ Get๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • Controller ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋Š” ํด๋ž˜์Šค๋ฅผ NestJS ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค.
  • Get ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋Š” ํ•ด๋‹น ๋ฉ”์„œ๋“œ๊ฐ€ HTTP GET ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•ธ๋“ค๋Ÿฌ๋ผ๋Š” ๊ฒƒ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

@Controller()

  • ํด๋ž˜์Šค HelloController์— ์ปจํŠธ๋กค๋Ÿฌ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

@Get()

  • hello ๋ฉ”์„œ๋“œ๊ฐ€ HTTP GET ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•ธ๋“ค๋Ÿฌ์ž„์„ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค.
    • hello ๋ฉ”์„œ๋“œ๋Š” ๋ฌธ์ž์—ด "Hello NestJS"๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

src ํด๋” ์•ˆ์— app.module.tsํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

import { Module } from "@nestjs/common";
import { HelloController } from "./app.controller";

@Module({
    controllers: [HelloController],
})

export class HelloModule {}


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

  • @nestjs/common ํŒจํ‚ค์ง€์—์„œ Module ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • Module ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋Š” NestJS ๋ชจ๋“ˆ์„ ์ •์˜ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

import { HelloController } from "./app.controller";

  • ํ˜„์žฌ ๋ชจ๋“ˆ์—์„œ ์‚ฌ์šฉํ•  ์ปจํŠธ๋กค๋Ÿฌ์ธ HelloController๋ฅผ app.controller.ts ํŒŒ์ผ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • ์ปจํŠธ๋กค๋Ÿฌ๋Š” ํ•ด๋‹น ๋ชจ๋“ˆ์—์„œ ๋ผ์šฐํŒ…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

@Module({ controllers: [HelloController] })

  • @Module ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ NestJS ๋ชจ๋“ˆ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด ์•ˆ์— controllers ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ˜„์žฌ ๋ชจ๋“ˆ์—์„œ ์‚ฌ์šฉํ•  ์ปจํŠธ๋กค๋Ÿฌ๋“ค์„ ๋ฐฐ์—ด๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” HelloController๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

export class HelloModule {}

  • HelloModule ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ•˜๊ณ  ์™ธ๋ถ€์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค.
  • ์ด ํด๋ž˜์Šค๋Š” NestJS ๋ชจ๋“ˆ์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ํ•ด๋‹น ๋ชจ๋“ˆ์€ HelloController๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

NestJS ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ํ•˜๊ธฐ

src ํด๋”์— main.ts ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

import { NestFactory } from "@nestjs/core";
import { HelloModule } from "./app.module";

const PORT = 3000;

// NestJS๋ฅผ ์‹œ์ž‘์‹œํ‚ค๋Š” ํ•จ์ˆ˜
async function bootstrap() {
    const app = await NestFactory.create(HelloModule);
    await app.listen(PORT, () => { console.log(`์„œ๋ฒ„๊ฐ€ ${PORT}์—์„œ ์‹คํ–‰ ์ค‘`)})
}

bootstrap()



import { NestFactory } from "@nestjs/core"

  • NestJS์˜ ํ•ต์‹ฌ ํŒจํ‚ค์ง€์ธ @nestjs/core์—์„œ NestFactory๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • NestFactory๋Š” NestJS ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํŒฉํ† ๋ฆฌ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.


import { HelloModule } from "./app.module"

  • ํ˜„์žฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉํ•  ๋ชจ๋“ˆ์ธ HelloModule์„ app.module.ts ํŒŒ์ผ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • ์ด ๋ชจ๋“ˆ์€ ์•ž์„œ ์„ค๋ช…ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ NestJS ๋ชจ๋“ˆ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

async function bootstrap() { ... }

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹œ์ž‘ํ•˜๋Š” bootstrap ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” NestJS ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ƒ์„ฑํ•˜๊ณ  ํฌํŠธ์— ๋ฐ”์ธ๋”ฉํ•˜์—ฌ ์„œ๋ฒ„๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

const app = await NestFactory.create(HelloModule);

  • NestFactory.create ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ HelloModule์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” NestJS ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ์ƒ์„ฑ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ app ๋ณ€์ˆ˜์— ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.

await app.listen(PORT, () => { console.log(์„œ๋ฒ„๊ฐ€ ${PORT}์—์„œ ์‹คํ–‰ ์ค‘)})

  • app.listen ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ง€์ •๋œ ํฌํŠธ(PORT)์—์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ์„œ๋ฒ„๊ฐ€ ์‹œ์ž‘๋˜๋ฉด ์ฝœ๋ฐฑ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๊ณ , ์ฝ˜์†”์— ์„œ๋ฒ„๊ฐ€ ์–ด๋Š ํฌํŠธ์—์„œ ์‹คํ–‰ ์ค‘์ธ์ง€์— ๋Œ€ํ•œ ๋ฉ”์‹œ์ง€๊ฐ€ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

bootstrap()

  • bootstrap ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” ๋น„๋™๊ธฐ๋กœ ๋™์ž‘ํ•˜๋ฏ€๋กœ await ํ‚ค์›Œ๋“œ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

์ด์ œ ํ„ฐ๋ฏธ๋„์—์„œ ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๋„ค์ŠคํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

npx ts-node-dev src/main.ts

 

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋กœ ๋งŒ๋“  ํ”„๋กœ๊ทธ๋žจ์„ ๋ฐ”๋กœ ์‹คํ–‰ํ•˜๋ ค๋ฉด ts-node-dev ๋ผ๋Š” ํŒจํ‚ค์ง€๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ  ์‹คํ–‰ํ•˜๋ ค๋ฉด ์„ค์น˜ํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ๋ฌผ์–ด๋ณด๋Š”๋ฐ, ์ด๋•Œ y๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

 

 

localhost:3000์— ์ ‘์†ํ–ˆ์„ ๋•Œ Hello NestJS๊ฐ€ ๋ณด์ด๋ฉด ์„ฑ๊ณต์ž…๋‹ˆ๋‹ค!


๋‹ค์Œ ๊ธ€์—์„œ๋Š” NestJS์˜ ์š”์ฒญ ์ฒ˜๋ฆฌ ์ˆœ์„œ์™€ API ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์†Œ๊ฐœํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.