데브포일 홈
DEV MODE - 실서버 영향 없음 📦 배포 관리
Redis 캐싱 전략
+400 XP
LEVEL 90 QUEST

Redis 캐싱 전략

Redis 캐싱 전략 — DevFoil 바이브코딩 Stage 19, Lv.90

Redis란 무엇인가?
초고속 인메모리 데이터 저장소
Redis는 데이터를 메모리(RAM)에 저장하는 인메모리 데이터베이스입니다. 디스크가 아닌 메모리에 저장하기 때문에 읽기/쓰기가 극도로 빠릅니다.

비유하면, 일반 DB는 서류 캐비닛(디스크)에서 파일을 찾는 것이고, Redis는 책상 위 메모장(메모리)에서 바로 확인하는 것입니다.

Redis의 주요 용도:
  • 캐싱: DB 조회 결과를 메모리에 저장하여 응답 속도 10~100배 향상
  • 세션 저장: 로드밸런싱 환경에서 세션 공유
  • 레이트 리미팅: API 호출 횟수 제한
  • 실시간 카운터: 좋아요 수, 조회수 등
  • 메시지 큐: 비동기 작업 처리
캐싱 패턴: Cache-Aside vs Write-Through
상황에 맞는 캐싱 전략 선택하기
패턴동작 방식장점단점
Cache-Aside 캐시 확인 → 없으면 DB 조회 → 캐시에 저장 가장 간단, 필요한 것만 캐시 첫 요청은 느림 (Cold Start)
Write-Through DB 저장 시 캐시도 동시에 갱신 캐시와 DB 항상 동기화 쓰기가 약간 느림
Write-Behind 캐시에 먼저 쓰고, 나중에 DB에 반영 쓰기 성능 최고 데이터 유실 위험

대부분의 경우 Cache-Aside 패턴으로 시작하는 것을 권장합니다.
// Cache-Aside 패턴 구현 import Redis from 'ioredis'; const redis = new Redis(process.env.REDIS_URL); // 캐시 래퍼 함수 async function cacheGet(key: string, fetchFn: () => Promise<any>, ttl = 300) { // 1. 캐시에서 먼저 확인 const cached = await redis.get(key); if (cached) { return JSON.parse(cached); // 캐시 히트! } // 2. 캐시 미스: DB에서 조회 const data = await fetchFn(); // 3. 캐시에 저장 (TTL 설정) if (data) { await redis.setex(key, ttl, JSON.stringify(data)); } return data; } // 사용 예시 app.get('/api/projects/:id', async (req, res) => { const project = await cacheGet( `project:${req.params.id}`, // 캐시 키 () => db.project.findUnique({ // DB 조회 함수 where: { id: req.params.id } }), 600 // 10분 TTL ); res.json(project); }); // 데이터 변경 시 캐시 무효화 app.put('/api/projects/:id', async (req, res) => { const updated = await db.project.update({ where: { id: req.params.id }, data: req.body }); // 관련 캐시 삭제 await redis.del(`project:${req.params.id}`); await redis.del(`projects:tenant:${req.tenantId}`); // 목록 캐시도 삭제 res.json(updated); });
🔒
여기까지는 미리보기입니다
Redis 캐싱 전략
무료 가입하면 이어서 볼 수 있고, 강의를 완료할 때마다 XP와 레벨이 쌓입니다.
Google로 3초 만에 시작 →🧵 Threads로 시작무료 공개 강의 둘러보기 (Lv.1~3)