NestJS에서 사용하는 Controller, Provider, Module에 대한 간략하게 알아보겠습니다.
Controllers
컨트롤러는 들어오는 요청을 처리하고 클라이언트에 응답을 반환하는 역할을 합니다. express의 라우터 같은 역할을 합니다.
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();
}
@Get('/hello')
sayHello(): string {
return 'Hello everyone';
}
}
@Controller()
: express의app.use('/', router)
에서 '/'와 같은 역할을 합니다.@Controller('req')
이렇게 인자로 string을 넘겨주면 express에서app.use('/req', router)
처럼 코드를 작성한 것과 같습니다.@Get()
: Route 핸들러(메서드) 데코레이터입니다. HTTP GET 요청을 지정된 경로로 라우팅 합니다.@Get('hello')
이렇게 인자로 string을 넘겨주면 express 에서router.get('/hello', sayHello)
처럼 코드를 작성한 것과 같습니다.
Providers
Provider는 Nest의 기본 개념입니다. 대부분의 기본 Nest Class 인 services, repositories, factories, helpers 등은 provider로 취급될 수 있습니다. provider는 단순히 @Injectable()
데코레이터가 달린 클래스입니다.
import { Injectable } from '@nestjs/common';
@Injectable()
export class AppService {
getHello(): string {
return 'Hello World!';
}
}
provider 의 주요 아이디어는 의존성을 주입 할 수 있다는 것입니다. 즉, 개체가 서로 다양한 관계를 만들 수 있으며 개체 인스턴스를 "연결"하는 기능은 대부분 Nest 런타임 시스템에 위임할 수 있습니다.
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();
}
}
위의 AppController
생성자에 변수의 타입을 AppService
로 지정해 줌으로써 Nest Injector 가 appService 변수를 AppService
의 인스턴스로 만들어줍니다(인스턴스화한다).
Modules
NestJS 에는 모듈이 있습니다. @Module()
데코레이터로 모듈을 만들 수 있습니다.
Nest 어플리케이션을 만들면 최소 하나의 모듈, 루트 모듈(AppModule
)이 있습니다.
이 루트 모듈은 Nest가 Module 및 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 {}
@Module()
데코레이터는 하나의 객체를 인자로 가지며, 객체가 가질 수 있는 프로퍼티는 다음과 같습니다.
providers
: Nest injector에 의해 인스턴스화되고, 인스턴스들은 모듈 안에서 최소한으로 공유됩니다.controllers
: 해당 모듈에서 정의된, 인스턴스화되어야 하는 Controller의 집합입니다.imports
: 임포트 된 모듈들의 리스트입니다. 이 리스트의 모듈들은 데코레이터에 사용 중인 모듈에서 필요한providers
를 export 하고 있어야 합니다.exports
:providers
의 하위 집합으로, 데코레이터를 사용 중인 모듈이 제공받은 Provider의 일부를 내보낼 수 있습니다. 이는 다른 모듈에서import
할 때 사용됩니다.
파일 생성
Module 생성
nest g mo module-name
Controller 생성
nest g co controller-name
Service 생성
nest g s service-name
Provider 생성
nest g pr provider-name
참고
'Backend > NestJS' 카테고리의 다른 글
[NestJS] Jest 사용 방법 (0) | 2023.07.04 |
---|---|
[NestJS] Mapped types의 Partial 사용 방법 (0) | 2023.06.29 |
[NestJS] ValidationPipe 사용 방법 (0) | 2023.06.23 |
[NestJS] Param decorators (0) | 2023.06.19 |
[NestJS] 설치 및 프로젝트 생성 (0) | 2023.06.05 |
IT 기술과 개발 내용을 포스팅하는 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!