처음 forFeature와 forRoot의 차이를 알아보려다가 정적 모듈, 동적 모듈에 대해서 알게되었다.. 아직 복잡한 내용이지만 코드에 적용할 수 있는 부분들이 있어서 기록중✏️
특정 모듈을 한번에 다른 모듈로 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의 내용을 한 곳으로 모아주는 역할을 한다.