모듈화
모듈 생성
명령어 : nest g mo cats
(공식 문서 참조) nest g modules cats
이런식으로 해도 된다고 함.
위와 같이 실행하면 modules.ts 파일에
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { CatsModule } from './cats/cats.module';
@Module({
imports: [CatsModule],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
CatsModule 이 추가 된 것을 확인할 수 있다.
서비스, 컨트롤러 생성
모듈을 생성한 것처럼, 서비스, 컨트롤러도 cli로 생성 할 수 있다.
> nest g co cats
> nest g service cats
위와 같이 실행하면 cats.module.ts 파일에
import { Module } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';
@Module({
controllers: [CatsController],
providers: [CatsService],
})
export class CatsModule {}
위와 같이 Controller와 Service를 만들어주는 것을 확인할 수 있고 해당 파일도 생성됨을 확인할 수 있다.
- cats.controller.spec.ts 라는 파일은 테스트를 위함으로 생성된다.
export 와 캡슐화의 개념
기본적으로 공급하는 Service 공급자는 캡슐화가 되어 내보내기를 할 수 없다.
그러나 다른 컨트롤러에서 해당 Service를 사용하고 싶다면
예를들어
constructor(private readonly appService: AppService, private readonly catService: CatService)
위와 같이 사용하고 싶다면
cats.module.ts 에서
import { Module } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';
@Module({
controllers: [CatsController],
providers: [CatsService],
exports: [CatsService],
})
export class CatsModule {}
위와 같이 export에 추가하여 주면 사용할 수 있게 된다.
캡슐화에 대한 보충 설명
만약 exports 를 쓰지 않으면 app.moduels.ts 에서
@Module({
imports: [CatsModule, UsersModule],
controllers: [AppController],
providers: [AppService, CatsService],
})
이렇게 넣어주고 사용할 수 있게 된다.
그런데 이러면 provider에 하나하나 추가해줘야 한다 이건 나누는 의미가 없어진다. 다 추가해줘야하면 양이 많아질수록… 다 넣어줘야 하기 때문에
그러므로 exports를 사용해서 은닉화를 풀어준다고 보면 되는 것이다.