개발자 도전기/[STUDY] JS || TS

NestJS | docs | Provider

답수 2023. 2. 13. 23:10
728x90
반응형

https://docs.nestjs.com/providers

 

Documentation | NestJS - A progressive Node.js framework

Nest is a framework for building efficient, scalable Node.js server-side applications. It uses progressive JavaScript, is built with TypeScript and combines elements of OOP (Object Oriented Progamming), FP (Functional Programming), and FRP (Functional Reac

docs.nestjs.com

 

Providers

Providers는 Nest에서 기본적인 개념이다. 공식 문서에 의하면, services, repositories, factories, helpers 등 Nest의 많은 기본 클래스들은  공급자로 여겨지고, 여기서 가장 중요한 아이디어가 바로 의존성 주입(Dependency Injection)이라고 한다.

 

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

AppController를 소비자라고 생각해보자. 그리고 appService를 제품이라고 생각해보자. AppController는 Provider에 의해 AppService라는 제품을 받아서 this.appService.getHello(); 라는 방식으로 사용하고 있다. 그럼 이 AppService라는 제품은 어디에서 공급하고 있는걸까?

 

// 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 {}

app.module.ts 파일에서 보면 @Module 데코레이터 내에 providers라는 속성이 보이고, 이 안에서 공급할 모듈을 주입할 수 있다. 즉 AppService는 providers에 등록하면서 공급자로 여겨지는 것이고, 소비자인 AppController가 이 모듈을 사용할 수 있게 되는 것이다. 이게 기본적인 Nest의 의존성 주입 패턴이라고 한다.

 

공식 문서의 그림에서도 볼 수 있듯이, Controller는 각 모듈들을 주입 받아서 사용하는 패턴임을 확인할 수 있다.

 

Services

services는 데이터를 저장하거나 검색하는 역할을 하고 Controller에 의해 사용된다. 즉 컨트롤러에서는 HTTP 요청을 처리하는 일을 하고, 그 외의 CRUD 작업들은 서비스에서 이루어지도록 코드를 작성하는 것이 좋다.

 

 

객체 지향 프로그래밍의 핵심 목표는 실생활과 유사하게 코드를 작성한다는 것이다. 이런 측면에서 봤을 때 의존성 주입 패턴은 명료하고, NestJS는 이를 잘 표현한다고 한다.

 

 

728x90
반응형
LIST