직접 구현하여 보기
1. node.js 가 기본적으로 설치되어 있어야 함
2. nest.js 클라이언트가 설치되어 있어야 함 ( > npm i @nestjs/cli )
위에서 nest new [project_name]을 통해 생성된 폴더 구조에서 처음부터 구현해보기 위해 app.service.ts, app.controller.ts, app.controller.spec.ts 파일과 test폴더는 지워주고, app.module.ts파일에서는 controllers와 providers 부분을 지워준다.
// app.module.ts 파일
import { Module } from '@nestjs/common';
@Module({
})
export class AppModule {}
3. 모듈 생성
// nest에서는 기본적으로 명령어를 통해 컨틀롤러나 서비스 파일을 생성한다.
> nest g module boards
nest : using nestcli. // nest 클라이언트를 사용하겠다.
g : generate // 생성
module : schematic that i want to create. // 어떤 유형의 것을 생성할 것이다. 하나의 모듈 폴더를 생성
boards : name of the schematic. // 명칭
위의 명령어 실행시 boards.module.ts 파일이 존재하는 boards라는 폴더가 생성된다.
4. 모듈 폴더에 컨트롤러 생성
> nest g controller boards --no-spce
nest: nestcli를 사용하겠다.
g : 생성하겠다.
boards : 생성할 때 명칭
--no-spce : 옵션으로, 해당 컨트롤서 파일을 생성할 때 테스트를 위한 소스 코드 파일은 생성하지 않을 것임을 의미한다.
위의 명령어 실행시 boards 폴더에 boards.controller.ts 파일이 생성되고, boards.module.ts 파일에는 해당 컨트롤러 사용을 위한 설정 코드가 추가된다.
boards.controller.ts 파일이 생성됨
import { Controller } from '@nestjs/common';
@Controller('boards')
export class BoardsController {}
boards.module.ts 파일에 BoardsController 사용을위한 설정 코드가 추가됨
import { Get, Module } from '@nestjs/common';
import { BoardsController } from './boards.controller';
@Module({
controllers: [BoardsController],
// 바로 위의 코드줄이 추가된 부분이다. 해당 모듈의 controller로 사용하겠다고 명시해주는 것이다.
})
export class BoardsModule {
}
5. 모듈 안에서 실질적인 서비스 로직을 담당한 서비스 파일 생성
> nest g service boards --no-spce
위의 명령어 실행시 서비스 파일을 생성하여 준다.
boards.service.ts
import { Injectable } from '@nestjs/common';
@Injectable()
export class BoardsService {}
명령어를 통해 기본적인 세팅을 한다.
boards.module.ts
import { Module } from '@nestjs/common';
import { BoardsController } from './boards.controller';
import { BoardsService } from './boards.service';
@Module({
controllers: [BoardsController],
providers: [BoardsService]
// nest g service boards --no-spec 명령어를 통해 추가된 코드부분이다.
// 해당 모듈에서 해당 서비스를 사용할 것임을 의미한다.
})
export class BoardsModule {
}
디렉토리의 루트 경로에 위치한 app.module.ts 파일 코드는 아래와 같다. 사용되는 모듈을 등록해주거나, 프로젝트 전체에 적용하는 부분에 대한 설정을 해준다.
import { Module } from '@nestjs/common';
import { BoardsModule } from './boards/boards.module';
@Module({
imports: [
BoardsModule,
]
})
export class AppModule {}
6. 서비스를 컨트롤러 파일에서 사용할 수 있도록 종속성 주입 (Dependency Injection)
컨트롤러 클래스의 constructor(){}를 통해 주입한다.
import { Controller, Get } from '@nestjs/common';
import { BoardsService } from './boards.service';
@Controller('boards')
export class BoardsController {
constructor(private boardsService : BoardsService) {}
// 해당 기능을 사용하기 위해서는 this.boardsService.[함수명 or 변수명 등등] 으로 사용한다.
}
// private은 접근제한자
// * 접근제한자 : public, protected, private
// private -> boardsService가 해당 클래스내에서만 사용 가능함을 의미한다.
위의 부분은 컨트롤러에서 서비스로부터 종속성을 제공받은 것이고
서비스는 아래와 같이 @Injectable을 통해 종속성을 제공해야 한다.
import { Injectable } from '@nestjs/common';
import { Board, BoardStatus } from './board.model';
@Injectable()
export class BoardsService {
}
// @Injectable()데코레이터를 통해 다른 컴포넌트에서 해당 클래스를 사용가능하게 해준다.
// 다른 컴포넌트에서는 해당 클래스를 사용하기 위해 바로 위의 코드에서 constructor부분에서와 같이 작성해주어야 한다.
또한 추가적으로 module파일에서 아래와 같이 providers에 대한 설정도 해주어야 한다.
import { Get, Module } from '@nestjs/common';
import { BoardsController } from './boards.controller';
import { BoardsService } from './boards.service';
@Module({
controllers: [BoardsController],
providers: [BoardsService]
// 이와 같이 설정해주어야 함
})
export class BoardsModule {
}
출처
https://www.youtube.com/watch?v=3JminDpCJNE&t=18396s
'Javascript > Node.js' 카테고리의 다른 글
[ Node.js ] - node-cron 활용하여 스케줄러 작동시키기 (0) | 2022.07.27 |
---|---|
[ Javascript ] - Nest Js controller 구현하기 (0) | 2022.07.13 |
[ NestJs ] - NestJs란? (0) | 2022.06.15 |
[ Node.js ] - iamport를 사용해서 pg사 연동해보기 (0) | 2022.06.15 |
[ Node.js ] - node.js란? ( + 기본 코드 ) (0) | 2022.06.10 |