Performance

Performance

기본적으둜 NestλŠ” Express ν”„λ ˆμž„ μ›Œν¬λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. μ•žμ—μ„œ μ–ΈκΈ‰ν–ˆλ“―μ΄ NestλŠ” 예λ₯Ό λ“€μ–΄ Fastify와 같은 λ‹€λ₯Έ λΌμ΄λΈŒλŸ¬λ¦¬μ™€μ˜ ν˜Έν™˜μ„±λ„ μ œκ³΅ν•©λ‹ˆλ‹€. NestλŠ” 미듀웨어 및 ν•Έλ“€λŸ¬λ₯Ό μ μ ˆν•œ 라이브러리 νŠΉμ • κ΅¬ν˜„μœΌλ‘œ ν”„λ‘μ‹œν•˜λŠ” κΈ°λ³Έ κΈ°λŠ₯을 가진 ν”„λ ˆμž„ μ›Œν¬ μ–΄λŒ‘ν„°λ₯Ό κ΅¬ν˜„ν•˜μ—¬μ΄ ν”„λ ˆμž„ μ›Œν¬ 독립성을 λ‹¬μ„±ν•©λ‹ˆλ‹€.

info 힌트 ν”„λ ˆμž„ μ›Œν¬ μ–΄λŒ‘ν„°λ₯Ό κ΅¬ν˜„ν•˜λ €λ©΄ λŒ€μƒ λΌμ΄λΈŒλŸ¬λ¦¬κ°€ Expressμ—μžˆλŠ” 것과 μœ μ‚¬ν•œ μš”μ²­/응닡 νŒŒμ΄ν”„ 라인 처리λ₯Ό μ œκ³΅ν•΄μ•Όν•©λ‹ˆλ‹€.

FastifyλŠ” Express와 μœ μ‚¬ν•œ λ°©μ‹μœΌλ‘œ 섀계 문제λ₯Ό ν•΄κ²°ν•˜κΈ° λ•Œλ¬Έμ— Nest에 μ ν•©ν•œ λŒ€μ²΄ ν”„λ ˆμž„ μ›Œν¬λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ FastifyλŠ” Express보닀 λΉ λ₯΄κΈ° λ•Œλ¬Έμ— 벀치 마크 κ²°κ³Όκ°€ 거의 2 λ°° ν–₯μƒλ©λ‹ˆλ‹€. μ μ ˆν•œ μ§ˆλ¬Έμ€ Nestκ°€ Expressλ₯Ό κΈ°λ³Έ HTTP κ³΅κΈ‰μžλ‘œ μ‚¬μš©ν•˜λŠ” μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ? κ·Έ μ΄μœ λŠ” Expressκ°€ 널리 μ‚¬μš©λ˜κ³  있으며, Nest μ‚¬μš©μžκ°€ μ¦‰μ‹œ μ‚¬μš©ν•  μˆ˜μžˆλŠ” κ΄‘λ²”μœ„ν•œ ν˜Έν™˜ κ°€λŠ₯ν•œ 미듀웨어 μ„ΈνŠΈκ°€ 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜ NestλŠ” ν”„λ ˆμž„ μ›Œν¬ 독립성을 μ œκ³΅ν•˜λ―€λ‘œ 이듀간에 μ‰½κ²Œ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 맀우 λΉ λ₯Έ μ„±λŠ₯에 높은 κ°€μΉ˜λ₯Ό λΆ€μ—¬ ν•  λ•Œ Fastifyκ°€ 더 λ‚˜μ€ 선택이 될 수 μžˆμŠ΅λ‹ˆλ‹€. Fastifyλ₯Ό ν™œμš©ν•˜λ €λ©΄ 이 μ±•ν„°μ—μ„œμ™€ 같이 λ‚΄μž₯된 FastifyAdapterλ₯Ό μ„ νƒν•˜μ‹­μ‹œμ˜€.

Installation

λ¨Όμ € ν•„μš”ν•œ νŒ¨ν‚€μ§€λ₯Ό μ„€μΉ˜ν•΄μ•Όν•©λ‹ˆλ‹€.

$ npm i --save @nestjs/platform-fastify

Adapter

Fastify ν”Œλž«νΌμ΄ μ„€μΉ˜λ˜λ©΄ FastifyAdapterλ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

// src/main.ts
import { NestFactory } from '@nestjs/core';
import {
  FastifyAdapter,
  NestFastifyApplication,
} from '@nestjs/platform-fastify';
import { ApplicationModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create<NestFastifyApplication>(
    ApplicationModule,
    new FastifyAdapter()
  );
  await app.listen(3000);
}
bootstrap();

기본적으둜 FastifyλŠ” localhost 127.0.0.1 μΈν„°νŽ˜μ΄μŠ€μ—μ„œλ§Œ μˆ˜μ‹ ν•©λ‹ˆλ‹€ (더 읽기). λ‹€λ₯Έ ν˜ΈμŠ€νŠΈμ—μ„œ 연결을 μˆ˜λ½ν•˜λ €λ©΄ listen() ν˜ΈμΆœμ—μ„œ '0.0.0.0'을 지정해야 ν•©λ‹ˆλ‹€.

async function bootstrap() {
  const app = await NestFactory.create<NestFastifyApplication>(
    ApplicationModule,
    new FastifyAdapter()
  );
  await app.listen(3000, '0.0.0.0');
}

Platform specific packages

FastifyAdapterλ₯Ό μ‚¬μš©ν•  λ•Œ NestλŠ” HTTP 제곡자둜 Fastifyλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. 이것은 Express에 μ˜μ‘΄ν•˜λŠ” 각 λ ˆμ‹œν”Όκ°€ 더 이상 μž‘λ™ν•˜μ§€ μ•Šμ„ 수 μžˆμŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€. λŒ€μ‹  λ™λ“±ν•œ νŒ¨ν‚€μ§€λ₯Ό μ‚¬μš©ν•˜μ‹­μ‹œμ˜€.

Redirect response

FastifyλŠ” Express와 μ•½κ°„ λ‹€λ₯Έ λ¦¬λ””λ ‰μ…˜ 응닡을 μ²˜λ¦¬ν•©λ‹ˆλ‹€. Fastify둜 μ˜¬λ°”λ₯Έ λ¦¬λ””λ ‰μ…˜μ„ μˆ˜ν–‰ν•˜λ €λ©΄ λ‹€μŒκ³Ό 같이 μƒνƒœ μ½”λ“œμ™€ URL을 λͺ¨λ‘ λ°˜ν™˜ν•˜μ‹­μ‹œμ˜€.

@Get()
index (@Res() res) {
  // send 302 redirect to /login
  res.status(302).redirect('/login');
}

Fastify options

FastifyAdapter μƒμ„±μžλ₯Ό 톡해 Fastify μƒμ„±μžμ— μ˜΅μ…˜μ„ 전달할 수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€λ©΄ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

new FastifyAdapter({ logger: true });

Example

μ‹€μ œ μ‚¬λ‘€λŠ” μ—¬κΈ°μ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

Last updated