codingstairs
노트에듀라이프연락
⌕검색⌘K
koen

Navigation

  • Intro
  • Blog
  • Life

연락하기

로그인 없이도 보낼 수 있어요. 답변이 필요하면 이메일을 함께 적어 주세요.

  • 익명 폼으로 의견 남기기 →
  • ✉ warragon112@gmail.com
  • 카카오톡 오픈채팅 ↗

© 2026 codingstairs

  • 노트
  • 에듀
  • 검색
  • 라이프
  • 연락
  • 약관
  • RSS
  • GitHub
노트›cloud

CloudFront — 엣지 CDN

2026-04-28 게시· 2026-05-18 갱신·0회 조회

CloudFront — 엣지 CDN

정적 파일·동영상·API 응답을 사용자 가까이에 캐시해 두면 응답이 빨라지고 원본 서버의 부담이 줄어듭니다. 이 일을 전세계 분산 엣지에서 처리하는 서비스가 CDN (Content Delivery Network) 입니다.

1. CloudFront 에 대한 이야기

시기 사건
2008 CloudFront 출시.
2014 HTTPS · 사용자 정의 인증서.
2017 Lambda@Edge · HTTP/2.
2020 Origin Shield.
2021 CloudFront Functions.

전 세계 PoP (Point of Presence) 에서 콘텐츠를 캐시·전달합니다. 600+ PoP, 90+ 도시 정도가 자주 거론됩니다.

핵심 객체:

  • Distribution — 도메인 + 동작 + Origin 의 묶음.
  • Origin — 콘텐츠의 원본 (S3 · ALB · EC2 · 외부 HTTP).
  • Behavior — URL 패턴별 처리 규칙.
  • Cache Policy · Origin Request Policy · Response Headers Policy — 분리된 정책 객체.

2. 캐시 키

요청을 캐시에서 찾을 때 사용하는 키. 기본은 URL. Cache Policy 에서 추가로 헤더·쿠키·쿼리 파라미터를 캐시 키에 포함시킬 수 있습니다.

캐시 키에 포함될수록 캐시 적중률이 떨어집니다. 같은 URL 이라도 헤더가 다르면 다른 객체로 취급되기 때문. 정말 필요한 항목만 키에 포함합니다.

3. TTL 과 Cache-Control

CloudFront 는 두 신호를 함께 봅니다:

  • Origin 응답의 Cache-Control: max-age 또는 Expires 헤더.
  • Distribution 의 Cache Policy 의 Min/Default/Max TTL.

Cache-Control: public, max-age=86400 같이 Origin 이 명시한 값이 우선되는 자리가 흔합니다. Cache-Control: no-cache, no-store, private 같은 응답은 캐시에 담기지 않습니다.

4. Invalidation

이미 캐시된 객체를 강제로 무효화. 경로 패턴 (/static/*) 으로 일괄 가능. 매 달 1000 경로 무료 + 추가 과금.

aws cloudfront create-invalidation \
  --distribution-id E1XXXX \
  --paths "/index.html" "/static/*"

운영에서는 invalidation 보다 버전화된 파일명 (app.abc123.js) 으로 캐시를 우회하는 흐름이 권장됩니다. 이전 버전 파일도 그대로 두면 롤백·점진 배포가 자연스럽습니다.

5. 엣지 컴퓨트

Lambda@Edge — Lambda 함수를 PoP 가까이에서 실행. 4 가지 트리거 (Viewer Request · Origin Request · Origin Response · Viewer Response). 헤더 변형 · 인증 · A/B 분기 · 이미지 처리. 콜드 스타트와 메모리 한계가 있습니다.

CloudFront Functions — 훨씬 가벼운 JS 런타임. 매우 짧은 헤더 변형 · URL 재작성 같은 자리. Lambda@Edge 보다 비용·지연이 낮습니다 (메모리·실행 시간 더 엄격, 2 MB · 1 ms).

function handler(event) {
  const req = event.request;
  if (!req.uri.endsWith('/') && !req.uri.includes('.')) {
    req.uri += '.html';
  }
  return req;
}

6. 보안 통합

Signed URL · Signed Cookie — CloudFront 키페어로 서명한 URL · 쿠키만 접근 허용. 시간 · IP 제한 가능. 비공개 콘텐츠 (영상 스트리밍 · 다운로드) 자리.

OAC (Origin Access Control) — S3 origin 의 직접 접근을 막고 CloudFront 만 통과하게. 옛 OAI 의 후속 (2022). 버킷 정책에 CloudFront distribution ARN 만 허용.

WAF · Shield — AWS WAF 를 CloudFront 앞에 부착 (SQL 인젝션 · XSS · rate-based). Shield Standard 는 모든 사용자에게 무료 자동 적용 DDoS 방어.

7. 다른 CDN 비교

CDN 등장 메모
Akamai 1998 가장 오래된 상용 CDN. 엔터프라이즈.
Cloudflare 2010 무료 티어 강력. WAF · DDoS · Workers.
Fastly 2011 VCL 기반 강력한 캐싱 제어. 인스턴트 invalidation.
CloudFront 2008 AWS 통합. 결제 · IAM 자연.
Bunny.net 2017 가격 단순 · 저렴. 신생.

선택 결정 요인:

  • AWS 위주 인프라 — CloudFront.
  • 무료 티어 · DDoS 보호 — Cloudflare.
  • 인스턴트 캐시 무효화 — Fastly (수 초 단위).
  • 단순한 가격 — Bunny.net.

8. S3 + CloudFront 정적 사이트

사용자 → CloudFront (HTTPS · 캐시) → S3 (private, OAC) → 콘텐츠
  • ACM 인증서로 사용자 정의 도메인.
  • default_root_object = "index.html".
  • SPA 라면 404 → /index.html 200 으로 변환 (CloudFront Functions 또는 Custom Error Responses).

비용 구조:

  • Data Transfer Out — 리전 · 사용자 위치별 GB 단가.
  • Request 수 — HTTP · HTTPS 별 단가.
  • Lambda@Edge · Functions — 호출 수 · 실행 시간.

엣지 → 사용자 트래픽이 비용의 대부분.

9. 자주 걸리는 자리

잘못된 캐시 키 — 사용자별 토큰을 캐시 키에 넣으면 적중률이 0 에 가까워집니다.

Origin 의 Cache-Control 누락 — Origin 이 캐시 헤더를 안 보내면 의도치 않은 TTL 적용. Origin 쪽 응답 명시.

OAC 누락 — S3 origin 이 public 으로 노출된 채 CloudFront 도 같이 사용 → 우회 가능. OAC + Block Public Access.

invalidation 의존 — 매 배포마다 invalidation 을 거는 흐름은 비싸지고 느려집니다. 버전화된 파일명으로 대체.

Lambda@Edge 의 글로벌 배포 — 함수 변경이 모든 PoP 에 전파되는 데 시간이 걸립니다.

Cookie 의 캐시 영향 — 쿠키 전달 정책을 잘못 설정하면 캐시 적중률이 급락.

하고픈 말

CDN 의 핵심은 캐시 키 설계입니다. 적중률이 떨어지면 origin 부담이 그대로 — CDN 의 의미가 사라집니다. 작은 운영은 Cloudflare 무료 티어, AWS 위주 인프라는 CloudFront, 인스턴트 무효화가 필요한 자리는 Fastly 가 자연스러운 자리입니다.

Next

  • lambda
  • route53

CloudFront 사용자 가이드 · Lambda@Edge · CloudFront Functions · Cloudflare · Fastly · Bunny.net · RFC 9111 HTTP Caching 을 참고합니다.

cloud 카테고리의 다른 글

카테고리 전체 보기 →
  • title 템플릿 단일 소스 — 자식 페이지가 박지 않게 한다
  • GitHub Pages — 저장소를 정적 사이트로
  • Replit — 브라우저 기반 개발·배포 통합 플랫폼
  • HTTP API Mocking — WireMock · MockServer · Prism · MSW
  • Firebase Local Emulator Suite — Firebase 한 묶음을 노트북에
  • Supabase Self-Hosted — Postgres 한 통에 BaaS 를 담는 방법