infra
Platform

모듈 맵

[Cloud] DNS와 CDN — 전 세계로 빠르게 보내는 법

0 / 14 완료

펼치기

Cloud · 07 / 14

[Cloud] DNS와 CDN — 전 세계로 빠르게 보내는 법

관리형 DNS(Route 53)와 CDN(CloudFront)이 사용자를 가장 가까운 곳으로 안내하고 정적 콘텐츠를 캐싱해 지연을 줄이는 원리, TLS 인증서까지 정리합니다

🚨INCIDENT ALERT
HIGH

서울 사용자는 빠른데 미국·유럽 사용자는 페이지가 3초씩 걸린다고 합니다. 이미지가 전부 서울 원본 서버에서 지구를 돌아가는 탓입니다. 게다가 어느 날 새벽, HTTPS 인증서가 만료돼 전 사용자가 '안전하지 않음' 경고를 봤습니다. 빠르게, 그리고 안전하게 전 세계로 보내는 일은 DNS·CDN·인증서가 함께 풉니다.

이번 챕터에서 배울 것
  • 1관리형 DNS가 단순 주소 변환을 넘어 트래픽을 제어하는 방법을 안다
  • 2CDN이 엣지 캐싱으로 지연·부하를 줄이는 원리를 설명할 수 있다
  • 3캐시 TTL·캐시 키·무효화가 왜 중요한지 이해한다
  • 4TLS 인증서를 관리형으로 자동 갱신하는 이점을 안다
  • 5DNS→CDN→LB→원본으로 이어지는 요청 경로를 그릴 수 있다

이름으로 안내하고, 가까운 곳에서 답한다

💡개념

관리형 DNS — 주소록을 넘어선 트래픽 제어

DNS는 기본적으로 example.com → IP를 알려줍니다. 관리형 DNS(Route 53 등)는 여기에 트래픽 제어를 더합니다.

  • failover: 헬스체크로 주(primary)가 죽으면 예비(secondary)로 자동 전환
  • 지연/지리 기반: 사용자와 가까운 리전·엣지로 보냄
  • 가중치: 10%만 새 버전으로 보내는 점진 배포([[release-strategy]])

같은 도메인이라도 누가·어디서 묻느냐에 따라 다른 답을 줄 수 있습니다.

💡개념

CDN — 콘텐츠를 사용자 옆으로 옮긴다

CDN은 이미지·JS·CSS·동영상 같은 정적 콘텐츠를 전 세계 엣지 로케이션에 캐싱합니다. 사용자는 먼 원본(origin) 대신 가까운 엣지에서 받아 지연이 줄고, 원본 서버는 같은 파일을 매번 안 보내도 되니 부하·전송비가 줍니다.

핵심 개념 두 가지: TTL(엣지가 콘텐츠를 보관하는 시간)과 캐시 키(무엇을 기준으로 같은 콘텐츠로 볼지). 이 둘을 모르면 캐시가 너무 오래 남거나(옛 버전 노출) 너무 안 먹습니다(원본 부하 그대로).

DNS → CDN → 로드밸런서 → 원본 요청 경로

💡개념

TLS 인증서 — 관리형으로 자동 갱신

HTTPS를 위한 TLS 인증서를 수동 관리하면 '갱신을 잊어 만료→전체 다운' 사고가 납니다. 관리형 인증서 서비스(예: ACM)는 무료 발급·자동 갱신되며, 로드밸런서나 CDN에 붙여 HTTPS를 종단합니다. 운영에서 인증서는 "한 번 붙이고 자동으로 갱신되게" 하는 것이 정답입니다.

콘텐츠 성격별 전달 전략
이미지·폰트·JS/CSS 번들(잘 안 바뀜)CDN + 긴 TTL + 파일명 해시바뀌면 파일명이 바뀌어 캐시 자동 갱신
자주 바뀌는 API 응답(동적)캐싱 최소/무캐싱 또는 짧은 TTL오래된 데이터 노출 방지
전 세계 사용자 대상 서비스지연 기반 라우팅 + CDN가까운 리전·엣지로 안내
리전 장애 대비DNS failover + 멀티리전 원본주 리전 다운 시 예비로 전환
1도메인 레코드 확인

어떤 레코드가 어디를 가리키는지, 라우팅 정책이 걸렸는지 확인합니다.

로컬 터미널
aws route53 list-resource-record-sets --hosted-zone-id "$ZONE_ID" \
  --query "ResourceRecordSets[?Type=='A'].{Name:Name,Alias:AliasTarget.DNSName,Policy:Failover}" --output table
OUTPUT
+------------------+-----------------------------+----------+
|  app.example.com |  d111.cloudfront.net         |  -       |
|  api.example.com |  alb-123.elb.amazonaws.com   |  PRIMARY |
+------------------+-----------------------------+----------+
aws route53 list-resource-record-sets
2실제 응답이 엣지에서 오는지 확인

응답 헤더로 CDN 캐시 적중 여부를 봅니다(X-Cache: Hit from cloudfront 등). HTTPS·캐시 동작을 한 번에 점검합니다.

로컬 또는 서버
curl -sI https://app.example.com/static/main.abc123.js | grep -iE "x-cache|cache-control|server"
OUTPUT
server: CloudFront
x-cache: Hit from cloudfront
cache-control: public, max-age=31536000, immutable
curl -I
🔍실행 후 확인할 것
  • x-cache가 'Miss'만 반복되면 — 캐시 키 설정 과다(쿼리·쿠키별 분리)나 짧은 TTL로 캐시가 안 먹는 것. 원본 부하·비용 그대로
  • Cache-Control max-age 값 — 정적 자산인데 너무 짧으면 효과↓, 자주 바뀌는데 너무 길면 옛 버전 노출
  • 파일명에 해시가 없는 정적 자산 + 긴 TTL — 배포해도 사용자에게 안 바뀜. 해시 파일명 또는 무효화 필요
  • 인증서 만료일(NotAfter) — 자동 갱신 대상인지, 임박했는지. 수동 인증서면 만료 모니터링 필수

상황: 새 버전을 배포해도 CDN/브라우저가 옛 정적 파일을 계속 제공.

원인: 정적 파일 이름이 그대로(main.js)인데 긴 TTL로 엣지·브라우저에 캐시돼 있음. TTL이 끝나기 전엔 새 파일을 안 받아옴.

진단: curl -Ix-cachecache-control max-age 확인 → 파일명이 빌드마다 바뀌는지 확인.

해결: 정적 자산은 내용 기반 해시 파일명(main.abc123.js)을 쓰면, 내용이 바뀔 때 파일명이 바뀌어 캐시가 자연히 갱신됩니다(HTML은 짧은 TTL). 급하면 CDN 무효화(invalidation) 를 호출. 무효화 남발은 비용·지연이 있으니 해시 파일명이 근본 해법입니다.

💼
실무 맥락
현업 패턴

"전 세계 사용자인데 특정 지역만 느려요"의 단골 해법이 CDN 도입과 지연 기반 라우팅입니다. 반대로 "CDN을 붙였는데 원본 부하가 안 줄어요"는 거의 항상 캐시 키·TTL 설정 문제 — 캐시 히트율(x-cache Hit 비율)을 지표로 보고 튜닝합니다.

인증서 만료로 인한 전사 장애는 의외로 흔합니다. 관리형 인증서 자동 갱신 + 만료 임박 알림([[cloud-observability-governance]])을 기본으로 둡니다. DNS는 변경이 전 세계에 퍼지는 데 시간(TTL)이 걸리므로, 마이그레이션 전 TTL을 미리 줄여두는 것도 실무 팁입니다.

다음 모듈에서는 컴퓨트·네트워크를 떠나 데이터가 사는 곳 — 오브젝트·블록·파일 스토리지의 종류와 선택 기준으로 들어갑니다.

지식 확인

퀴즈 — 4문제

Q1

관리형 DNS(예: Route 53)가 단순 '이름→IP' 변환을 넘어 제공하는 기능은?

Q2

CDN(예: CloudFront)이 지연을 줄이는 핵심 원리는?

Q3

캐시 무효화(invalidation)/캐시 키를 이해하지 못하면 생기는 문제는?

Q4

HTTPS를 위해 TLS 인증서를 적용할 때 흔한 실무 방식은?

0 / 4 답변

이것도 배워보세요