본문 바로가기
개발 · IT/백엔드

Redis 캐싱 구조와 활용 예제

by 플라퉁 2025. 11. 18.
반응형

Redis 캐싱 구조와 활용 예제

레디스 썸네일 이미지

Redis에 캐싱을 하는게 좋을까요?

사실 캐싱은 메모리를 써서 빠르고 자원을 절약하는 의미로 볼 수 있죠.

그런 의미에서 Redis의 사용은 캐싱을 주력으로 하는 외주를 주는 셈이라 볼 수 있어요.

Redis는 인메모리 기반 Key-Value 스토어로, 빠른 데이터 조회와 세션 관리, 캐싱, 실시간 분석 등 다양한 용도로 사용됩니다. 이번 글에서는 Redis 캐싱 구조와 실무에서 활용 가능한 예제를 정리했습니다.

1. Redis 캐싱 구조 이해

Redis는 데이터를 메모리에 저장하여 디스크 I/O 없이 빠른 읽기/쓰기가 가능합니다. 캐싱 구조는 일반적으로 다음과 같이 구성됩니다:

  • Application Layer : 애플리케이션에서 데이터를 조회/변경
  • Redis Cache : Key-Value 형태로 자주 쓰이는 데이터 저장
  • Database : 캐시에 없는 경우 최종 조회 대상

예: 사용자 정보 조회 시 Redis에 없으면 DB에서 조회 후 캐시에 저장

2. Redis 캐싱 전략

  • Cache Aside (Lazy Loading) : DB 조회 후 캐시에 저장, 캐시 미스 시 DB 접근
  • Write Through : 데이터 변경 시 DB와 캐시에 동시에 쓰기
  • Write Back : 캐시에 먼저 쓰고 일정 시간 후 DB 업데이트
  • Time-to-Live (TTL) : 캐시 만료 시간을 설정하여 오래된 데이터 제거

3. Redis 캐싱 예제 (Node.js)

아래 예제는 사용자 정보 조회 시 Redis 캐시 활용 예제입니다.

// Redis 연결
const redis = require('redis');
const client = redis.createClient();

client.on('error', (err) => console.error('Redis Error:', err));

// DB 조회 함수 (예시)
async function getUserFromDB(userId) {
    // 실제 DB 조회 코드
    return { id: userId, name: 'John Doe' };
}

// 캐시 조회 함수
async function getUser(userId) {
    return new Promise((resolve, reject) => {
        client.get(`user:${userId}`, async (err, data) => {
            if (err) return reject(err);

            if (data) {
                console.log('Cache Hit');
                return resolve(JSON.parse(data));
            }

            console.log('Cache Miss');
            const user = await getUserFromDB(userId);

            // Redis에 60초 TTL로 저장
            client.setex(`user:${userId}`, 60, JSON.stringify(user));
            resolve(user);
        });
    });
}

// 사용 예시
getUser(1).then(console.log);

4. Redis로 세션 관리

Express에서 Redis를 세션 스토어로 사용하는 예시:

const session = require('express-session');
const RedisStore = require('connect-redis')(session);

app.use(session({
    store: new RedisStore({ client }),
    secret: 'mySecret',
    resave: false,
    saveUninitialized: false,
    cookie: { maxAge: 3600000 } // 1시간
}));

Redis를 사용하면 서버 재시작 후에도 세션 유지가 가능하며, 분산 서버 환경에서도 안정적입니다.

마무리

Redis는 빠른 읽기/쓰기 성능 덕분에 캐싱, 세션 관리, 실시간 데이터 처리 등 다양한 영역에서 활용됩니다. 캐싱 전략과 TTL 설정, 적절한 Key 설계가 중요하며, 과도한 캐시 사용보다는 DB 구조와 트래픽 패턴에 맞게 설계하는 것이 성능 최적화 핵심입니다.

반응형

댓글