framework/NestJS
⚡ NestJS Async Providers – 비동기 주입 완벽 가이드
octo54
2025. 4. 29. 11:11
반응형
⚡ NestJS Async Providers – 비동기 주입 완벽 가이드
NestJS에서 **Async Provider(비동기 프로바이더)**는 외부 API 호출, 데이터베이스 연결처럼
비동기 초기화가 필요한 의존성을 주입할 때 사용하는 핵심 기능입니다.
이번 글은 NestJS 공식 문서 Async Providers를 기반으로
한글 번역 + 실전 적용법 중심으로 해설합니다.
🚀 외부 리소스(예: Redis, Database, API Client)를 다룰 때는 Async Provider 패턴이 필수입니다.
✅ Async Provider란?
- NestJS의 Provider는 기본적으로 싱크(sync) 방식입니다.
- 하지만 외부 연결, 설정 파일 로딩, 인증 토큰 발급 등은 비동기(async) 로 처리해야 합니다.
- 이때 useFactory + async/await 조합을 사용해 비동기 Provider를 선언합니다.
1️⃣ 기본 Async Provider 예제
const ConfigProvider = {
provide: 'CONFIG',
useFactory: async () => {
const config = await loadConfigFromServer();
return config;
},
};
- useFactory 안에서 async 함수로 외부 작업 수행
- 완료된 값을 주입합니다.
2️⃣ 모듈에 Async Provider 등록
@Module({
providers: [ConfigProvider],
exports: ['CONFIG'],
})
export class ConfigModule {}
- 이렇게 하면 다른 모듈에서도 'CONFIG' 토큰으로 주입받아 사용할 수 있습니다.
✅ 사용하는 쪽
@Injectable()
export class AppService {
constructor(@Inject('CONFIG') private config) {}
getConfigValue(key: string) {
return this.config[key];
}
}
반응형
이 구간은 Async Provider를 실전 적용하는 법이 소개되는 핵심 구간입니다.
애드센스 광고를 삽입하면 CTR이 가장 높은 지점이 됩니다.
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-XXXXXX"
data-ad-slot="YYYYYY"
data-ad-format="auto"
data-full-width-responsive="true"></ins>
3️⃣ 다른 Provider를 주입받는 Async Provider
useFactory 안에서 다른 Provider를 주입받아 사용할 수도 있습니다.
@Module({
providers: [
DatabaseService,
{
provide: 'USER_REPOSITORY',
useFactory: async (db: DatabaseService) => {
return db.getRepository('User');
},
inject: [DatabaseService],
},
],
})
export class UsersModule {}
- inject: [DatabaseService]를 통해 DatabaseService 인스턴스를 useFactory 함수에 주입
- db.getRepository('User')처럼 비동기 작업 후 결과를 반환
4️⃣ 실무에서 많이 쓰는 패턴 – 환경설정 모듈
✅ ConfigService 만들기
@Injectable()
export class ConfigService {
private config: any;
constructor() {
this.config = {}; // 기본값
}
async load() {
// 외부에서 환경 설정을 불러옴
this.config = await loadExternalConfig();
}
get(key: string) {
return this.config[key];
}
}
✅ 비동기로 ConfigService 초기화
@Module({
providers: [
{
provide: ConfigService,
useFactory: async () => {
const configService = new ConfigService();
await configService.load();
return configService;
},
},
],
exports: [ConfigService],
})
export class ConfigModule {}
5️⃣ NestJS가 Async Provider를 처리하는 방식
- Application Lifecycle에서 비동기 프로바이더의 초기화를 기다립니다.
- 따라서 await createApp() 이후에는 모든 비동기 작업이 완료된 상태가 됩니다.
🧠 실무 정리
상황 방법
외부 API 키 로딩 | Async Provider |
DB 연결 초기화 | Async Provider |
비동기 설정 파일 로딩 | Async Provider |
Redis, Kafka 연결 | Async Provider |
🔚 마무리 요약
- 비동기 초기화가 필요한 의존성은 useFactory+async 조합으로 설정
- inject 옵션을 통해 다른 Provider도 사용 가능
- 외부 시스템과 연결하는 모든 경우에 Async Provider를 적극 활용
NestJS Async Provider,NestJS useFactory Async,NestJS 비동기 프로바이더,NestJS 설정 모듈,NestJS 외부 API 연동,NestJS DB 연결,NestJS Redis 연결,NestJS Kafka 연결,NestJS 실무 패턴,NestJS 비동기 주입