[nodejs] 캐시와 성능 향상

이번 글에서는 Node.js를 사용하여 웹 애플리케이션의 성능을 향상시킬 수 있는 캐싱 기술에 대해 알아보겠습니다. 캐싱은 빠른 응답 시간과 높은 성능을 제공하는 데 중요한 역할을 합니다.

1. 캐싱의 개념

캐싱은 이전에 계산된 값을 저장해 두었다가 나중에 동일한 요청이 들어왔을 때 빠르게 결과를 반환하는 기술입니다. 이를 통해 매번 데이터를 다시 계산하거나 가져오지 않아도 되기 때문에 응답 시간을 줄이고 성능을 향상시킬 수 있습니다.

2. Node.js를 이용한 메모리 캐싱

Node.js에서 메모리 캐싱을 구현하려면 Map이나 Object를 사용하여 값을 저장하고 필요할 때마다 이를 조회하는 방식을 사용할 수 있습니다. 다음은 간단한 메모리 캐싱의 예시입니다.

const cache = new Map();

function fetchDataFromDatabase(id) {
  // 데이터를 데이터베이스에서 가져오는 비용이 큰 연산
  return data;
}

function getCachedData(id) {
  if (cache.has(id)) {
    return cache.get(id);
  }
  const data = fetchDataFromDatabase(id);
  cache.set(id, data);
  return data;
}

위 코드에서는 Map을 사용하여 데이터를 캐싱하고, 이미 캐싱된 데이터가 있을 경우 캐시된 값을 반환하고, 그렇지 않을 경우 데이터를 데이터베이스에서 가져와 캐시에 저장한 후 반환합니다.

3. Redis를 이용한 외부 캐싱

외부 캐싱을 사용하면 여러 서버 간에 캐시를 공유할 수 있고, 서버가 종료되더라도 캐시 데이터가 유지될 수 있습니다. Redis는 메모리 기반의 키-값 저장소로서 Node.js에서 많이 사용되는 외부 캐싱 기술 중 하나입니다.

다음은 Node.js에서 Redis를 이용한 외부 캐싱의 예시입니다.

const redis = require('redis');
const client = redis.createClient();

function getCachedDataFromRedis(id, callback) {
  client.get(id, (err, data) => {
    if (err) throw err;
    if (data) {
      callback(data);
    } else {
      const newData = fetchDataFromDatabase(id);
      client.setex(id, 3600, JSON.stringify(newData));
      callback(newData);
    }
  });
}

위 코드에서는 redis 모듈을 사용하여 Redis 서버에 접속하고, get 메서드를 통해 캐시된 데이터를 조회하거나 setex 메서드를 통해 데이터를 캐싱합니다.

결론

Node.js를 이용하여 캐싱을 구현하면 웹 애플리케이션의 성능을 향상시킬 수 있습니다. 메모리 캐싱을 사용하면 간편하게 구현할 수 있고, 외부 캐싱을 통해 여러 서버 간에 캐시를 공유할 수 있습니다. 적절한 캐싱 전략을 선택하여 성능을 향상시키는 것이 중요합니다.

참고 문헌: