1. Nest

1-1. Nest

nest는 node.js의 기반으로 만들어진 웹 API 프레임워크이다.

nest는 2가지의 http어댑터중 1개를 선택해 동작합니다.

  • Express : Nest의 기본 어댑터로 설정 없이 사용이 가능하다.
    • 장점
      1. 미들웨어 생태계가 좋음. (passport, multer, helmet, express-session)
      2. Express 관련된 자료가 많음.
      3. @nestjs/* 공식 패키지나 서드파티 라이브러리가 대부분 Express를 전제로 작성되어 호환 문제가 거의 없습니다.
    • 단점
      1. 낮은 처리량
      2. req/res 객체가 무거워 오버헤드가 있음.
      3. 타입 정의가 별도 @types/express 패키지로 관리되어 TS 친화도가 떨어집니다.
      4. 스키마 기반의 직렬화 같은 성능 최적화 장치가 내장되어 있지 않음.
  • Fastify :
    • 장점
      1. Express에 비해서 2배의 높은 처리량
      2. Json schema 기반의 직렬화 검증을 내장해서 응답이 빠름.
      3. Typescript 기반으로 만들어져 타입 지원이 좋음.
      4. pino logger가 내장되어 있음. (플러그인 캡슐화 구조로 의존성 격리가 명확함.)
    • 단점
      1. Express 미들웨어를 사용하지 못함.
      2. 생태계가 적어서 플러그인이 없는 경우가 많음
      3. nest는 Express 기준으로 문서를 작성하므로 공식 문서가 적음
      4. 정적 파일, 뷰 엔진, 파일 업로드, 쿠키 등 설정 API가 Express와 달라서 학습 곡선이 높음
      5. @Res()로 응답 객체를 직접 다룬 코드는 어댑터 교체시 수정이 필요함.

1-2. Nest의 장점

nest는 js 기반의 프레임워크로 js 특유의 자유성과 ORM 설정과 유효성 검사등 수많은 기능을 제공합니다.

장점 1. 구조가 강제된다.

Nest는 모듈, 컨트롤러, 서비스라는 정해진 구조를 따라야합니다. 인원이 많아지고 프로젝트가 커질수록 일관성 있는 시스템을 유지하기 좋음.

장점 2.DI 컨테이너가 내장되어 있다.

의존성을 생성자 파라미터로 선언하면 Nest가 주입해줍니다.

@Injectable()
export class OrderService() {
	constructor(
		private readonly orderRepo: OrderRepository,
		private readonly payment: PaymentService,
	){}
}

테스트시 Test.createTestingModule()로 특정 프로바이더만 목으로 교체하기 쉽습니다.

장점 3. 횡단 관심가 처리 도구가 정리되어 있음.

Guard(인가), Interceptor(응답 변화,로깅,캐싱), Pipe(검증, 변화), ExceptionFilter(에러 처리)

@UseGuards(JwtAuthGuard)
@UsePipes(new ValidationPipe({ whitelist: true }))
@Post()
create(@Body() dto: CreateOrderDto) {}

2. Node.js

2-1. Node.js의 특징

2-2. 이벤트 루프