본문 바로가기
Back-end/NestJS

[NestJS] NestJS의 시작

by 며루치꽃 2021. 12. 29.

NestJS의 시작

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

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000); // 포트 3000번 리스닝
}
bootstrap();

NestJS는 main.ts에서 시작한다.

하나의 모듈에서 어플리케이션을 생성한다. AppModule을 호출한다. 앱 모듈은 모든 것의 루트 모듈 같은 역할을 한다.

모듈이란 어플리케이션의 일부이다. 한 가지 역할을 하는 앱이다. 예를 들어 인증을 담당하는 어플리케이션이 있다면 users 모듈이 존재할 수 있고 인스타그램을 예로 들면 photo 모듈이 존재할 수 있고, video 모듈이 존재할 수 있다. 

컨트롤러 사용방법

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';

@Module({
  imports: [],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

Controller의 역할은 URL을 가져오고 함수를 실행하는데 이는 Node.js에서 express의 router 같은 역할을 한다.

NestJS에서는 데코레이터를 이용하는데 @Get() 데코레이터는 express의 get 라우터와 같은 역할을 한다. 

 

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  getHello(): string {
    return this.appService.getHello();
  }

  @Get('/hello')
  sayHello(): string {
    return 'Hello everyone'
  }
}

예를 들어, 컨트롤러는 URL로부터 요청을 받고, 함수를 실행한다. 데코레이터 때문에 NestJS는 /hello 라는 URL에서 요청이 온다면 sayHello라는 함수를 실행해야하는 것을 알고있다. 

express.js의 controller/router는 app.get('함수')라고 사용했다면 데코레이터를 붙이고 실행할 함수를 붙이면 URL을 가져오고 함수로 매핑한다. /hello가 sayHello 함수를 실행하는 것이다. 

 

AppService의 존재 이유

NestJS는 컨트롤러를 비지니스 로직이랑 구분짓고 싶어한다. 컨트롤러는 그냥 URL을 가져오는 역할이다. 그리고 function을 가져오는 역할이다. 나머지 비지니스 로직은 서비스로 간다. 서비스는 일반적으로 실제로 function을 가지는 부분이다. NestJS 방법을 따르면 위에 있는 sayHello() 메서드는 서비스로 아래와 같이 이동할 수 있고 컨트롤러는 다음과 같이 변경할 수 있다.

 

app.service.ts

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

@Injectable()
export class AppService {
  getHello(): string {
    return 'Hello World!';
  }
  getHi(): string {
    return 'Hi Nest';
  }
}

 

app.controller.ts

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();
  }

  @Get('/hello')
  sayHello(): string {
    return this.appService.getHi();
  }
}

 

NestJS의 기본적인 구조

우선 모듈이 존재하고, 루트 모듈같은 AppModule이 존재한다. AppModule에서는 작성한 모든 걸 import해야한다.

예를 들면 식당API가 있다면 restaurantAPI가 있다면 AppModule에 존재해야하고 모든 것이 AppModule에 존재해야한다. AppModule은 NestJS가 어플리케이션을 만들기 위해 이용하기 때문이다. 

 

NestJS의 기본 흐름(정리)

1. 앱에서 bootstrap() 이 실행이 되면 앱이 실행이 된다.

2. 앱은 app.module로 만들어줬고 앱 모듈에서 컨트롤러가 존재한다.

3. 컨트롤러에서 GET 요청이 왔을 때 getHello()를 실행한다. return 에는 appService안의 getHello()를 실행한다.

4. appService 안의 getHello()를 들어가게되면 서비스 비지니스 로직이 있고 반환으로 'Hello World'를 return 해준다.

5. 'Hello World'가 출력이 된다. 

 

'Back-end > NestJS' 카테고리의 다른 글

[NestJS] Controller 패턴  (0) 2022.01.07

댓글