모듈을 좀 더 구조로 만들기 위해서는 app.module을 살펴보면
app.module은 controller와 providers를 가지고 있다.
그래서 app.module은 AppController와 AppProvied만 가지고 있어야 한다.
↓
nest g mo 명령어를 실행하고 module 이름을 입력 후 엔터를 누르면
movies.module을 생성하고 app.module.ts.를 업데이트 된다.
app.module.ts을 확인하면 MoviesModule이 imports로 갖게된 것을 확인할 수 있다.
↓
app.module.ts에서 controller와 providers를 비워놓는다.
↓
nest g co 명령어를 실행한 후 이름을 무엇으로 할건지 물어보면 app을 입력 후 엔터를 누르면
app폴더 내에 app.controller.ts 파일이 생성되고 app.module.ts 파일 내 controllers에 AppController가 추가된다.
↓
app.controller.spec.ts 파일은 삭제한 후 app.controller.ts 파일은 src 루트("/") 경로로 이동시키고 app 폴더는 삭제한다.
↓
Dependency Injection(의존성 주입)
movies.controller.ts 파일을 보면 this.moviesServiec.getAll()를 사용하고 있는데
이게 작동하는 이유는 moviesService라고 불리는 propery를 만들고 타입을 지정해주었기 때문이다.
movies.module.ts 파일을 보면 controllers와 providers를 import하고 있는데 이 부분에서 모든것이 이루어진다.
이 providers가 여기 있는 모든 것들을 import 해서 타입을 추가하는 것만으로 동작이 잘 이루어진다.
NestJS가 providers에 MoviesService를 import하고 Controller에 inject(주입)을 한다.
movies.service.ts 파일을 보면 injectable이라는 데코레이터(Decorator)가 있다.
결론적으로 movies.module.ts 파일에 있는 providers를 지우면 Controller에서 MoviesService가 필요하다고 오류를 출력하는데 그래서 providers가 필요한 것이고 이걸 의존성 주입(Dependecy Injection)이라고 한다.
'NestJs API 만들기' 카테고리의 다른 글
10. REST API - DTO(Data Transfer Obejct) AND Validation (2) (0) | 2025.05.21 |
---|---|
09. REST API - DTO(Data Transfer Obejct) AND Validation (1) (0) | 2025.05.21 |
08. REST API - Movies Service (2) (0) | 2025.05.20 |
07. REST API - Movies Service (1) (0) | 2025.05.20 |
06. REST API - Http Decorator (0) | 2025.05.20 |