Node.js 및 Express로 서버 캐싱을 구현하는 방법


Node.js 및 Express를 사용하여 서버를 개발하는 경우 캐싱을 구현하여 서버 응답 속도를 높일 수 있습니다.

이 기사에서는 Node.js 및 Express로 서버 캐싱을 구현하는 방법을 보여줍니다.

1. 노드 캐시 모듈로 메모리 캐싱을 구현하는 방법

노드 캐시는 Node.js에서 사용할 수 있는 메모리 캐시 모듈입니다. 노드 캐시로 캐시를 구현하면 서버 응답 속도를 높일 수 있습니다.

먼저 노드 캐시 모듈을 설치하십시오.

npm install node-cache --save

다음에, 노드 캐시 모듈로 캐시를 구현하십시오. 아래 예제 코드는 노드 캐시 모듈의 사용 getUser 함수의 결과가 캐시되는 방법을 보여줍니다.

const NodeCache = require('node-cache');
const cache = new NodeCache({ stdTTL: 60, checkperiod: 120 });

function getUser(userId, callback) {
  const cacheKey = `user-${userId}`;
  const cachedUser = cache.get(cacheKey);
  if (cachedUser) {
    console.log(`Cache hit: ${userId}`);
    callback(null, cachedUser);
  } else {
    console.log(`Cache miss: ${userId}`);
    // fetch user data from database or external API
    // ...
    const userData = { name: 'John Doe', email: '[email protected]' };
    // cache user data
    cache.set(cacheKey, userData);
    callback(null, userData);
  }
}

위의 샘플 코드에서 캐시는 getUser 함수에서 노드 캐시 모듈을 사용하여 구현됩니다. cacheKey 변수는 캐시의 키 값을 나타냅니다. cache.get(cacheKey) 메서드를 사용하여 캐시에 데이터가 있는지 확인하고, 캐시에 데이터가 있으면 cachedUser 변수에 저장합니다. 캐시에 데이터가 없으면 getUser 함수는 데이터를 검색하고 cache.set(cacheKey, userData) 메서드를 사용하여 데이터를 저장합니다.

2. HTTP 응답 헤더를 사용하여 서버 캐싱을 구현하는 방법

HTTP 응답 헤더를 사용하여 서버 캐싱을 구현할 수도 있습니다. 예를 들어 Cache-Control 헤더를 사용하여 캐싱을 제어할 수 있습니다. 다음 샘플 코드는 Cache-Control 헤더를 사용하여 캐시를 구현하는 방법을 보여줍니다.

app.get('/api/users/:id', (req, res) => {
  const userId = req.params.id;
  const userData = { name: 'John Doe', email: 'john.d

편리한 캐싱 기능은 서버 성능 향상에 큰 도움이 됩니다. Node.js에서는 Express와 같은 프레임워크를 사용하여 캐싱을 쉽게 구현할 수 있습니다. 이번에는 Node.js Express에서 캐싱이 어떻게 이루어지는지 살펴보겠습니다.

3. Express의 캐싱 기능 사용하기

Express에서 캐싱을 구현하는 가장 쉬운 방법 중 하나는 메모리 캐시 엔진을 사용하는 것입니다. 메모리 캐시 엔진은 캐시된 데이터를 메모리에 저장하므로 서버가 다시 시작될 때 모든 캐시가 지워집니다.

다음은 메모리 캐시 모듈을 사용하여 간단한 캐싱 미들웨어를 만드는 샘플 코드입니다.

const cache = require('memory-cache');

function cacheMiddleware(duration) {
  return (req, res, next) => {
    const key = '__express__' + req.originalUrl || req.url;
    const cachedBody = cache.get(key);

    if (cachedBody) {
      res.send(cachedBody);
      return;
    } else {
      res.sendResponse = res.send;
      res.send = (body) => {
        cache.put(key, body, duration * 1000);
        res.sendResponse(body);
      };
      next();
    }
  };
}

이 미들웨어는 일정 시간 동안 캐싱하고 들어오는 요청마다 캐시에 데이터가 있는지 확인합니다. 캐시에 데이터가 있으면 즉시 데이터를 반환하고, 캐시에 데이터가 없으면 원래 요청을 처리하고 응답을 캐시합니다.

이제 이 캐싱 미들웨어를 Express 앱에 적용해 보겠습니다.

const express = require('express');
const cache = require('memory-cache');
const app = express();

function cacheMiddleware(duration) {
  return (req, res, next) => {
    const key = '__express__' + req.originalUrl || req.url;
    const cachedBody = cache.get(key);

    if (cachedBody) {
      res.send(cachedBody);
      return;
    } else {
      res.sendResponse = res.send;
      res.send = (body) => {
        cache.put(key, body, duration * 1000);
        res.sendResponse(body);
      };
      next();
    }
  };
}

// 라우터를 등록합니다.
app.get('/', cacheMiddleware(10), (req, res) => {
  res.send('Hello World!');
});

// 서버를 실행합니다.
app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

위의 코드에서 / 루트 경로에 캐싱 미들웨어가 적용되었습니다. 기간 인수로 10을 전달하면 이 경로의 응답이 10초 동안 캐시됩니다.