[NestJS] 정적 모듈 / 동적 모듈

장여진·2023년 2월 9일
0

처음 forFeature와 forRoot의 차이를 알아보려다가 정적 모듈, 동적 모듈에 대해서 알게되었다.. 아직 복잡한 내용이지만 코드에 적용할 수 있는 부분들이 있어서 기록중✏️

  1. 동적 모듈

특정 모듈을 한번에 다른 모듈로 import 하는 방법이 있다?

기존에는 아래와 같이 필요한 서비스를 주입시키고, 해당 서비스에서 사용하고이는 DB까지 모두 주입해주는 방식으로 사용하였다.

// [ 기존 코드 ]

// user.module.ts

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { User } from './entities/users.entity';
import { UserResolver } from './user.resolver';
import { UserService } from './user.service';

@Module({
  imports: [TypeOrmModule.forFeature([User])],
  providers: [
    UserResolver, //
    UserService,
  ],
})
export class UserModule {}
// project.module.ts

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ProjectAddress } from '../projectAddress/entities/projectAddress.entity';
import { ProjectParticipant } from '../projectParticipants/entities/projectParticipant.entity';
import { User } from '../users/entities/users.entity';
import { UserService } from '../users/user.service';
import { Project } from './entities/project.entity';
import { ProjectResolver } from './project.resolver';
import { ProjectService } from './project.service';

@Module({
  imports: [
    TypeOrmModule.forFeature([
      Project,
      ProjectAddress,
      User,
      ProjectParticipant,
    ]),
  ],
  providers: [ProjectService, ProjectResolver, UserService],
})
export class ProjectModule {}

UserModule에서 exports를 사용해주면 위의 코드처럼 모두 작성하지 않고UserModule만 import해서 사용할 수 있는 방법이 있다고 한다🤔

// [적용 코드]
// user.module.ts

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { User } from './entities/users.entity';
import { UserResolver } from './user.resolver';
import { UserService } from './user.service';

@Module({
  imports: [TypeOrmModule.forFeature([User])],
  exports: [UserService], // 💡 외부에서 사용할 UserService export!
  providers: [
    UserResolver, //
    UserService,
  ],
})
export class UserModule {}


// project.module.ts
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ProjectAddress } from '../projectAddress/entities/projectAddress.entity';
import { ProjectParticipant } from '../projectParticipants/entities/projectParticipant.entity';
import { UserModule } from '../users/user.module';
import { Project } from './entities/project.entity';
import { ProjectResolver } from './project.resolver';
import { ProjectService } from './project.service';

@Module({
  imports: [
    UserModule, // 💡 해당 모듈을 import함으로써 exports한 것들 사용 가능!
    TypeOrmModule.forFeature([
      Project, //
      ProjectAddress,
      ProjectParticipant,
    ]),
  ],
  providers: [ProjectResolver, ProjectService],
})
export class ProjectModule {}

2.동적 모듈

  • 옵션별로 설정이 가능해서 사용하고 싶은 곳에 맞게 커스텀이 가능하다.

forFeature(), register()는 각 모듈의 상세 설정을 해주는 메서드이며, 여러번 사용 가능하다.

forRoot는 global(전역)로 설정이 가능하며 forFeature의 내용을 한 곳으로 모아주는 역할을 한다.

0개의 댓글