node.js에 기반을 둔 웹 API 프레임워크로, Express
랑 Fastify
를 래핑하면서 동작한다.
node.js의 유연함을 그대로 가지면서, 프레임워크안에 좋은 기술들을 이미 구현해둔 친구,
NestJS 설치하면 Express를 사용함
아무래도 Express가 node를 이용한 친구들 중에 가장 널리 사용되고 있는데, 거기 미들웨어들 엄청 많이 호환이 된다.
Node
- Node는 손쉽게 사용하고 뛰어난 확장성이 있지만,
너무 유연해서 결과물 품질이 일정하지 않고, 각 라이브러리를 찾는 시간이 오래걸리는 단점이 있는데,Nest
- 그에 반해 NestJS는
DB
,객체관계매핑
,ORM
,설정(configuration)
,유효성 검사
등등 기능들을 기본 제공한다.- 필요한 라이브러리는 npm같은거로 설치해 기능 확장이 가능한 node의 장점을 그대로 가진다.
- NestJS는 모듈/컴포넌트 기반으로 프로그램을 작성해서 재사용성이 높아서 협업할 때 엥간함.
- 타입스크립트가 기본임
> npm i -g @nestjs/cli
설치 후 프로젝트 만들기
nest new project-name
이러면 파일이 생성되고 시작이 가능하다.
아니면 NestJS공식 예제 스타터 프로젝트로 클론해서 시작해도 된다.
너무도 친절한 프레임워크인듯
> git clone https://github.com/nestjs/typescript-starter.git 프로젝트명
> cd 프로젝트면
> npm install
> npm run start:dev
개발 시에는 npm run start보다 npm run start:dev를 이용해서 사용하는게 좋다.
scr폴더 내의 구조를 보면 각각
app.controller.ts
: 단일 경로가 있는 기본적인 컨트롤러app.controller.spec.ts
: 컨트롤러 단위 테스트app.module.ts
: 루트 모듈app.service.ts
: 단일 메서드를 사용하는 기본 서비스main.ts
: NestFactory핵심 기능을 사용하여 Nest 애플리케이션 인스턴스를 생성하는 애플리케이션의 엔트리 파일역할을 한다.
main.ts의 bootstrap을 보면 3000번 포트로 실행하는 것을 알 수 있다.
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
}
bootstrap();
Nest 앱 인스턴스를 생성하기 위해서 NestFactory
클래스를 사용한다.
NestFactory는 몇가지 정적 메서드를 제공하는데,
위 create()
는 인터페이스를 충족하는 응용프로그램 개체를 반환한다.
쉽게말해서 걍 저거쓰면 앱 생성되고 서버 열수있다는거임 ㅇㅇ
controller
에서 -> 요청 DTO 유효성 검사service
에서 비즈니스 로직 수행 (예외처리 응답)repository
에서 db
관련 작업controller
로 반환 -> 응답 DTOnest는 걍 모든지 모듈이다. node랑 똑같음 ㅇㅇ
가장 메인 모듈인데, todoAPP이라고 치면
User, Todo, Category 뭐 이런거 의 모듈이 포함된다.
이 모듈들이 app모듈에서 하나로 진행됨