효율적이고 확장 가능한 node.js 서버 측 애플리케이션을 구축하기 위한 프레임워크
Express(기본값)와 같은 강력한 HTTP 서버 프레임워크를 사용하며 선택적으로 Fastify로 구성할 수 있음.
npm i -g @nestjs/cli
nest new project-name

@Module() 데코레이터로 주석이 달린 클래스.
각 애플리케이션은 최소 하나의 모듈이 필요
모듈은 기본적으로 싱글톤으로 여러 모듈가느이 쉽게 공유할 수 있음.
nest g module boards
하면 모듈 저절로 생성되며 app.module.ts 에 module 저절로 추가됨.
들어오는 요청을 처리 및 클라이언트에 응답을 반환해줌.

@Controller 데코레이터로 정의
핸들러는 @Get, @Post,@Delete 등 메서드에 붙여주는 것
@Get()
findAll(): string {
return 'This action returns all cats';
}
nest g controller boards --no-spec
cli 입력 시 저절로 module에 포함됨.
import { Module } from '@nestjs/common';
import { BoardsModule } from './boards/boards.module';
import { BoardsController } from './boards/boards.controller';
@Module({
imports: [BoardsModule],
controllers: [BoardsController]
})
export class AppModule { }
프로바이더는 Nest의 기본개념.
서비스,리포지토리,팩토리 등 프로바이더로 취급될 수 있음. 객체는 서로 다양한 관게를 만들 수 있으며 객체의 인스턴스를 연결하는 기능은 Nest 런타임에 위임될 수 있음.
@Injectable 데코레이터로 감싸져 제공.
이 서비스는 애플리케이션 전체에서 사용가능.

@Controller('cats')
export class CatsController {
constructor(private catsService: CatsService) {}
@Post()
async create(@Body() createCatDto: CreateCatDto) {
this.catsService.create(createCatDto);
}
@Get()
async findAll(): Promise<Cat[]> {
return this.catsService.findAll();
}
}
위와 같이 constructor 에 service를 주입해 서비스에 있는 메서드를 사용할 수 있음.
서비스 안에서는 주로 데이터베이스 관련 로직을 처리함.즉 주요 로직 처리
nest g service boards --no-spec
module에 provider 로 service가 자동으로 추가됨.