컴퓨터 네트워크
Content Delivery NetworkCDN
CDN(Content Delivery Network)은 정적 콘텐츠를 지리적으로 분산된 서버(엣지 서버)에 캐싱해 사용자에게 빠르게 전달하는 네트워크 인프라다. 원본 서버(Origin Server)와 사용자 사이의 물리적 거리를 줄여 지연(Latency)을 최소화한다.
핵심 구성 요소
| 용어 | 설명 |
|---|---|
| Origin Server | 콘텐츠의 원본이 있는 실제 서버 |
| Edge Server | CDN의 캐시 서버. 사용자 근처에 배치 |
| POP | Points of Presence — 엣지 서버가 위치한 거점 |
CDN 동작 방식
부하 분산: GSLB (Global Server Load Balancing)
CDN의 지능적 트래픽 분산 기술:
- •Health Check: 주기적으로 엣지 서버 상태 확인, 장애 서버는 응답에서 제외
- •Location-based: 사용자 위치 기반 가장 가까운 엣지 서버로 연결
- •Latency 기반: 지역별 응답 시간 데이터로 최적 서버 선택
- •Load 기반: 트래픽이 적은 서버로 분산
CDN 캐싱 방식
| 방식 | 설명 | 적합 콘텐츠 |
|---|---|---|
| 정적 캐싱 (Static Caching) | 운영자가 미리 엣지 서버에 콘텐츠 복사 | 게임 인스톨러, 대용량 파일 |
| 동적 캐싱 (Dynamic Caching) | 사용자 요청 시 Origin에서 가져와 TTL 동안 캐시 | 이미지, CSS, JS, API 응답 |
TTL (Time To Live): 캐시 유효 기간. TTL 이후에는 Origin에서 새로 가져옴.
Cache-Control 헤더 상세
HTTP 응답 헤더로 CDN과 브라우저 캐시 동작을 세밀하게 제어한다.
| 디렉티브 | 의미 |
|---|---|
| public | CDN + 브라우저 모두 캐시 가능 |
| private | 브라우저만 캐시 (사용자별 콘텐츠) |
| no-cache | 캐시 저장은 가능, 사용 전 서버 검증 필요 |
| no-store | 캐시 절대 불가 (민감 데이터) |
| max-age=N | 브라우저 캐시 유효 시간 (초) |
| s-maxage=N | CDN 캐시 유효 시간 (max-age보다 우선) |
| immutable | 콘텐츠가 절대 변하지 않음 (해시된 정적 파일) |
| stale-while-revalidate=N | 만료 후 N초 동안 오래된 캐시 즉시 반환 + 백그라운드 갱신 |
| stale-if-error=N | 서버 오류 시 N초 동안 오래된 캐시 반환 |
리소스 유형별 권장 설정:
ETag와 조건부 요청
ETag는 콘텐츠의 고유 식별자(해시값)로, 변경 여부를 효율적으로 검증한다.
Last-Modified / If-Modified-Since: ETag보다 정밀도 낮음 (1초 단위 비교).
Stale-While-Revalidate — 성능 게임 체인저
Cache-Control: max-age=60, stale-while-revalidate=86400
동작:
- •0~60초: 신선한 캐시 즉시 반환
- •61~86460초: 오래된 캐시 즉시 반환 + 백그라운드에서 갱신 시작
- •86460초 이후: 완전 만료 → 서버에 새로 요청
→ 모든 사용자에게 instant 응답, origin은 가끔만 호출.
CDN이 없을 때의 문제
주요 CDN 제공업체
| 업체 | 서비스명 | 특징 |
|---|---|---|
| AWS | CloudFront | AWS 서비스와 통합 |
| Cloudflare | CDN + DDoS 방어 | 보안 기능 강력 |
| Akamai | Akamai CDN | 세계 최대 규모 |
| GCP | Cloud CDN | GCP 통합 |
| Azure | Azure CDN | Microsoft 생태계 |
CDN의 추가 기능
- •DDoS 방어: 분산 서버로 공격 트래픽 흡수
- •웹 방화벽(WAF): 악성 요청 필터링 (Cloudflare 등)
- •이미지 최적화: 자동 리사이즈·포맷 변환
- •TLS 종료: 엣지에서 HTTPS 처리로 Origin 부하 감소
캐시 무효화 전략 (Cache Invalidation)
캐시 무효화는 컴퓨터 과학의 가장 어려운 문제 중 하나다.
| 전략 | 방법 | 장단점 |
|---|---|---|
| TTL 기반 | 시간이 지나면 자동 만료 | 단순하지만 stale 기간 존재 |
| Purge API | 콘텐츠 변경 시 CDN API 호출로 즉시 무효화 | 즉각적이지만 복잡 |
| Versioned URL | 변경 시 새 URL 사용 (파일명에 해시) | 무효화 불필요, CSS/JS 표준 |
| Cache Tags | 응답에 태그 부여, 태그 단위로 무효화 | 유연하지만 Enterprise 기능 |
캐시 히트율 (Cache Hit Ratio)
hit_ratio = cache_hits / (cache_hits + cache_misses)
| 히트율 | 평가 |
|---|---|
| 95% 이상 | 우수 |
| 90~95% | 좋음 |
| 80~90% | 개선 여지 있음 |
| 80% 미만 | 캐시 전략 재검토 필요 |
히트율 1% 향상은 origin 트래픽을 대폭 줄인다. (96% → 97% = origin 트래픽 25% 감소)
CDN 캐시 디버깅
응답 헤더로 캐시 상태를 확인한다.
| cf-cache-status 값 | 의미 |
|---|---|
| HIT | 캐시에서 반환됨 |
| MISS | 캐시 없어 origin 요청 |
| EXPIRED | 만료, 갱신 중 |
| BYPASS | 캐시 우회 (no-cache 등) |
| REVALIDATED | 304로 검증 후 반환 |
Origin Shield (계층적 CDN)
대규모 트래픽에서 Origin 서버 부하를 극적으로 줄이는 CDN 미들 계층.
효과:
- •Origin 서버 요청 수 90%+ 감소
- •새 콘텐츠 전파 시 Origin에 단 1회만 요청
- •AWS CloudFront, Fastly에서 "Origin Shield" 기능으로 제공
관련 개념
- •로드 밸런서 — CDN 내부에서도 활용되는 트래픽 분산 기술
- •DNS — CDN 라우팅에 GeoDNS 활용
- •HTTP/HTTPS — CDN이 캐싱하는 주요 프로토콜
- •캐시 — CDN의 핵심 저장 메커니즘