CDN
지금까지 네트워크의 계층별 동작 원리와 프로토콜을 살펴보았습니다. 이제 실제 서비스를 운영할 때 필수적인 네트워크 인프라 구성 요소를 다루겠습니다. 첫 번째는 CDN(Content Delivery Network)입니다.
왜 CDN이 필요한가
서울에 있는 서버에서 브라질 사용자에게 웹 페이지를 보낸다고 합시다. 광섬유 안의 빛은 진공보다 느리고 실제 해저 케이블 경로도 직선이 아니므로, 서울과 상파울루 사이의 왕복 지연은 물리적 하한만으로도 매우 큽니다. 실제 인터넷 경로에서는 라우팅, 장비 처리, 혼잡까지 더해져 300ms 안팎 또는 그 이상이 흔합니다.
CDN은 전 세계에 분산된 엣지 서버에 콘텐츠의 복사본을 캐시하고, 사용자에게 네트워크상 가까운 엣지에서 응답합니다. 이 “가까움”은 단순한 지도상의 거리뿐 아니라 DNS 응답, Anycast 라우팅, ISP 피어링, 엣지의 부하 상태에 따라 결정됩니다.
CDN의 동작 원리
캐시의 유효 기간은 HTTP의 Cache-Control 헤더로 제어합니다. s-maxage는 CDN 같은 공유 캐시에 우선 적용되고, no-cache는 저장 금지가 아니라 매번 원본에 재검증하라는 뜻입니다.
Cache-Control: max-age=86400 → 브라우저 + CDN 24시간
Cache-Control: s-maxage=3600 → CDN만 1시간
Cache-Control: no-cache → 매번 오리진에 검증
Cache-Control: no-store → 캐시 금지
Cache-Control: stale-while-revalidate=60 → 만료 후 60초간
캐시 응답 + 백그라운드 갱신캐시 무효화 전략
코드를 배포했을 때 CDN 캐시가 갱신되지 않으면, 사용자는 여전히 이전 버전을 받습니다.
| 전략 | 방식 | 장점 | 단점 |
|---|---|---|---|
| 파일명 해싱 | main.abc123.js | 가장 확실, 자동화 | 빌드 도구 필요 |
| 퍼지(Purge) | API로 캐시 삭제 | 즉시 적용 | 수동, 전파 시간 |
| 캐시 태그 | 태그별 그룹 무효화 | 유연한 관리 | CDN별 구현 다름 |
| 단기 TTL | max-age=60 | 자동 갱신 | 캐시 효율 감소 |
| 버전 쿼리스트링 | ?v=2 | 간단 | 일부 CDN 무시 |
대표 CDN 서비스
서비스 특징 진입 방식 용도
──────────────────────────────────────────────────────────────────────────
Cloudflare CDN+DDoS+WAF+DNS 통합 무료/유료 플랜 범용
AWS CloudFront AWS 생태계 통합 무료 플랜+유료 플랜 AWS 서비스
Akamai 대형 글로벌 CDN 엔터프라이즈 중심 대기업
Fastly 실시간 퍼지, Edge 무료 체험/상담 기반 API/동적
Vercel/Netlify 프론트엔드 배포 통합 무료 플랜+사용량 제한 정적 사이트CDN은 정적 파일에만 유용한 것이 아닙니다. API 응답 캐싱, 엣지에서의 요청 조작(Edge Functions), 이미지 최적화(리사이징, 포맷 변환) 등 점점 더 많은 로직이 엣지로 이동하고 있습니다.
다음 절에서는 트래픽을 여러 서버로 분배하는 로드 밸런서를 다루겠습니다.