[javascript] Express.js에서의 캐시 관리 방법

Express.js는 Node.js를 기반으로 한 웹 애플리케이션 개발을 위한 강력한 프레임워크입니다. 캐싱은 웹 애플리케이션의 성능을 향상시키는 중요한 요소입니다. Express.js에서는 다양한 방법을 통해 캐시를 관리할 수 있습니다.

정적 파일 캐싱

Express.js는 정적 파일을 캐싱하는 기능을 제공합니다. 정적 파일이란 이미지, CSS, JavaScript 등과 같이 변경되지 않는 파일을 말합니다. 이러한 정적 파일을 효율적으로 제공하기 위해 Express.js는 express.static 미들웨어를 제공합니다.

app.use(express.static('public'));

위의 코드는 public 디렉토리에 있는 정적 파일을 제공합니다. 캐시 헤더를 설정하지 않으면 기본적으로 파일이 변경되지 않았을 때 클라이언트에게 캐시된 버전을 제공합니다. 즉, 클라이언트는 다시 서버로 요청하지 않고 캐시된 파일을 사용할 수 있습니다. 따라서 정적 파일을 변경할 때는 파일 이름을 바꾸거나 URL을 변경하는 방법을 고려해야 합니다.

메모리 캐싱

Express.js에서는 메모리를 사용하여 데이터를 캐싱하는 방법도 있습니다. 많은 데이터를 빠르게 액세스해야 할 때 유용합니다. 예를 들어, 데이터베이스에서 가져온 결과를 캐시하는 경우입니다.

const cache = {};

app.get('/data', (req, res) => {
  if (cache.hasOwnProperty('data')) {
    // 캐시된 데이터를 사용
    res.json(cache.data);
  } else {
    // 데이터베이스에서 데이터 가져오기
    const data = fetchDataFromDatabase();
    
    // 데이터를 캐시에 저장
    cache.data = data;
    
    res.json(data);
  }
});

위의 코드는 /data 경로로 들어오는 GET 요청을 처리합니다. 요청이 들어올 때마다 캐시를 확인하고 캐시된 데이터가 있다면 이를 사용하여 클라이언트에게 응답합니다. 캐시된 데이터가 없는 경우 데이터베이스에서 데이터를 가져온 후에 캐시에 저장하고 클라이언트에게 응답합니다. 이렇게 함으로써 데이터베이스에 대한 요청 횟수를 줄일 수 있습니다.

외부 캐싱 서비스 사용

Express.js에서는 외부 캐싱 서비스를 사용하여 캐시를 관리할 수도 있습니다. 대표적인 예로 Redis를 사용하는 방법이 있습니다. Redis는 인메모리 데이터 저장소로 매우 빠른 캐싱을 제공합니다. 이를 활용하여 Express.js 애플리케이션의 캐시를 효과적으로 관리할 수 있습니다.

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

app.get('/data', (req, res) => {
  cache.get('data', (err, reply) => {
    if (reply) {
      // 캐시된 데이터를 사용
      res.json(JSON.parse(reply));
    } else {
      // 데이터베이스에서 데이터 가져오기
      const data = fetchDataFromDatabase();
      
      // 데이터를 캐시에 저장
      cache.set('data', JSON.stringify(data));
      
      res.json(data);
    }
  });
});

위의 코드는 Redis를 사용하여 /data 경로로 들어오는 GET 요청을 처리합니다. Redis의 get 메소드를 사용하여 캐시를 확인하고 캐시된 데이터가 있다면 이를 사용하여 클라이언트에게 응답합니다. 캐시된 데이터가 없는 경우 데이터베이스에서 데이터를 가져온 후에 Redis에 저장하고 클라이언트에게 응답합니다. 이렇게 함으로써 데이터베이스에 대한 요청 횟수를 줄이고 효과적인 캐싱을 구현할 수 있습니다.

Express.js에서 제공하는 캐시 관리 방법은 다양한 상황에 대응할 수 있도록 유연성을 제공합니다. 적절한 캐시 전략을 선택하여 웹 애플리케이션의 성능을 향상시킬 수 있습니다.

참고 자료: