Tech Blog of Pinomaker

Nest JS Project를 생성하면 아래의 구조를 가지게 된다.

 

 

Main.ts

Main.ts는 AppModule를 추출해서, 3000번 포트에 실행 시키는 역할을 하며, 함수 이름은 변경해도 되지만, 파일 명은 변경해서는 안 된다.

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

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

 

AppModule.ts

AppModule에서는 우리가 만드는 Service, Controller나 추가로 생성한 Module 즉 모든 것들을 불러오는 역할을 한다.

그 이유는 Main.ts에서 AppModule를 추출해서 3000번 포트에 실행 하기에, 모든 파일은 AppModule이 가져와야하며, 여러개의 모듈을 만들어 분리하여 관리 할 수 도 있다.

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은 데코레이터라고 하며, Nest JS는 데코레이터 사용에 익숙해져야한다.

데코레이터는 클래스에 함수 기능을 추가 할 수 있으며, 클래스를 위해 작동하는 함수라고 생각하면 된다,

주로 사용하는 데코레이터에는 @Injectable, @Get, @Post, @Controller 등이 있다.

 

AppController.ts

콘트롤러는 URL를 가져오고 함수를 실행 시키는 역할을 한다.

Express의 라우터와 같은 기능을 하게 되며, @Post, @Get.. 등을 이용하여 메소드와 URL에 매칭 되는 요청이 오면 특정 함수를 실행 시킨다.

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

 

AppService.ts

Nest JS는 JAVA Spring과 같이 콘트롤러와 비즈니스 로직을 구분지어 개발한다.

Service에는 우리의 비즈니스 로직, 함수를 구현하고, 콘트롤러에서 요청에 맞게 Service를 호출하여 사용한다.

import { Injectable } from '@nestjs/common'

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

 

 

Nest JS 구조

Nest JS의 구조는 아래의 이미지와 같다.

모든 것을 import한 AppModule을 Main.ts에서 가져와 특정 포트에 실행 시키는 역할을 하며, 비즈니스 로직이 담긴 Service를 URL과 메소드와 매칭 시키는, 라우터 역할을 하는 Controller가 가져와 실행 시킨다. 

 

기능, 역할에 따라서 다른 모듈을 생성하고 각각의 Controller와 Service를 생성하여 관리를 할 수도 있으며, 이 때는 생성한 모듈을 AppModule에서 import한다.

profile

Tech Blog of Pinomaker

@pinomaker

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!