본문 바로가기
개발 공부/서버

[서버 성능 최적화] 응답 속도 개선의 핵심, 캐싱 전략 제대로 이해하기

by 악마의 개발자 2025. 5. 21.
반응형


💡 “같은 데이터를 왜 매번 계산해?”

사용자가 매번 같은 페이지를 조회합니다.

"이 페이지 들어올 때마다 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을 설정하라!" 😊

반응형