728x90

✅ 1. 기본 개념
NestJS에서 의존성 주입(DI)은 클래스(Controller, Service 등)가 직접 객체를 생성하지 않고, IoC 컨테이너가 NestJS에서 필요한 인스턴스를 대신 생성해 주입하는 방식입니다. @Injectable() 데코레이터가 붙은 클래스는 NestJS가 관리하는 Provider로 등록됩니다.
✅ 2. Controller -> Service 주입
// user.service.ts
import { Injectable } from "@nestjs/common";
@Injectable()
export class UsersService {
getUsers() {
return ["user1", "user2"];
}
}
// user.controller.ts
import { Controller, Get } from "@nestjs/common";
import { UsersService } from "./users.service";
@Controller("user")
export class UsersController {
constructor(private readonly userService: UsersService) {} // 자동 주입
@Get()
findAll() {
return this.userService.getUsers();
}
}
- constructor(private readonly userService: userService) 부분은 NestJS가 UserService 인스턴스를 자동으로 넣어주는 코드임
✅ 3. 모듈 단위 등록
Service와 Controller는 반드시 같은 모듈 또는 imports된 모듈 안에 있어야 주입이 가능합니다.
// user.module.ts
import { Module } from "@nestjs/common";
import { UsersController } from "./users.controller";
import { UsersService } from "./users.service";
@Module({
providers: [UsersService], // Provider 등록
controllers: [UsersController],
exports: [UsersService], // 다른 모듈에서 사용할 경우 exports 피룡
})
export class UsersModule {}
✅ 4. 모듈 간 공유 (exports + imports)
// app.module.ts
import { Module } from "@nestjs/common";
import { UsersModule } from "./users/users.module";
@Module({
imports: [UsersModule], // 다른 모듈 가져오기
})
export class AppModule {}
- UserModule에서 UserService를 exports 해놨기 때문에, AppModule이나 다른 모듈에서도 UserService를 주입할 수 있음
GitHub - Koras02/nestjs-tutorial-blog
Contribute to Koras02/nestjs-tutorial-blog development by creating an account on GitHub.
github.com
728x90
LIST
'Back-End > NestJS' 카테고리의 다른 글
| [NestJS] 6장 DTO & Validation (0) | 2025.08.29 |
|---|---|
| [NestJS] 4장 모듈 (0) | 2025.08.14 |
| [NestJS] 3장 프로바이더 (0) | 2025.03.07 |
| [NestJS] 2장 컨트롤러 (0) | 2025.03.07 |
| [NestJS] 1장 NestJs의 탄생 Nestjs는 무엇인가? (0) | 2025.02.11 |