NestJS 프로젝트 구조 알아보기

최태양 (choittttt)·2024년 4월 23일

NestJS

목록 보기
1/1

nest.js는 main.ts 파일을 가진다 이름이 변경되면 안된다.

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); // 3000번 포트 리스닝
}
bootstrap();

이 파일은 애플리케이션을 부트스트랩(초기화)하고 실행하는 역할을 합니다.

NestFactory를 사용하여 애플리케이션을 생성하고 실행

Module을 부트스트래핑, 서버 설정이나 글로벌 미들웨어를 추가할 수 있다.

그렇다면 첫 서버 구동 후 localhost:3000의 "Hello World"는 어디서 오는 걸까?

NestFactory.create(AppModule); 

코드의 AppModule에 접속해보자

app.module.ts

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

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

@Module이라는 데코레이터가 존재한다. 데코레이터는 클래스에 함수 기능을 추가할 수 있다.

모듈은 관련된 컨트롤러, 서비스, 프로바이더 등을 그룹화하는 역할을 한다. 애플리케이션의 루트 모듈은 일반적으로 AppModule이며, 이 모듈에서 다른 모듈을 임포트하여 애플리케이션을 구성한다.

controllers: [AppController]

의 AppController에 접속해보자

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

컨트롤러는 HTTP 요청을 처리하고 클라이언트에게 응답을 반환하는 역할을 한다 이곳에서 @Get, @Post, @Put, @Delete 등의 데코레이터를 사용하여 요청을 처리한다.

@Get 어노테이션이 아래와 같은 코드를 리턴하고 있다.

this.appService.getHello(); 

constructorAppService로 들어가면

app.service.ts

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

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

@Injectable 안에 Hello World!가 리턴되어 있는걸 확인할 수 있다.

서비스는 비즈니스 로직을 처리하고 데이터베이스와 상호 작용하는 등 핵심 기능을 제공한다. @Injectable 데코레이터를 사용하여 서비스 클래스를 정의하고, 의존성 주입을 통해 컨트롤러나 다른 서비스에 주입할 수 있다.

간단하게 정리해보면 main.ts에서 module - controller - service와 같이 NestJS 애플리케이션을 체계적이고 효율적으로 구성할 수 있다. 각 요소는 특정 역할을 수행하며, 서로 연계되어 애플리케이션의 동작을 구성하게 된다!

profile
Better Than Yesterday

0개의 댓글