반응형
💡 “같은 데이터를 왜 매번 계산해?”
사용자가 매번 같은 페이지를 조회합니다.
"이 페이지 들어올 때마다 3초 걸려요"
"데이터는 안 바뀌는데 왜 자꾸 새로 불러오죠?"
→ 이런 상황에서 가장 먼저 적용해야 할 게 캐싱(Cache)입니다.
캐싱은 가장 간단하면서도 강력한 성능 향상 전략이에요!
🔍 캐시(Cache)란?
캐시는
자주 사용하는 데이터를 미리 저장해 두고,
다시 필요할 때 빠르게 꺼내 쓰는 임시 저장소입니다.
✅ "계산하거나 가져오는 데 시간이 걸리는 데이터를
한 번만 처리하고, 결과만 저장해두는 방식!"
🎯 캐시가 필요한 이유
이유 | 설명 |
처리 속도 향상 | DB 쿼리나 API 요청 생략 가능 |
서버 부하 감소 | 반복 요청 줄여 CPU 사용량 절감 |
사용자 만족도 향상 | 응답 시간 단축 (3초 → 0.1초) |
비용 절감 | 외부 API, 트래픽 요금 절감 가능 |
🧱 캐싱 전략의 3가지 레벨
레벨 | 설명 | 예시 |
1. 브라우저 캐시 | 사용자 브라우저가 캐시 | 이미지, JS 파일 |
2. CDN 캐시 | 중간 서버가 캐시 | Cloudflare, CloudFront |
3. 서버/DB 캐시 | 백엔드가 직접 캐시 | Redis, Memcached, in-memory |
🌐 1. 브라우저 캐시
- 프론트엔드 정적 자원 (JS, CSS, 이미지) 저장
- Cache-Control, ETag, Last-Modified 헤더로 제어
Cache-Control: max-age=86400
✅ 사용자의 브라우저가 다시 요청하지 않고 캐시된 자원 사용
☁️ 2. CDN 캐시
- 전 세계 엣지 서버에 자원 저장
- 사용자와 물리적으로 가까운 서버에서 제공
- HTML, 이미지, JS 등 정적 자원 캐싱
- 예: Cloudflare, AWS CloudFront, Fastly
✅ 첫 요청만 원서버 → 이후 모든 사용자에겐 캐시본 제공
🖥️ 3. 서버/DB 캐시
- 백엔드 서버에서 데이터 자체를 캐시
- DB 결과, 연산 결과, 외부 API 응답 저장
대표 기술: Redis, Memcached
const cached = await redis.get('user:1');
if (cached) return JSON.parse(cached);
const user = await getUserFromDB();
await redis.set('user:1', JSON.stringify(user), 'EX', 3600);
return user;
✅ DB 접근 없이 빠른 응답 가능
✅ TTL(Time To Live) 설정으로 자동 만료
🔁 TTL이란?
TTL(Time To Live): 캐시가 얼마나 오래 유지될지를 결정하는 시간(초)
- 예: EX 3600 → 1시간 후 자동 만료
- 실시간성이 중요할수록 TTL 짧게!
- 자주 안 바뀌는 데이터일수록 TTL 길게!
⚠️ 캐시 전략 실수 사례
실수 | 문제점 |
캐시 무조건 켜두기 | 변경된 데이터 반영 안 됨 |
TTL 설정 안 함 | 오래된 데이터 남아있음 |
캐시 저장소만 믿기 | Redis 장애 시 전체 서비스 영향 가능 |
✅ 캐시는 빠르지만, 반드시 만료 전략 + 예외 처리가 필요!
🧠 정리 한마디!
캐싱 위치 | 대표 기술 | 특징 |
브라우저 | Cache-Control, ETag | 프론트 자원 빠르게 표시 |
CDN | Cloudflare, CloudFront | 전 세계 빠른 정적 자원 제공 |
서버 | Redis, Memcached | DB, 연산 결과를 직접 저장 |
"바뀌지 않는 데이터라면 캐시하고,
바뀔 수 있다면 TTL을 설정하라!" 😊
반응형
'개발 공부 > 서버' 카테고리의 다른 글
[서버 성능 최적화] 로드밸런싱 다시 보기, 서버가 많아지면 꼭 필요한 분산 전략 (1) | 2025.05.23 |
---|---|
[서버 성능 최적화] DB 쿼리 성능 최적화 전략, 인덱스, N+1 문제, 정규화/비정규화 (0) | 2025.05.22 |
[서버 성능 최적화] 성능 최적화가 필요한 순간들, 어떤 문제부터 잡아야 할까? (0) | 2025.05.20 |
[서버 기초] 웹개발자를 위한 서버 개념 총정리 요약노트 (0) | 2025.05.16 |
[서버 기초] Primary Key와 Foreign Key, 뭐가 다른데? (1) | 2025.05.15 |