Search

#021 #Module과 캡슐화

 NestJS CLI 명령어 공식 문서

 Module 생성

공식 문서를 보면 CLI에서 module을 생성하는 방법이 명시되어 있다.

 명령어 입력

→ 명령어를 입력하면 자동으로 해당 모듈이름의 폴더와 파일을 생성한다. → module파일은 보는 것과 같이 빈 껍데기만 생성이 되었다.
→ 물론 직접 폴더를 만들어서 module을 만들 수 있겠지만, nest CLI를 사용하면 app.module 에도 자동적으로 추가해준 것을 확인할 수 있다.

 Controller 생성

nest g co cats 로 똑같이 controller를 만들 수 있음, 간편하구만

 Service 생성

서비스도 똑같이 생성이 되었고, 잘 보면 @Injectable 어노테이션도 달려있다는 것을 확인할 수 있다. 하지만, 의존성 주입 작업이 필요하다.

 controller에 service 주입

import { Controller } from '@nestjs/common'; import { CatsService } from './cats.service'; @Controller('cats') export class CatsController { constructor(private readonly catsService: CatsService) {} }
JavaScript
복사
생성자를 만들어서 주입한다.

 메소드 생성

import { Controller, Delete, Get, Patch, Post, Put } from '@nestjs/common'; import { CatsService } from './cats.service'; @Controller('cats') export class CatsController { constructor(private readonly catsService: CatsService) {} // localhost:8000/cats @Get() getAllCat() { return 'all cat'; } // localhost:8000/cats/:id @Get(':id') getOneCat() { return 'one cat'; } @Post() createCat() { return 'create cat'; } @Put(':id') updateCat() { return 'update cat'; } @Patch(':id') updatePartialCat() { return 'update partial cat'; } @Delete(':id') deleteCat() { return 'delete cat'; } }
JavaScript
복사
→ 전체적인 기본 메소드를 세팅하였다. → 컨트롤러가 cats로 명시가 되어있으면 기본적으로 URL는 localhost:8000/cats 로 요청을 받게 된다. → 컨트롤러 메소드에 :id 명시가 되어있으면, URL는 localhost:8000/cats/:id 로 요청을 받게 된다.

 Users 생성

users 도메인으로 Module, Controller, Service 를 생성해준다.

 app.module

CLI로 users를 만들었다면, 자동으로 appModule에 각각의 Module이 등록이 된 것을 확인할 수 있다.
이렇게 AppModule에서 다른 모듈들을 관리할 수 있는 구조가 되었다.
이 구조에서는 AppController나 AppService에서 임포트된 모듈의 서비스들을 사용할 수 있게 된다.

 Module 데코레이터에서 설정가능한 것들

1. providers 이 모듈 내에서 사용될 서비스, 리포지토리 등을 정의하며, NestJS의 인젝터에 의해 인스턴스화되어 모듈 내에서 공유될 수 있습니다. 2. controllers 이 모듈에 정의된 컨트롤러들을 지정하며, 이 컨트롤러들은 인스턴스화되어 HTTP 요청을 처리하게 됩니다. 3. imports 이 모듈에서 필요한 providers를 제공하는 다른 모듈들을 가져오는 데 사용됩니다. 4. exports 이 모듈에서 제공하는 providers 중 다른 모듈에서도 사용 가능하도록 내보내고 싶은 것들을 지정합니다.
JavaScript
복사

 exports 추가 설명

공식문서에는 providersms 기본적으로 캡슐화를 하기 때문에, 해당 모듈 내에서만 사용가능하다. 그래서 exports를 하지 않는 한 사용할 수 없다고 한다. 이런 식으로 exports를 해줘야 전역적으로 사용이 가능하다.