[javascript] Express.js에서의 API 버전 관리 방법

API는 애플리케이션과 서비스 간의 통신을 위한 중요한 요소입니다. API 버전 관리는 API의 호환성과 안정성을 유지하기 위해 중요합니다. 이번 게시물에서는 Express.js에서 API 버전 관리를 어떻게 할 수 있는지 알아보겠습니다.

1. URL 기반 버전 관리

가장 일반적인 방법은 URL을 통한 버전 관리입니다. 예를 들어, API의 버전을 v1, v2와 같이 URL에 추가하여 처리할 수 있습니다. Express.js에서는 express.Router를 사용하여 각 버전별로 별도의 라우터를 정의할 수 있습니다.

const express = require('express');
const app = express();

const v1Router = express.Router();
const v2Router = express.Router();

// v1 버전 API 라우터 정의
v1Router.get('/users', (req, res) => {
   // v1 API 로직 처리
});

// v2 버전 API 라우터 정의
v2Router.get('/users', (req, res) => {
   // v2 API 로직 처리
});

app.use('/v1', v1Router);
app.use('/v2', v2Router);

app.listen(3000, () => {
   console.log('서버가 3000 포트에서 실행 중입니다.');
});

위의 코드에서 /v1 경로는 v1 버전의 API를, /v2 경로는 v2 버전의 API를 처리합니다.

2. 헤더 기반 버전 관리

다른 방법으로, HTTP 요청의 헤더를 사용하여 API 버전을 지정할 수도 있습니다. 이 방법은 URL에 API 버전을 추가하는 방법보다 더 유연하고 간결한 구현이 가능합니다.

const express = require('express');
const app = express();

app.get('/users', (req, res) => {
   const apiVersion = req.header('X-API-Version');

   if (apiVersion === '1.0') {
      // v1 API 로직 처리
   } else if (apiVersion === '2.0') {
      // v2 API 로직 처리
   }
});

app.listen(3000, () => {
   console.log('서버가 3000 포트에서 실행 중입니다.');
});

위의 코드에서 X-API-Version 헤더를 사용하여 요청의 API 버전을 지정합니다. 이를 통해 클라이언트 측에서 API 버전을 선택적으로 지정할 수 있습니다.

3. 패키지 기반 버전 관리

마지막으로, Express.js 애플리케이션을 여러 개의 패키지로 분리하여 API 버전 관리를 할 수도 있습니다. 각 패키지는 고유한 API 버전에 대한 로직을 포함하며, 애플리케이션의 의존성으로 설치할 수 있습니다.

// app-v1.js
const express = require('express');
const app = express();

app.get('/users', (req, res) => {
   // v1 API 로직 처리
});

module.exports = app;

// app-v2.js
const express = require('express');
const app = express();

app.get('/users', (req, res) => {
   // v2 API 로직 처리
});

module.exports = app;

위와 같이 v1과 v2에 대한 별도의 Express 애플리케이션 파일을 작성하고, 필요한 경우 npm을 사용하여 패키지로 설치하고 버전에 따라 애플리케이션을 실행하면 됩니다.

결론

Express.js에서 API 버전 관리를 위해 URL, 헤더, 패키지를 활용하는 방법을 살펴보았습니다. 각각의 방법은 장단점이 있으며, 프로젝트의 요구사항에 맞게 적절한 방식을 선택할 수 있습니다. API 버전 관리는 중요한 주제이므로 신중하게 고려하여야 합니다.

참고 자료: