@Module nestjs

agnusdei·2023년 8월 9일
0
post-custom-banner

@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 {}

위의 예시에서 UsersControllerUsersModule 모듈에 추가했습니다.

3. 모듈에 프로바이더(서비스) 추가:

import { Module } from '@nestjs/common';
import { UsersService } from './users.service';

@Module({
  controllers: [],
  providers: [UsersService], // UsersService를 프로바이더로 추가
})
export class UsersModule {}

위의 예시에서 UsersServiceUsersModule 모듈에 프로바이더로 추가했습니다.

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 {}

위의 예시에서 AppModuleUsersModuleAuthModule을 가져와서 사용하고 있습니다. 이렇게 모듈을 가져와서 사용함으로써 모듈 간의 관계를 구성할 수 있습니다.

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 메서드를 통해 옵션을 받아 providersexports를 동적으로 설정하는 방식입니다.

이렇게 @Module 데코레이터를 사용하여 모듈을 정의하고 구성함으로써 NestJS 애플리케이션을 모듈화하고 각 모듈 간의 관계와 의존성 주입을 효율적으로 관리할 수 있습니다.

post-custom-banner

1개의 댓글

comment-user-thumbnail
2023년 8월 9일

많은 것을 배웠습니다, 감사합니다.

답글 달기