[Nest.js] API 버전 관리하는 3가지 방법 - URI, Header, Media Type

궁금하면 500원·2024년 8월 18일
0

Nest.js에서 API 버전 관리는 주로 Uri, Header, 그리고 Media Type을 통해 구현할 수 있습니다.
각각의 버전 관리 방식은 다음과 같이 설정할 수 있습니다.

1. URI Versioning

URI 버전 관리는 경로를 통해 API 버전을 전달하는 방법으로, /v1/movie 같은 방식입니다.
NestFactory에서 버전 설정을 위해 VersioningType.URI를 사용합니다.

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { VersioningType } from '@nestjs/common';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);

  app.enableVersioning({
    type: VersioningType.URI,
  });

  await app.listen(3000);
}
bootstrap();

이후 컨트롤러에 버전을 지정하여 사용할 수 있습니다.

import { Controller, Get } from '@nestjs/common';

@Controller({ path: 'movie', version: '1' })
export class MovieController {
  @Get()
  getMoviesV1() {
    return 'This is version 1 of movie API';
  }
}

@Controller({ path: 'movie', version: '2' })
export class MovieControllerV2 {
  @Get()
  getMoviesV2() {
    return 'This is version 2 of movie API';
  }
}

2. Header Versioning

Header 버전 관리는 요청 헤더에 버전 정보를 포함시키는 방식입니다.

NestFactory에서 VersioningType.HEADER를 사용하고,
기본 헤더 키는 Custom-Header로 설정 가능합니다.

app.enableVersioning({
  type: VersioningType.HEADER,
  header: 'version',  // 사용자 정의 헤더 키
});

3. Media Type Versioning

Media Type 버전 관리는 Accept 헤더의 Media Type에 버전을 추가하여 관리하는 방식입니다.

VersioningType.MEDIA_TYPE을 통해 설정하며, API 호출 시 Accept: application/json;v=1 형식으로 요청합니다.

app.enableVersioning({
  type: VersioningType.MEDIA_TYPE,
  key: 'v',
});

이렇게 설정한 후 각 컨트롤러에서 특정 버전을 지정해 요청에 따라 처리할 수 있습니다.

profile
꾸준히, 의미있는 사이드 프로젝트 경험과 문제해결 과정을 기록하기 위한 공간입니다.

0개의 댓글