반응형
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 구조와 트래픽 패턴에 맞게 설계하는 것이 성능 최적화 핵심입니다.
반응형
'개발 · IT > 백엔드' 카테고리의 다른 글
| Redis Sentinel 구조 완전 정리 — 개념 · 구성 요소 · 페일오버 흐름 (0) | 2025.11.19 |
|---|---|
| Redis TTL & SETEX 완전 정리 — 개념 · 명령어 · 실전 예제 (0) | 2025.11.19 |
| MySQL 쿼리 최적화 방법 10가지 (0) | 2025.11.18 |
| 트랜잭션 ACID 쉽게 이해하기 — 핵심 개념 · 예시 · 실무 팁 (0) | 2025.11.17 |
| 조인(LEFT / INNER / RIGHT) 완전 정리 — 개념 · 예제 · 활용 팁 (0) | 2025.11.17 |
댓글