NestJS · · 1 min read
3. 프로바이더
프로바이더(Provider) 는 비즈니스 로직을 담는 클래스로, NestJS의 의존성 주입(DI) 을 통해 다른 곳에 주입된다. 대표적으로 서비스(Service) 가 프로바이더다.
3.1. 서비스와 @Injectable
nest g service users
import { Injectable } from '@nestjs/common';
@Injectable() // DI 컨테이너가 관리하는 프로바이더로 등록
export class UsersService {
private users = [];
findAll() { return this.users; }
create(user) { this.users.push(user); return user; }
}
3.2. 의존성 주입
컨트롤러 생성자에 타입을 선언하면 Nest가 인스턴스를 자동으로 넣어 준다.
@Controller('users')
export class UsersController {
constructor(private readonly usersService: UsersService) {}
@Get()
findAll() { return this.usersService.findAll(); }
}
3.3. 커스텀 프로바이더
토큰 기반으로 값·클래스·팩토리를 주입할 수 있다.
{
provide: 'CONFIG', // 토큰
useValue: { apiUrl: 'https://...' } // 값 주입
}
// 주입: constructor(@Inject('CONFIG') private cfg) {}
useClass— 클래스 주입 (인터페이스 구현 교체)useFactory— 런타임에 계산해서 주입 (비동기 가능)useValue— 상수·목(mock) 객체 주입
기본 스코프는 싱글턴이다. 요청마다 새 인스턴스가 필요하면
@Injectable({ scope: Scope.REQUEST })를 쓴다.