Nest.js 모듈 생성하기 (Controller, Service)
게시판을 만들기 위해 먼저 게시글 Board 모듈을 생성해보겠다.
nest cli 를 이용해서 생성해줄 수 있다.
// nest g module 모듈명
nest g module boards
자동으로 폴더 및 파일 생성을 해주고 루트 모듈에도 임포트 된 것을 확인 할 수 있다.
모듈 안에 들어갈 controller, service, entity 등을 추가해주면 되겠다. 지금은 하나하나 추가해주고 있지만 나중에 한번에 모듈파일부터 관련된 파일들도 한번에 생성하는 명령어도 알아보겠다.
Controller 파일을 추가해주기 전에 Controller 가 하는 역할을 알아보면 들어오는 요청을 처리하고 클라이언트에 그 응답을 반환하는 역할을 한다.
Controller 안에 Handler가 존재하는데 핸들러는 @Get, @Post, @Delete 등과 같은 데코레이터로 장식 된 메서드다.
Controller를 생성해주려면
nest g controller boards --no-spec
// --no-spec 테스트를 위한 코드 생성 x
// board.controller.ts 파일 생성 및 board.module.ts에 자동 임포트
import { Module } from '@nestjs/common';
import { BoardsController } from './boards.controller';
@Module({
controllers: [BoardsController],
})
export class BoardsModule {}
Service 파일을 만들어보자
Service 안에선 주로 데이터베이스 관련된 로직을 처리한다. 주로 데이터의 유효성 체크도 하고 컨트롤러에서 A 요청이 들어오고 그 응답값을 Service 파일은 A 요청 관련 값을 뽑아오는 로직을 돌고 리턴해주고 컨트롤러는 리턴된 그 값을 다시 클라이언트로 보내주는 흐름이다.
Service도 마찬가지로
nest g service boards --no-spec
만들어진 Service 파일에는 @Injectable 데코레이터가 달려 있는데 다른 컴포넌트에서도 이 서비스를 사용 할 수 있게 만들어주는 역할이다.
그럼 Board Service를 Board Controller에서 이용 할 수 있게 해주려면
import { Controller } from '@nestjs/common';
import { BoardsService } from './boards.service';
@Controller('boards')
export class BoardsController {
constructor(private boardService:BoardsService) {}
}
// 생성자 이용, Typescript 이용 private 사용