@Module()은 데코레이터로 주석이 달린 클래스입니다 .
@Module() 데코레이터는 메타데이터를 제공하는데, 이는 Nest 구조를 만드는데 도움을 줍니다.
최상단에 Root 모듈(App Module)이 존재합니다.
루트 모듈을 통해 애플리케이션 그래프 구조를 구축할 수 있게 되며, 모듈과 공급자 관계 및 종속성 관계를 정의하는데 사용하는 내부 데이터 구조입니다.
provider, controllers , services, repository, imports, exports... 다양한 모듈이 있을 수 있습니다.
모듈은 기본적으로 공급자(provider)를 캡슐화합니다.
모듈에서 내보낸 공급자만이 모듈의 공용 인터페이스로 간주해 사용할 수 있습니다.
모든 모듈은 싱글톤 구조이므로 여러 모듈간에 모든 공급자의 동일한 인스턴스를 공유할 수 있게 됩니다.
import { Module, Global } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';
@Global() // 제거하면 공급자를 통해 해당 모듈과만 공유 가능
@Module({
controllers: [CatsController],
providers: [CatsService],
exports: [CatsService],
})
export class CatsModule {}
Nest는 모듈 범위 내에 공급자를 캡슐화합니다.
따라서 해당 모듈 범위 내에서만 모듈 공급자를 통해 캡슐화 모듈을 가져와 사용할 수 있습니다.
하지만, @Global 데코레이터를 통해 전역으로 모듈을 관리할 수도 있습니다.
다만, 이것은 좋은 디자인 패턴이 아니라고 하므로 지양해야합니다.
참고
'JaveScript > NestJS' 카테고리의 다른 글
예외 필터 (0) | 2024.06.13 |
---|---|
Middleware (0) | 2024.06.11 |
Provider (0) | 2024.06.09 |
@Body() 데코레이터 (1) | 2024.06.08 |
자동으로 JSON으로 직렬화되는 이유 (0) | 2024.06.06 |