HTTP 캐싱이란?
HTTP 캐싱은 같은 요청에 대한 응답을 재사용하여 성능을 향상시키는 메커니즘입니다.캐싱 없이
문제: 같은 데이터를 매번 DB에서 조회 (느림, 서버 부하)캐싱 사용
장점: 서버 요청 없이 즉시 응답 (빠름, 서버 부하 감소)Cache-Control 헤더
기본 구조
public: 모든 캐시(브라우저, CDN)에서 저장 가능max-age=3600: 3600초(1시간) 동안 유효
주요 디렉티브
- 저장 위치
- 캐시 금지
- 만료 시간
- 재검증
public vs private
- public: 모든 캐시에서 저장 가능 (브라우저, CDN, 프록시)
- 용도: 모든 사용자에게 동일한 응답 (상품 목록, 공지사항)
- private: 브라우저에서만 저장 가능 (CDN/프록시는 불가)
- 용도: 사용자별로 다른 응답 (마이페이지, 장바구니)
Stale-While-Revalidate
만료된 캐시(Stale)를 즉시 반환하면서 백그라운드에서 갱신하는 전략입니다.작동 방식
장점:- 사용자는 항상 빠른 응답 (Stale이라도 즉시 반환)
- 백그라운드 갱신으로 다음 사용자는 신선한 데이터
stale-while-revalidate를 지원합니다.
Stale-If-Error
오류 발생 시 Stale 캐시를 사용합니다.- 정상 상황: 60초마다 갱신
- 서버 오류 발생: 최대 86400초(1일) 동안 Stale 캐시 사용
- 서버 복구: 다시 정상 갱신
Vary 헤더
같은 URL이라도 요청 헤더에 따라 다른 캐시를 사용하도록 합니다.Accept-Language 헤더 값에 따라 캐시 분리
예시:
Accept-Language: 다국어 지원Accept-Encoding: 압축 방식 (gzip, br)Authorization: 인증 여부
Sonamu vs BentoCache
Sonamu에는 두 가지 캐싱 메커니즘이 있습니다:- Cache-Control (HTTP)
- BentoCache (서버)
브라우저/CDN 캐싱위치: 브라우저, CDN, 프록시
제어: HTTP 헤더로 제어
대상: 클라이언트가 받는 최종 응답
특징:
- 네트워크 트래픽 감소
- 클라이언트 제어 (브라우저가 캐시 관리)
- 무효화 어려움
조합 사용
두 가지를 함께 사용하면 최대 성능을 얻을 수 있습니다:- 첫 요청: DB 조회 (느림) → 서버 캐시 + HTTP 캐시
- 60초 이내: 브라우저 캐시에서 반환 (매우 빠름, 서버 요청 없음)
- 60초~10분: 서버 요청하지만 서버 캐시 사용 (빠름, DB 조회 없음)
- 10분 이후: DB 조회 (느림) → 다시 캐싱
캐싱 레이어
각 레이어의 역할:- 브라우저 캐시: 사용자별 캐시, 가장 빠름
- CDN 캐시: 지역별 캐시, 네트워크 지연 감소
- 서버 캐시: DB 부하 감소, 즉시 무효화 가능
- 데이터베이스: 원본 데이터
