-
Nest.js 개요 및 객체 지향 디자인 패턴 1(DI, Provider)FrameWork/Nest.js 2022. 6. 19. 16:17
JavaScript와 TypeScript의 코드를 검사해주는 역할이다. 즉 eslintrc.js는 검사 기준이 되는 규칙을 적어 놓은 것이다.
package.json에 들어 가서 확인해보면, Nest.js에 맞게 elint 추가 pulin도 모두 추가가 되어 있다.
NestJS구조&Controller 패턴
전체적으로 Nest.js는 module 단위로 이동을 한다. 각각 controller나 service가 하나의 class이고, 그 class가 레고 처럼 결합을 해서 하나의 module안에 속하게 된다. 그리고 그러한 module들이 여러개가 있고, 이것들이 하나의 module로 합쳐져서 main.ts에서 실행이 되는 구조이다.
Providers & 의존성 주입(DI)
nest.js 같은 경우 AppController 내부에서 생성자로 AppServce type의 appSeviece를 초기화 한 다음 바로 Appconroller의 멤버 변수 처럼 사용 되고 있다.
@Controller('cats') export class AppController { constructor(private readonly appService: AppService) { this.appService = appService } @Get() getHello(): string { return this.appService.getHello(); } }
보통은 인자로 받아도 그 뒤에 생성자 안에서 위의 코드와 같이 초기화 해주는 것이 일반적인데, 그런 것도 없이 바로 사용을 한다.
위 와 같은 유형을 의존성 주입 패턴(DI)이라고 한다.
AppController를 소비자라고 가정하고, AppService를 제품이라고 가정한다.
AppController - consumer(소비자)
AppService - product (제품)
위와 같이 소비자와 제품이 있다면 제품을 생산하는 provider도 존재할 것이다. AppController는 소비자이고, 이 소비자는 어떤 provider에 의해서 appService:AppService라는 제품을 받아서 사용하고 있다.
Nest.js는 모든 것이 module화 되어 있다.
Providers(제공자)
Nest.js Provider은 핵심은 골자는 다수의 기본 Nest class들이 services - provider, repositories, factories,helper 와 같은 것으로 다뤄 지는 것 이다. 중심이 되는 개념은 provider가 의존성 주입이 될 수 있다는 것인데, 즉 object 는 서로 다양한 관계를 가지며 생성될 수 있다. object의 인스턴스 변수들을 "연결"하는 것은 대부분 runtime system에 이루어 지도록 맡겨진다.
app.controller.ts 에서 제품으로서 appService:AppService를 사용하려면 app.module.ts의 @Module에당 제품을 제공할 provider가 누구인지 명시를 해주어야 한다.
@Injectable()
Provider로 취급이 되는 것들은 class 정의 위에 의존성 주입이 가능 하다는 의미의 @Injectable 데코레이터가 붙어 있다.
정리
@Injedctable() 데코레이터로 의존성 주입이 가능하다고 구분해준 class의 경우는 @Modlue({})의 providers 속성에 등록해주면 controller의 생성자에서 service 인스턴스 변수를 인자로 받는 것 만으로도 해당 class에서 멤버 변수로 사용이 가능하다.
'FrameWork > Nest.js' 카테고리의 다른 글
Nest.js 개요 및 객체 지향 디자인 패턴 3 (Exception filter & Pipes) (0) 2022.06.20 Nest.js 개요 빛 객체지향 디자인 패턴 2 (Modules, 캡슐화) (0) 2022.06.19 Nest.js Api만들기 3 (@Query ) (0) 2022.06.17 Nest.js Api만들기 2 (Controller) (0) 2022.06.16 Nest.js Api만들기 1(Project Setup,Overview) (0) 2022.06.16