First steps

First steps

์ด ๊ธฐ์‚ฌ์—์„œ๋Š” Nest์˜ ํ•ต์‹ฌ ๊ธฐ๋ณธ ์‚ฌํ•ญ์— ๋Œ€ํ•ด ์•Œ์•„ ๋ด…๋‹ˆ๋‹ค. Nest ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ•„์ˆ˜ ๊ตฌ์„ฑ ์š”์†Œ์— ์ต์ˆ™ํ•ด ์ง€๋„๋ก ์ž…๋ฌธ ๋ ˆ๋ฒจ์—์„œ ๋งŽ์€ ๊ธฐ์ดˆ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ ๊ธฐ๋ณธ CRUD ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.

Language

์šฐ๋ฆฌ๋Š” TypeScript๋ฅผ ์ข‹์•„ํ•˜์ง€๋งŒ ๋ฌด์—‡๋ณด๋‹ค๋„ Node.js๋ฅผ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— Nest๋Š” TypeScript ๋ฐ ์ˆœ์ˆ˜ JavaScript์™€ ๋ชจ๋‘ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค. Nest๋Š” ์ตœ์‹  ์–ธ์–ด ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๋ฏ€๋กœ ๋ฐ”๋‹๋ผ JavaScript์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ ค๋ฉด Babel ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋Œ€๋ถ€๋ถ„ ์šฐ๋ฆฌ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์˜ˆ์ œ์—์„œ TypeScript๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ํ•ญ์ƒ ์ฝ”๋“œ ์Šค๋‹ˆํŽซ์„ ๋ฐ”๋‹๋ผ JavaScript ๊ตฌ๋ฌธ์œผ๋กœ ์ „ํ™˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (๊ฐ ์Šค๋‹ˆํŽซ์˜ ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ ๋ชจ์„œ๋ฆฌ์—์žˆ๋Š” ์–ธ์–ด ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ ์ „ํ™˜).

Prerequisites

์šด์˜ ์ฒด์ œ์— Node.js (>= 8.9.0)๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

Setup

Nest CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. npm์„ ์„ค์น˜ํ•˜๋ฉด OS ํ„ฐ๋ฏธ๋„์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ Nest ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ npm i -g @nestjs/cli
$ nest new project-name

project ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , ๋…ธ๋“œ ๋ชจ๋“ˆ๊ณผ ๋ช‡ ๊ฐœ์˜ ๋‹ค๋ฅธ ์ƒ์šฉ๊ตฌ ํŒŒ์ผ์ด ์„ค์น˜๋˜๋ฉฐ, src/๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋˜์–ด ์—ฌ๋Ÿฌ ์ฝ”์–ด ํŒŒ์ผ๋กœ ์ฑ„์›Œ์ง‘๋‹ˆ๋‹ค.

srcapp.controller.tsapp.module.tsmain.ts

ํ•ต์‹ฌ ํŒŒ์ผ์— ๋Œ€ํ•œ ๊ฐ„๋žตํ•œ ๊ฐœ์š”๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

main.ts์—๋Š” ๋น„๋™๊ธฐ ํ•จ์ˆ˜๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

@@filename(main)

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000);
}
bootstrap();
@@switch
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000);
}
bootstrap();

Nest ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ํ•ต์‹ฌ NestFactory ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. NestFactory๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ์„ ํ—ˆ์šฉํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ์ •์  ๋ฉ”์†Œ๋“œ๋ฅผ ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค. create()๋ฉ”์†Œ๋“œ๋Š” INestApplication์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ถฉ์กฑ์‹œํ‚ค๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ์ฒด๋Š” ๋‹ค์Œ ์žฅ์—์„œ ์„ค๋ช…ํ•˜๋Š” ์ผ๋ จ์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์œ„์˜ main.ts ์˜ˆ์ œ์—์„œ HTTP ๋ฆฌ์Šค๋„ˆ๋ฅผ ์‹œ์ž‘ํ•˜๋ฉด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์ธ๋ฐ”์šด๋“œ HTTP ์š”์ฒญ์„ ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Nest CLI๋กœ ์Šค์บ ํด๋”ฉ๋œ ํ”„๋กœ์ ํŠธ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐ ๋ชจ๋“ˆ์„ ์ „์šฉ ๋””๋ ‰ํ† ๋ฆฌ์— ๋ณด๊ด€ํ•˜๋Š” ๊ทœ์น™์„ ๋”ฐ๋ฅด๋„๋ก ๊ถŒ์žฅํ•˜๋Š” ์ดˆ๊ธฐ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

Platform

Nest๋Š” ํ”Œ๋žซํผ์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๋Š” ํ”„๋ ˆ์ž„ ์›Œํฌ๊ฐ€๋˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœํ•ฉ๋‹ˆ๋‹ค. ํ”Œ๋žซํผ ๋…๋ฆฝ์„ฑ์„ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ์—ฌ๋Ÿฌ ์œ ํ˜•์˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋…ผ๋ฆฌ์  ๋ถ€๋ถ„์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์ˆ ์ ์œผ๋กœ Nest๋Š” ์–ด๋Œ‘ํ„ฐ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ๋ชจ๋“  Node HTTP ํ”„๋ ˆ์ž„ ์›Œํฌ์™€ ์ž‘๋™ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›๋˜๋Š” ๋‘ ๊ฐ€์ง€ HTTP ํ”Œ๋žซํผ์ด ์žˆ์Šต๋‹ˆ๋‹ค : express ๋ฐ fastify. ํ•„์š”์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ๊ฒƒ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ํ”Œ๋žซํผ์„ ์‚ฌ์šฉํ•˜๋“  ์ž์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋“ค์€ ๊ฐ๊ฐ NestExpressApplication ๋ฐ NestFastifyApplication์œผ๋กœ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

์•„๋ž˜ ์˜ˆ์ œ์™€ ๊ฐ™์ด ํƒ€์ž…์„ NestFactory.create()๋ฉ”์†Œ๋“œ์— ์ „๋‹ฌํ•˜๋ฉด app ๊ฐ์ฒด๋Š” ํŠน์ • ํ”Œ๋žซํผ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ธฐ๋ณธ ํ”Œ๋žซํผ API์— ์‹ค์ œ๋กœ ์•ก์„ธ์Šคํ•˜์ง€ ์•Š๋Š” ํ•œ ์œ ํ˜•์„ ์ง€์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

const app = await NestFactory.create<NestExpressApplication>(AppModule);

Running the application

์„ค์น˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด OS ๋ช…๋ น ํ”„๋กฌํ”„ํŠธ์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ์ธ๋ฐ”์šด๋“œ HTTP ์š”์ฒญ์„ ์ˆ˜์‹ ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ npm run start

์ด ๋ช…๋ น์€ HTTP ์„œ๋ฒ„๊ฐ€ src/main.ts ํŒŒ์ผ์— ์ •์˜๋œ ํฌํŠธ์—์„œ ์ˆ˜์‹  ๋Œ€๊ธฐํ•˜๋ฉด์„œ ์•ฑ์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์—ด๊ณ  http://localhost:3000/์œผ๋กœ ์ด๋™ํ•˜์‹ญ์‹œ์˜ค. Hello world! ๋ฉ”์‹œ์ง€๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

Last updated