본문으로 건너뛰기

안동민 개발노트

본문 시작

CDN

CDN이 가까운 엣지에서 콘텐츠를 캐시해 지연과 원본 부하를 줄이는 원리와 캐시 무효화 전략을 이해합니다.

지금까지 네트워크의 계층별 동작 원리와 프로토콜을 살펴보았습니다.

이제 실제 서비스를 운영할 때 필수적인 네트워크 인프라 구성 요소를 다루겠습니다.

첫 번째는 CDN(Content Delivery Network)입니다.


왜 CDN이 필요한가

서울에 있는 서버에서 브라질 사용자에게 웹 페이지를 보낸다고 합시다.

광섬유 안의 빛은 진공보다 느리고 실제 해저 케이블 경로도 직선이 아니므로, 서울과 상파울루 사이의 왕복 지연은 물리적 하한만으로도 매우 큽니다.

실제 인터넷 경로에서는 라우팅, 장비 처리, 혼잡까지 더해져 300ms 안팎 또는 그 이상이 흔합니다.

CDN은 먼 origin 왕복을 가까운 edge 왕복으로 바꾼다

사용자와 원본 사이의 긴 경로 대신 가까운 edge cache가 응답하고, miss 때만 origin으로 간다.

  1. 1 user

    user 브라우저 요청 가까운 CDN edge로 라우팅

  2. 2 edge hit

    edge hit 캐시에서 즉시 응답 origin 왕복 없음

  3. 3 edge miss

    edge miss origin fetch 처음 한 번만 먼 경로

  4. 4 store

    store TTL과 key로 저장 다음 요청은 edge hit

CDN은 전 세계에 분산된 엣지 서버에 콘텐츠의 복사본을 캐시하고, 사용자에게 네트워크상 가까운 엣지에서 응답합니다.

이 “가까움”은 단순한 지도상의 거리뿐 아니라 DNS 응답, Anycast 라우팅, ISP 피어링, 엣지의 부하 상태에 따라 결정됩니다.


CDN의 동작 원리

CDN은 요청을 캐시 키로 묶고 신선도에 따라 hit/miss를 결정한다

CDN은 단순 복사본이 아니라 요청을 객체 키로 매핑하고 Cache-Control, ETag, Vary 정책으로 응답 경로를 고른다.

  1. 1 Route

    Route edge 선택 DNS/Anycast로 가까운 edge 도착

  2. 2 Key

    Key 캐시 키 계산 URL, query, header, cookie 반영

  3. 3 Fresh?

    Fresh? TTL/검증 판단 s-maxage, max-age, ETag 확인

  4. 4 Serve/Fetch

    Serve/Fetch hit, miss, revalidate edge 응답 또는 origin fetch

  5. 5 Store

    Store 정책대로 저장 Vary와 private/no-store 반영

캐시의 유효 기간은 HTTP의 Cache-Control 헤더로 제어합니다.

s-maxage는 CDN 같은 공유 캐시에 우선 적용되고, no-cache는 저장 금지가 아니라 매번 원본에 재검증하라는 뜻입니다.

CDN 캐시 제어 헤더
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초간
                                          캐시 응답 + 백그라운드 갱신

캐시 무효화 전략

캐시 무효화는 key 변경과 purge 범위를 고르는 문제다

배포 후 오래된 파일을 막으려면 파일명 해싱, purge, cache tag, TTL의 trade-off를 분리해서 선택해야 한다.

  1. 파일명 해싱 내용

    바뀌면 URL도 바뀜 HTML이 새 파일명을 참조해야 함

  2. purge 기존 key

    즉시 제거 전파 지연과 범위 실수

  3. cache tag 관련 객체

    묶어 제거 태그 설계와 운영 도구 필요

  4. 짧은 TTL 오래된 응답 지속

    시간 제한 origin 요청 증가

코드를 배포했을 때 CDN 캐시가 갱신되지 않으면, 사용자는 여전히 이전 버전을 받습니다.

전략방식장점단점
파일명 해싱main.abc123.js가장 확실, 자동화빌드 도구 필요
퍼지(Purge)API로 캐시 삭제즉시 적용수동, 전파 시간
캐시 태그태그별 그룹 무효화유연한 관리CDN별 구현 다름
단기 TTLmax-age=60자동 갱신캐시 효율 감소
버전 쿼리스트링?v=2간단일부 CDN 무시

대표 CDN 서비스

CDN 선택은 브랜드 비교가 아니라 맡길 책임의 경계 비교다

DNS/WAF 통합, AWS origin 결합, 실시간 edge 제어, 프론트 배포 통합처럼 각 서비스가 잘 맡는 책임이 다르다.

  1. Cloudflare DNS + WAF + CDN

    한 앞단으로 묶기 기존 DNS/보안 운영과 책임 경계 조정

  2. CloudFront S3, ALB

    Lambda@Edge 같은 AWS origin 결합 설정 복잡도와 무효화 비용

  3. Fastly/Akamai 대형 트래픽, 동적 캐시

    세밀한 edge 제어 전문 운영과 계약 비용

  4. Vercel/Netlify 프론트 배포, 정적

    자산, edge function 통합 범용 CDN/WAF 요구가 커지면 한계 확인

CDN 비교
서비스             특징                   진입 방식              용도
──────────────────────────────────────────────────────────────────────────
Cloudflare        CDN+DDoS+WAF+DNS 통합   무료/유료 플랜          범용
AWS CloudFront    AWS 생태계 통합         무료 플랜+유료 플랜     AWS 서비스
Akamai            대형 글로벌 CDN         엔터프라이즈 중심       대기업
Fastly            실시간 퍼지, Edge       무료 체험/상담 기반     API/동적
Vercel/Netlify    프론트엔드 배포 통합    무료 플랜+사용량 제한   정적 사이트

CDN은 정적 파일에만 유용한 것이 아닙니다.

API 응답 캐싱, 엣지에서의 요청 조작(Edge Functions), 이미지 최적화(리사이징, 포맷 변환) 등 점점 더 많은 로직이 엣지로 이동하고 있습니다.

엣지는 반복 응답을 줄이고 원본은 권위 상태를 지킨다

엣지로 갈수록 지연은 줄지만, 개인화·인증·트랜잭션처럼 권위가 필요한 일은 origin 경계에 남긴다.

  1. 1 User

    User 가까운 edge로 요청 RTT를 줄임

  2. 2 Edge

    Edge cache, image, header 반복·가벼운 변환 처리

  3. 3 Origin

    Origin 권위 상태와 트랜잭션 정합성 책임 유지

CDN에서는 프로토콜 상태, 실패 응답, 관측 도구, 복구 기준을 확인합니다.

CDN 운영은 key, TTL, purge, origin 보호를 같이 본다

hit ratio가 높아도 오래된 응답이나 origin 과부하가 생기면 좋은 CDN 운영이 아니다.

  1. 1 Key

    Key URL+header+query 정규화 불필요한 분산 제거

  2. 2 TTL

    TTL fresh/stale 기준 데이터 성격별 시간 분리

  3. 3 Purge

    Purge hash, tag, API 제거 배포와 무효화 연결

  4. 4 Shield

    Shield miss 폭주 완충 origin 5xx와 비용 보호

다음 절에서는 트래픽을 여러 서버로 분배하는 로드 밸런서를 다루겠습니다.