Skip to content

Modules

모듈은 관련된 provider와 controller를 하나의 단위로 그룹화한다. 각 기능 영역을 독립적인 모듈로 분리하여 코드를 조직화한다.

@Module(metadata)

@Module() 데코레이터로 provider와 controller를 그룹화한다.

ts
import { Module } from '@repo/electron-ipc';

@Module({
  providers: [FileService, LogService],
  controllers: [FileController],
})
class FileModule {}

ModuleMetadata

필드타입설명
providersConstructor[]@Injectable()로 표시된 서비스 클래스
controllersConstructor[]@Controller()로 표시된 핸들러 클래스

모듈 등록

createApp()modules 배열에 모듈을 나열한다:

ts
createApp({
  modules: [
    FileModule,
    SettingsModule,
    ThemeModule,
  ],
  // ...
});

모듈 간 의존성

각 모듈의 provider는 등록 순서대로 resolve된다. 모듈 간 의존성이 있다면 의존되는 모듈을 먼저 나열한다.

ts
// SettingsModule의 SettingsService가 FileModule의 FileService를 inject하는 경우
modules: [
  FileModule,      // 먼저 등록
  SettingsModule,  // FileService를 inject 가능
]

WARNING

모듈 배열의 순서가 provider 등록 순서를 결정한다. 의존하는 provider가 아직 등록되지 않은 상태에서 inject()를 호출하면 resolve에 실패한다.

다음 단계

  • Providers — @Injectable과 inject()로 의존성을 관리하는 방법
  • Controllers — @Controller(contract)로 IPC 핸들러를 정의하는 방법