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!';
}
}