기본 프로젝트 구조

유석현(SeokHyun Yu)·2022년 12월 20일
0

Nest.js

목록 보기
2/9
post-thumbnail
post-custom-banner

main.ts

main.ts에는 서버를 시작하는 비동기 함수가 포함되어 있다.

Nest는 응용 프로그램 인스턴스를 생성하기 위해 NestFactory 클래스를 사용한다.

NestFactory는 응용 프로그램 인스턴스를 만들 수 있는 몇 가지 정적 메서드를 제공한다.

create() 메서드도 그 중 하나인데, 이 메서드는 INest Application 인터페이스를 충족하는 응용 프로그램 개체를 반환한다.

그리고 이 응용 프로그램 개체 안의 listen() 메서드를 통해 애플리케이션이 HTTP 요청을 대기하도록 하는 HTTP 리스너를 시작한다.

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

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

bootstrap();

app.module.ts

모듈은 @Module() 데코레이터로 주석을 단 클래스이다.

@Module() 은 Nest가 응용 프로그램 구조를 구성하는 데 사용하는 메타데이터를 제공한다.

각 응용 프로그램에는 루트 모듈이 하나 이상 있다.

루트 모듈은 Nest가 응용 프로그램 그래프를 구축하는 데 사용하는 시작점이다.

즉, Nest가 모듈 및 provider 관계 및 종속성을 해결하는 데 사용하는 내부 데이터 구조이다.

매우 작은 응용 프로그램은 이론적으로 루트 모듈만 있을 수 있지만 일반적인 경우는 아니다.


@Module() 은 해당 모듈을 설명하는 객체를 가진다.

객체의 프로퍼티들은 다음과 같다.

  • providers: 해당 모듈 안에서 적어도 한 번은 사용되어 Nest 인젝터(의존성을 주입하는 Nest 내부 모듈)에 의해 인스턴스화될 provider(app.service.ts)들의 집합

  • controllers: 해당 모듈 안에서 정의되고 인스턴스화 되어야하는 controller(app.controller.ts)의 집합

  • imports: 해당 모듈에서 사용하기 위해 가져온(import) 모듈의 집합

  • exports: 해당 모듈에서 제공하는 provider 집합의 부분집합이며, 이 모듈을 가져오는 다른 모듈에서 사용할 수 있도록 내보낼(export) provider

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

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

app.controller.ts

Controller는 http 요청을 수신하고 클라이언트에 응답을 반환한다.

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

app.service.ts

Service는 컨트롤러가 수신한 http 요청에 대한 비즈니스 로직을 처리하고 컨트롤러에 반환한다.

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

@Injectable()
export class AppService {
  getHello(): string {
    return 'Hello World!';
  }
}
profile
Backend Engineer
post-custom-banner

0개의 댓글