@Module
데코레이터는 NestJS 애플리케이션에서 모듈을 정의하고 구성하는 데 사용됩니다. 모듈은 관련된 컨트롤러, 서비스 및 기타 프로바이더를 묶어서 조직화하고 의존성 주입을 관리하기 위한 단위입니다. 이제 모듈의 사용법을 다양한 코드 예시와 함께 자세하게 설명하겠습니다.
1. 기본적인 모듈 정의:
import { Module } from '@nestjs/common';
@Module({
controllers: [], // 여기에 컨트롤러를 나열
providers: [], // 여기에 서비스 및 프로바이더를 나열
})
export class MyModule {}
위의 예시에서 MyModule
은 기본적인 빈 모듈을 정의합니다. controllers
배열에 컨트롤러를, providers
배열에 서비스 및 프로바이더를 등록할 수 있습니다.
2. 모듈에 컨트롤러 추가:
import { Module } from '@nestjs/common';
import { UsersController } from './users.controller';
@Module({
controllers: [UsersController], // UsersController를 컨트롤러로 추가
providers: [],
})
export class UsersModule {}
위의 예시에서 UsersController
를 UsersModule
모듈에 추가했습니다.
3. 모듈에 프로바이더(서비스) 추가:
import { Module } from '@nestjs/common';
import { UsersService } from './users.service';
@Module({
controllers: [],
providers: [UsersService], // UsersService를 프로바이더로 추가
})
export class UsersModule {}
위의 예시에서 UsersService
를 UsersModule
모듈에 프로바이더로 추가했습니다.
4. 의존성 주입을 활용한 모듈 간 연결:
import { Module } from '@nestjs/common';
import { UsersModule } from './users/users.module';
import { AuthModule } from './auth/auth.module';
@Module({
imports: [UsersModule, AuthModule], // 다른 모듈을 가져와서 사용
controllers: [],
providers: [],
})
export class AppModule {}
위의 예시에서 AppModule
은 UsersModule
과 AuthModule
을 가져와서 사용하고 있습니다. 이렇게 모듈을 가져와서 사용함으로써 모듈 간의 관계를 구성할 수 있습니다.
5. 모듈 간 서비스 주입:
import { Module } from '@nestjs/common';
import { UsersService } from './users.service';
import { UsersController } from './users.controller';
@Module({
controllers: [UsersController],
providers: [UsersService],
exports: [UsersService], // 다른 모듈에서 UsersService 주입 가능하도록 설정
})
export class UsersModule {}
위의 예시에서 exports
배열을 사용하여 UsersService
를 다른 모듈에서 주입 가능하도록 설정하고 있습니다. 이렇게 함으로써 다른 모듈에서 UsersService
를 주입해서 사용할 수 있습니다.
6. 동적 모듈 설정:
import { Module, DynamicModule } from '@nestjs/common';
import { createDatabaseProviders } from './database.providers';
@Module({})
export class DatabaseModule {
static register(options: Options): DynamicModule {
const providers = createDatabaseProviders(options);
return {
module: DatabaseModule,
providers: providers,
exports: providers,
};
}
}
위의 예시에서 DynamicModule
을 사용하여 동적 모듈을 정의하는 방법을 보여주고 있습니다. register
메서드를 통해 옵션을 받아 providers
와 exports
를 동적으로 설정하는 방식입니다.
이렇게 @Module
데코레이터를 사용하여 모듈을 정의하고 구성함으로써 NestJS 애플리케이션을 모듈화하고 각 모듈 간의 관계와 의존성 주입을 효율적으로 관리할 수 있습니다.
많은 것을 배웠습니다, 감사합니다.