자바스크립트 기반 NestJS 애플리케이션에서의 API 버전 관리 방법

API 버전 관리는 소프트웨어 개발에서 중요한 부분입니다. API 버전을 효과적으로 관리하면 사용자들에게 안정적인 API를 제공하고, 새로운 기능을 추가하거나 버그를 수정할 때에도 호환성을 유지할 수 있습니다. 이번 블로그에서는 자바스크립트 기반 NestJS 애플리케이션에서 API 버전 관리를 어떻게 할 수 있는지 알아보겠습니다.

1. URL 기반 API 버전 관리

URL 기반 API 버전 관리는 가장 보편적인 방법 중 하나입니다. 각 버전의 API는 고유한 URL을 가지며, 버전 번호를 URL 경로에 포함시킵니다. 이는 기존의 API와 새로운 API가 동시에 운영될 수 있도록 합니다.

예를 들어, v1 버전과 v2 버전의 API를 만든다고 가정해봅시다. v1의 경우 /api/v1 경로를 사용하고, v2의 경우 /api/v2 경로를 사용할 수 있습니다. 따라서 사용자는 기존 API를 사용하거나 새로운 API를 사용할 수 있게 됩니다.

// app.module.ts
import { Module } from '@nestjs/common';
import { UsersController } from './users/users.controller';
import { UsersService } from './users/users.service';

@Module({
  imports: [],
  controllers: [UsersController],
  providers: [UsersService],
})
export class AppModule {}

2. 컨트롤러 기반 API 버전 관리

컨트롤러 기반 API 버전 관리는 URL 기반 API 버전 관리와 유사하지만, 더 세분화된 관리가 가능합니다. 각 API 버전에 대해 별도의 컨트롤러를 생성하고, 필요한 API 엔드포인트를 해당 컨트롤러에 구현합니다.

예를 들어, v1 버전과 v2 버전의 API를 제공하는 애플리케이션을 만든다고 가정해봅시다. v1의 경우 users/v1 경로로 접근할 수 있고, v2의 경우 users/v2 경로로 접근할 수 있습니다. 이렇게 함으로써 각각의 버전에 대해 독립적인 컨트롤러를 관리하고 유지할 수 있습니다.

// users/v1/users.controller.ts
import { Controller, Get } from '@nestjs/common';

@Controller('users/v1')
export class UsersControllerV1 {
  @Get()
  getUsers() {
    // v1 버전의 사용자 목록 조회 로직
  }
}

// users/v2/users.controller.ts
import { Controller, Get } from '@nestjs/common';

@Controller('users/v2')
export class UsersControllerV2 {
  @Get()
  getUsers() {
    // v2 버전의 사용자 목록 조회 로직
  }
}

3. 헤더 기반 API 버전 관리

헤더 기반 API 버전 관리는 URL에 버전 정보를 넘기는 대신, HTTP 요청 헤더에 버전 정보를 포함시킵니다. 이를 통해 클라이언트 및 서버 간의 버전 관리가 더욱 유연해집니다.

예를 들어, Accept-Version 헤더를 사용하여 API 버전을 지정할 수 있습니다. 클라이언트는 요청을 보낼 때 해당 헤더를 포함시키고, 서버는 해당 헤더를 확인하여 적절한 API 버전을 제공합니다.

// users.controller.ts
import { Controller, Get, Headers } from '@nestjs/common';

@Controller('users')
export class UsersController {
  @Get()
  getUsers(@Headers('accept-version') version: string) {
    if (version === '1.0') {
      // v1 버전의 사용자 목록 조회 로직
    } else if (version === '2.0') {
      // v2 버전의 사용자 목록 조회 로직
    } else {
      // 지원하지 않는 버전 처리
    }
  }
}

마치며

이번 블로그에서는 자바스크립트 기반 NestJS 애플리케이션에서의 API 버전 관리 방법에 대해 알아보았습니다. URL 기반, 컨트롤러 기반, 헤더 기반의 세 가지 방식을 소개했으며, 각각의 장단점을 고려하여 적절한 방법을 선택해야 합니다. 올바른 API 버전 관리를 통해 안정성과 호환성을 유지하고, 사용자에게 원활한 API 이용 경험을 제공할 수 있습니다.

참고자료