노트

CDN

Content Delivery Network

인프라#network#performance · 연결된 개념 5개

쉽게 말하면

CDN은 본사 창고의 인기 상품을 동네 편의점이 한 번 받아 와 진열해 두는 것과 같아요. 다음 손님부터는 가까운 곳에서 바로 받아 빨라지고, 본사 창고로 몰리던 주문도 줄어들어요.

비유가 깨지는 곳 진열은 편의점 마음대로가 아니라 오리진이 Cache-Control 헤더로 정해요. 로그인 정보가 담긴 응답처럼 사람마다 다른 걸 공유 캐시에 두면 남의 화면이 보이니 private이나 no-store를 붙여요.

CDN(Content Delivery Network)은 세계 곳곳에 둔 서버(엣지, edge)들이 원본 서버(오리진, origin)의 응답을 복사해 두었다가 사용자와 가까운 곳에서 대신 내주는 네트워크다. 물리적 거리가 줄어 응답이 빨라지고, 오리진으로 가는 요청이 줄어 서버 부담도 줄어든다.

동작

사용자 → 가까운 엣지
  캐시 있음(HIT)  → 엣지가 바로 응답
  캐시 없음(MISS) → 엣지가 오리진에 요청 → 받아서 저장하고 응답
  • 사용자를 가까운 엣지로 보내는 일은 보통 DNS와 CNAME 응답이나 애니캐스트(Anycast) 라우팅이 맡는다
  • 엣지가 무엇을 얼마나 저장할지는 오리진이 응답에 붙이는 Cache-Control 헤더로 정한다. s-maxage는 CDN 같은 공유 캐시에만 적용되는 수명이고, private이면 공유 캐시는 저장하지 않는다(public은 원래라면 저장되지 않을 응답도 저장해도 된다는 표시다) → 브라우저 캐시
  • 배포 뒤 옛 파일이 남으면 퍼지(purge, 캐시 무효화)를 하거나, 처음부터 파일 이름에 해시를 넣어 무효화가 필요 없게 만든다

무엇을 올리나

  • 해시가 붙은 JS·CSS, 이미지, 폰트, 동영상 같은 정적 파일이 기본이다. 정적 파일만 앱 서버에서 떼어 CDN으로 보내는 구성은 버전 스큐와 정적 자산 오프로드에 있다
  • 빌드 때 만들어 둔 HTML(SSG)도 그대로 CDN에서 응답할 수 있다 → CSR·SSR·SSG·ISR
  • 요즘 CDN은 캐시 외에 TLS 종료(HTTP와 HTTPS), DDoS(Distributed Denial of Service) 방어, 이미지 변환, 엣지에서 코드 실행까지 맡는 경우가 많다

주의

  • 사용자마다 다른 응답(로그인 정보가 담긴 HTML 등)을 공유 캐시에 넣으면 남의 화면이 보이는 사고가 난다. 개인화 응답은 private이나 no-store로 둔다
  • 같은 URL이라도 헤더에 따라 응답이 달라지면 Vary 헤더로 알려 줘야 캐시가 섞이지 않는다

명세: RFC 9111 §5.2.2.10 — s-maxage · RFC 9111 §5.2.2.7 — private · RFC 9111 §4.1 — Vary 출처: MDN — CDN · MDN — HTTP caching

연결된 개념

이 노트를 가리키는 문서

뜻이 가까운 노트

  • Next.js 캐시 계층

    Next.js 14~15의 App Router 문서는 캐시를 위치와 수명이 다른 네 계층으로 설명했다. Next.js 16에서 Cache Components를 켜면 캐싱을 'use cache'로 명시하는 모델로 바뀌고 문서도 이 이름들을 쓰지 않는다(use-cache). 그래도 옛 코드와 아티클을 읽으려면 이 그림이 필요하다(2026 기준).

  • XSS

    XSS(Cross-Site Scripting)는 공격자가 넣은 스크립트가 내 사이트의 출처(origin) 권한으로 사용자 브라우저에서 실행되는 공격이다. 같은 출처의 코드로 돌기 때문에 same-origin-policy가 막아 주지 못한다. 그 스크립트는 페이지를 바꾸고, 로그인한 사용자 행세를 하며 요청을 보내고, JS가 읽을 수 있는 데이터(localStorage의 토큰 등)를 빼 갈 수 있다.

  • "use cache"와 Cache Components

    'use cache'는 Next.js 16의 Cache Components 모델에서 async 함수나 컴포넌트의 반환값을 캐시하라고 명시하는 지시어(Directive)다. 아무것도 표시하지 않으면 매 요청 실행되고, 캐시하고 싶은 곳에만 직접 붙인다(옵트인, Opt-in).

  • HTTP 쿠키

    서버가 브라우저에 저장시키는 작은 이름-값 데이터. 브라우저는 조건이 맞는 요청마다 쿠키를 자동으로 실어 보내므로, 상태가 없는 HTTP 위에서 로그인 같은 상태를 이어 가는 데 쓴다.

  • 사용자 수에 따른 규모 확장

    사용자가 늘어날 때 서버 한 대짜리 시스템을 단계적으로 키워 가는 전형적인 경로. 처음부터 다 갖추는 게 아니라, 병목이 보일 때마다 한 단계씩 더한다(galls-law).

보기 옵션