๊ธฐ๋ณธ์ ์ผ๋ก NestJS๋ NodeJS ์์์ ์์ง์ด๋ ํ๋ ์์ํฌ์ด๋ค. Express๋ฅผ ์ด์ฉํ๋ฏ๋ก, Express ์์์ ์์ง์ด๋ ๊ฒ์ด๋ผ๊ณ ๋ ํ ์ ์๊ฒ ๋ค. NestJS๋ ๋ค๋ฅธ ์ธ์ด๋ค์ ๋ฐฑ์๋ ํ๋ ์์ํฌ๋ค์ ํน์ง์ ๊ทธ๋๋ก NodeJS๋ก ๊ฐ์ ธ์จ ๊ฒ์ด๋ผ ํ ์ ์๋ค. NestJS๋ ๋ช ํํ ๊ตฌ์กฐ๊ฐ ์๋ค. ์ด ๋ฃฐ์ ๋ฐ๋ผ ๋ฐฑ์๋๋ฅผ ๊ตฌ์ฑํด์ฃผ์ด์ผ ํ๋ค.
NestJS๋ ํ๋ ์์ํฌ์ด๊ณ , ๋ฏธ๋ฆฌ ์ธํ ๋ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ์ ๊ณตํด ๋ณต์กํ ์์ ์ ๊ฑฐ์น์ง ์๊ณ cli ์ค์น๋ง์ผ๋ก๋ ํ๋ก์ ํธ๋ฅผ ์์ํ ์ ์๋ค.
$ npm i -g @nestjs/cli
$ nest new [ํ๋ก์ ํธ ์ด๋ฆ]
์ค์น ํ ์ฝ๋์๋ํฐ์์ ํด๋๋ฅผ ์ด๊ณ npm run start:dev
๋ฅผ ์
๋ ฅํ๋ฉด ์๋์ ๊ฐ์ด ์ฑ๊ณต์ ์ผ๋ก ์ดํ๋ฆฌ์ผ์ด์
์ด ์์๋์๋ค๋ ๋ฉ์์ง๋ฅผ ํ์ธํ ์ ์๋ค. ๊ทธ ๋ง์ธ ์ฆ, localhost:3000
์์ ์ฑ์ ํ์ธํ ์ ์๋ค๋ ๋ง!
NestJS๋ main.ts ํ์ผ์ ๊ฐ๊ณ ์๊ณ , ์ด๊ฑธ ๋ฐ๊พธ๋ฉด ์ ๋๋ค!
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000); // app์ด 3000๋ฒ ํฌํธ๋ฅผ ์ฌ์ฉํ๋ค!
}
bootstrap();
๊ทธ๋ ๋ค๋ฉด Hello World
๋ ์ด๋์ ์ถ๋ ฅ๋๋ ๊ฑธ๊นํ๊ณ , create ๋ด๋ถ์ AppModule
์ ํด๋ฆญํด๋ณด๋ฉด!
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
@Module({
imports: [],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
// ๋น์ด์๋ ํด๋์ค๋ก ๋ณด์ด์ง๋ง, ์ค์ ๋ด์ฉ์
// ์ ๋ฐ์ฝ๋ ์ดํฐ์ ์๋ ๊ฒ!
์ ๋ชจ๋ ๊ดํธ ์์ชฝ์ผ๋ก ๋๋ฌ์์ธ ํจ์๋ฅผ ๋ฐ์ฝ๋ ์ดํฐ๋ผ๊ณ ํ๋ค. NestJS๋ฅผ ์ฐ๋ ค๋ฉด ์ด ๋ฐ์ฝ๋ ์ดํฐ์ ์ต์ํด์ ธ์ผ ํ๋ค. ๋ฐ์ฝ๋ ์ดํฐ๋ ํด๋์ค์ ํจ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์๋ค.
์ด์ ๋ฐ์ฝ๋ ์ดํฐ ์์ ์ฝํธ๋กค๋ฌ๋ฅผ ์ดํด๋ณด์
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
getHello(): string {
return this.appService.getHello();
}
}
์ฌ๊ธฐ์๋ Controller๋ผ๋ ๋ฐ์ฝ๋ ์ดํฐ๊ฐ ์๊ณ , ๊ทธ ์์ ๋ค์ Get์ด๋ผ๋ ๋ฐ์ฝ๋ ์ดํฐ๊ฐ ์๋ค.
๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ด๋ถ์ AppService๋ฅผ ํ๊ณ ๋ค์ด๊ฐ๋ฉด ์๋์ ๊ฐ์ ํ์ผ์ ํ์ธํ ์ ์๋ค.
import { Injectable } from '@nestjs/common';
@Injectable()
export class AppService {
getHello(): string {
return 'Hello World!';
}
}
Hello World๋ ์ฌ๊ธฐ์ ์ถ๋ ฅํด์ค ๊ฒ์ด๋ค!
main.ts์์ ๋ค๋ฃจ๊ณ ์๋ AppModule
์ ์ผ์ข
์ ๋ฃจํธ ๋ชจ๋์ด๋ผ๊ณ ํ ์ ์๋ค.
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
@Module({
imports: [],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
์ฑ ๋ชจ๋์์ ์์์ผ ํ ๊ฒ์ ๋ ๊ฐ์ง์ด๋ค. ์ปจํธ๋กค๋ฌ์ ํ๋ก๋ฐ์ด๋.
์ปจํธ๋กค๋ฌ๊ฐ ํ๋ ์ผ์ ๊ธฐ๋ณธ์ ์ผ๋ก url์ ๊ฐ์ ธ์ค๊ณ ํจ์๋ฅผ ์คํํ๋ ๊ฒ์ด๋ค.
์ปจํธ๋กค๋ฌ๋ express์ ๋ผ์ฐํฐ ๊ฐ์ ์กด์ฌ์ด๋ค. (url์ ๊ฐ์ ธ์ค๊ณ ํจ์๋ฅผ ์คํํ๋ ๊ฒ)
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
getHello(): string {
return this.appService.getHello();
}
}
AppController
์์ @Get
์ด ๋ถ๋ถ์ด express์ get๋ผ์ฐํฐ์ ๋น์ทํ ์ญํ ์ ํ๋ ๊ฒ์ด๋ค.
์ค์ ๋ก app.controller.ts ํ์ผ ํ๋จ์ ์๋์ ๊ฐ์ด ์ฝ๋๋ฅผ ์ถ๊ฐํด์ฃผ๋ฉด!
@Get('/hello')
sayHello(): string {
return 'Hello everyone';
}
localhost:3000/hello
๋ก ์ ์ํด sayHello ํจ์์ ๋ฐํ๊ฐ์ ํ์ธํด๋ณผ ์ ์๋ค.
์ฐธ๊ณ ๋ก ๋ฐ์ฝ๋ ์ดํฐ์ ํจ์ ์ฌ์ด์ ๋น์นธ์ ๋์ด์๋ ์ ๋๋ค!
์ง๊ธ๊น์ง ์ดํด๋ณธ ๋ฐ์ ๊ฐ์ด NestJS์์๋ ํน๋ณํ ๋ผ์ฐํ ์ ํด์ค ํ์๊ฐ ์๋ค. ๋ฐ์ฝ๋ ์ดํฐ๋ง ์์ฑํด์ฃผ๋ฉด get ๋ฆฌํ์คํธ๋ฅผ ์ป์ด์ฌ ์ ์๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด์ ๊ถ๊ธํ ๋งํ ์ ์ ์ปจํธ๋กค๋ฌ ํ์ผ์์ ์ฐธ์กฐํ๊ณ ์๋ Service
์ ๋ํ ๋ถ๋ถ์ด๋ค!
์ด๋ฏธ ๋ฐ์ฝ๋ ์ดํฐ์ ํจ์๋ง์ผ๋ก ์์ฒญ์ ๋ฐ๊ณ , ์๋ต์ ์ค ์ ์๋๋ฐ, Service๋ผ๋ ๊ฒ์ด ์ ํ์ํ ๊น?
NestJS๋ ์ฝํธ๋กค๋ฌ๋ฅผ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๊ตฌ๋ถ์ง๊ณ ์ถ์ดํ๋ค.
์ปจํธ๋กค๋ฌ๋ ๊ทธ๋ฅ url์ ๊ฐ์ ธ์ค๋ ์ญํ ์ผ ๋ฟ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ํจ์๋ฅผ ์คํํ๋ค.
๋๋จธ์ง ํจ์์ ๊ตฌ์ฒด์ ์ธ ์คํ์ ๋ํ ๊ฒ์ ์๋น์ค๋ก ๋๊ฒจ์ฃผ๊ณ ์ถ์ ๊ฒ!
์๋น์ค๋ ์ผ๋ฐ์ ์ผ๋ก ์ค์ function์ ๊ฐ๋ ๋ถ๋ถ์ด๋ค!
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
getHello(): string {
return this.appService.getHello();
}
@Get('/hello')
sayHello(): string {
return this.appService.getHi();
}
}
์์ ๊ฐ์ด ์ปจํธ๋กค๋ฌ๋ฅผ ์์ฑํด์ฃผ๊ณ ์ค์ function์ ์๋์ ๊ฐ์ด ์๋น์ค์ ์์ฑํด์ค๋ค!
import { Injectable } from '@nestjs/common';
@Injectable()
export class AppService {
getHello(): string {
return 'Hello Nest!';
}
getHi(): string {
return 'Hi Nest';
}
}