IT/NodeJS

Node.js에서 캐싱 전략 구현하기

KeepGooing 2024. 11. 30. 11:39
반응형

Node.js에서 캐싱 전략 구현하기

 

1. 인메모리 캐싱

인메모리 캐싱은 가장 간단하고 빠른 캐싱 방법 중 하나입니다. Node.js에서는 node-cache 라이브러리를 사용하여 쉽게 구현할 수 있습니다.

const NodeCache = require("node-cache");
const myCache = new NodeCache({ stdTTL: 100, checkperiod: 120 });

function getData(key) {
    const value = myCache.get(key);
    if (value === undefined) {
        // 캐시에 없으면 데이터를 가져와서 캐시에 저장
        const data = fetchDataFromSource(key);
        myCache.set(key, data);
        return data;
    }
    return value;
}
        

이 방법은 단일 서버 환경에서 효과적이지만, 분산 환경에서는 한계가 있습니다.

2. Redis를 이용한 분산 캐싱

Redis는 인메모리 데이터 구조 저장소로, 분산 환경에서 효과적인 캐싱 솔루션을 제공합니다.

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

async function getDataWithRedis(key) {
    return new Promise((resolve, reject) => {
        client.get(key, async (err, data) => {
            if (err) reject(err);
            if (data !== null) {
                resolve(JSON.parse(data));
            } else {
                const newData = await fetchDataFromSource(key);
                client.setex(key, 3600, JSON.stringify(newData));
                resolve(newData);
            }
        });
    });
}
        

Redis를 사용하면 여러 서버 간에 캐시를 공유할 수 있어 분산 환경에서 이상적입니다.

3. Cache-Aside 패턴

Cache-Aside 패턴은 데이터를 읽을 때 먼저 캐시를 확인하고, 캐시에 없으면 데이터 소스에서 가져와 캐시에 저장하는 방식입니다.

async function getCacheAsideData(key) {
    let data = await cache.get(key);
    if (data === null) {
        data = await fetchDataFromSource(key);
        await cache.set(key, data, 'EX', 3600); // 1시간 동안 캐시
    }
    return data;
}
        

이 패턴은 읽기 작업이 많은 애플리케이션에 적합합니다.

4. Write-Through 패턴

Write-Through 패턴은 데이터를 쓸 때 캐시와 데이터 소스를 동시에 업데이트하는 방식입니다.

async function writeThroughData(key, value) {
    await Promise.all([
        cache.set(key, value, 'EX', 3600),
        updateDataSource(key, value)
    ]);
}
        

이 패턴은 데이터 일관성을 유지하는 데 도움이 되지만, 쓰기 작업의 지연 시간이 증가할 수 있습니다.

결론

Node.js에서 캐싱 전략을 구현할 때는 애플리케이션의 요구사항과 특성을 고려해야 합니다. 인메모리 캐싱은 간단하고 빠르지만 확장성에 제한이 있고, Redis를 이용한 분산 캐싱은 더 복잡하지만 확장성이 뛰어납니다. Cache-Aside와 Write-Through 패턴은 각각 읽기와 쓰기 작업에 최적화되어 있으므로, 애플리케이션의 워크로드 특성에 따라 적절한 패턴을 선택해야 합니다. 효과적인 캐싱 전략을 구현함으로써 Node.js 애플리케이션의 성능을 크게 향상시킬 수 있습니다.

반응형