NestJS

[NestJS] Module, Controller, Service, Provider 란? Example

차노도리 2023. 7. 16. 23:06

Module

  • 애플리케이션의 기능과 관련된 컴퍼넌트를 구조화 하는대 사용한다.
  • '@Module' 데코레이터를 사용하여 정의한다.
  • provider(service,repository), controller, module 등을 포함할 수있다.

모듈 만들기

  • nest g module [모듈명]
nest g module vocas

 

Controller

  • 클라이언트의 요청을 처리하고 응답을 반환하는 역할을한다.
  • '@Controller' 데코레이터에 경로를 지정하여 해당 컨트롤러의 라우팅 경로를 설정
  • Handler : @Get, @Post, @Delete등의 데코레이터를 사용하여 요청 메서드를 지정한다.
  • 비지니스 로직을 구현하고 Service를 호출하여 데이터 조작 및 비지니스 로직을 처리한다.
  • Module의 controllers에 등록해서 사용한다.

controller 만들기

  • nest g controller [컨트롤러명]
nest g controller vocas

 

Service

  • 비지니스 로직을 구현하고, 데이터 조작, 외부 api 호출등 같은 작업을 처리하는 클래스
  • Controller에서 호출되어 컨트롤러와 데이터베이스, 외부 리소스 사이의 상호작용을 한다.
  • '@Injectable' 데코레이터를 사용하여 정의
  • Module의 providers에 등록해서 사용한다.

service 만들기

  • nest g service [서비스명]
nest g service vocas

 

Provider

  • 의존성 주입을 위해 사용되는 클래스이다.
  • '@Injectable' 데코레이터를 사용하여 정의한다.
  • 주로 service,repository,factory,외부 api 등을 나타낸다.

 

Example

app에 Module에 Module 등록 예시

ex) app.module.ts

...

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

 

Module에 Contorller,service 등록 예시

ex) vocas.module.ts

...

@Module({
  controllers: [VocasController],
  providers: [VocasService],
})
export class VocasModule {}

 

Controller 예시

ex) vocas.controller.ts

  • 생성자에 private 접근 제한자 사용시 암묵적으로 클래스 프로퍼티로 선언된다.
...

@Controller('vocas')
export class VocasController {
  // 생성자에 private 접근 제한자 사용시 암묵적으로 클래스 프로퍼티로 선언된다.
  constructor(private vocasService: VocasService) {}

  @Get('/')
  getAllVocase(): Promise<GetAllVocasResponse> {
    ...
    return this.vocasService.getAllVocas();
  }
  ...
}

 

Service 예시

ex) vocas.service.ts

...

@Injectable()
export class VocasService {
  ....

  async getAllVocas(): Promise<GetAllVocasResponse> {
    ...
    return vocas;
  }
  ...
}

 

'NestJS' 카테고리의 다른 글

[NestJS] Pipe란? Pipe Validation Example  (0) 2023.07.21
[Nest]NestJS란? Express 차이점, NestJS Start  (0) 2023.07.15