Overview

src를 보면 main, service, module, controller 파일들이 존재한다. 그리고 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();

다음은 module이다. module 파일에는 @Module라는 흥미로운 syntex가 보인다. @Module은 데코리에터로 불리며 클래스에 함수 기능을 추가하기 위해 존재한다. 마치 C#의 attribute나 JAVA의 override와 비슷한 syntex이다.

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와 service를 보면 데코레이터가 추가로 보이며, service를 보면 서버를 실행하고 출력된 hello world를 반환하는 함수가 구현되어 있는걸 확인 할 수 있다

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();
  }
}
import { Injectable } from '@nestjs/common';

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

Controllers

nest는 main.ts에서 동작한다. main.ts에서 NestFactory에 전달된 모듈에서 어플리케이션을 생성한다. NestFactory에 전달된 app.module은 앞으로 개발할 module들의 root이다. app.module에 등록되는 모듈들은 하나의 앱 기능을 가지고 있으며 여러 모듈을 app.module로 모아서 하나의 어플리케이션을 동작 시키는 것이다.

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

Module 데코레이터 요소중 controllers는 URI를 가져와 함수를 호출하는 동작을 한다. 다른 표현으로 controllers는 express의 라우터와 같은 존재이다. 아래 예시로 Get 데코레이터에 /hello를 입력하고 함수를 정의하였다. 그럼 사용자가 /hello로 URI를 접근하게 되면 controller는 sayHello를 호출하게 된다.

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

Untitled

<aside> ✅ 데코레이터는 절대적으로 데코리에터를 적용할 객체와 간격이 있어서는 안된다. 아래 코드와 같이 떨어져 있다면 데코레이터는 접근할 수 있는 객체가 없게 된다.

@Get('/hello')

  sayHello(): string {
    return 'Hello everyone';
  }

</aside>


Services