nest js

NestJs Provider(공급자)

호리둥절 2023. 4. 6. 14:27

공급자란?

nestjs 공급자란 애플리케이션에서 사용되는 객체를 생성하고 제공하는 역할을 합니다. 대부분의 공급자는 클래스로 작성되며 @Injectable() 데코레이터를 사용하여 해당 클래스를 공급자로 등록합니다.

 

공급자는 모듈내에서 생성되고 제공됩니다

@Module() 데코레이터의 providers 배열에 공급자를 등록하여 모듈 내에서 사용할 수 있습니다. 또한, @Injectable() 데코레이터를 사용하여 공급자 클래스에 의존성 주입(Dependency Injection) 기능을 적용할 수 있습니다.

 

userService라는 공급자를 만들고 userModule에 등록한다고 가정해봅시다.

예시코드입니다.

 

1. 클래스(class) 기반 공급자

service class로 예시를 적용해보았습니다.

import { Injectable } from '@nestjs/common';
import { CreateUserDto } from './dto/create-user.dto';
import { UpdateUserDto } from './dto/update-user.dto';

@Injectable()
export class UserService {
  create(createUserDto: CreateUserDto) {
    return 'This action adds a new user';
  }

  findAll() {
    return `This action returns all user`;
  }

  findOne(id: number) {
    return `This action returns a #${id} user`;
  }

  update(id: number, updateUserDto: UpdateUserDto) {
    return `This action updates a #${id} user`;
  }

  remove(id: number) {
    return `This action removes a #${id} user`;
  }
}

 

위 코드에서 @Injectable() 데코레이터를 사용하여 클래스를 공급자로 등록합니다. UserService클래스는 데이터베이스와 관련된 작업을 수행하는 공급자입니다.

 

2. 팩토리 함수 기반 공급자

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

@Injectable()
export class DatabaseService {
  constructor(private config: ConfigService) {}

  async query(sql: string): Promise<any> {
    // 데이터베이스 쿼리 실행 및 결과 반환
  }
}

@Injectable()
export class DatabaseServiceFactory {
  createDatabaseService(): DatabaseService {
    const configService = new ConfigService();
    const databaseService = new DatabaseService(configService);
    return databaseService;
  }
}

위 코드에서 @Injectable() 데코레이터를 사용하여 팩토리 함수와 팩토리 함수에서 생성한 클래스를 공급자로 등록합니다. DatabaseServiceFactory 클래스는 DatabaseService 클래스의 인스턴스를 생성하는 팩토리 함수를 제공합니다.

 

3. 값 기반 공급자

 

4. 외부 모듈 기반 공급자

import { Module } from '@nestjs/common';
import { BullModule } from '@nestjs/bull';
import { JobQueueService } from './job-queue.service';

@Module({
  imports: [
    BullModule.registerQueue({
      name: 'job-queue',
      redis: {
        host: 'localhost',
        port: 6379,
      },
    }),
  ],
  providers: [JobQueueService],
  exports: [JobQueueService],
})
export class JobQueueModule {}

등이 있습니다

 

 

'nest js' 카테고리의 다른 글

NestJs Pipe에 대하여 알아보자  (0) 2023.04.06
NestJs 미들웨어  (0) 2023.04.06
NestJs controller에 대해 이해하기  (0) 2023.04.06
NestJs cli 명령어 모음  (0) 2023.04.06
NestJS 시작하기  (0) 2023.04.05