CDN 동작 원리와 CloudFront 캐싱 설정
CDN의 동작 원리와 장단점, 캐싱 전략, 그리고 AWS CloudFront로 CDN을 구성하는 방법을 조사해 정리했다.

CDN이란?
CDN(콘텐츠 전송 네트워크)은 지리적으로 분산된 여러 개의 서버
→ 웹 콘텐츠를 사용자와 가까운 곳에서 전송함으로써 전송 속도를 높임
- 웹 페이지, 이미지, 동영상 등의 콘텐츠를 사용자의 실제 위치와 가까운 서버에 캐싱
- 사용자와 가장 가까운 서버에서 콘텐츠를 전송 → 페이지 로드 시간 단축, 더 빠른 고성능 웹 환경 경험
CDN의 동작 원리
CDN은 세 가지 종류의 서버에 의존
- 오리진 서버
- 콘텐츠의 원본 버전이 포함되어 있으며 원본 소스 역할을 함
- 콘텐츠를 업데이트해야 할 때마다 오리진 서버에서 변경
- 오리진 서버는 콘텐츠 공급업체가 소유하고 관리 or 써드파티 클라우드 공급업체의 인프라(Amazon의 AWS S3 또는 Google Cloud Storage)에서 호스팅
- 엣지 서버
- 전 세계 여러 지리적 위치에 위치함; ‘PoP(Point of Presence)’
- PoP 내의 엣지 서버는 오리진 서버에서 복사된 콘텐츠를 캐싱, 인근 사용자에게 해당 콘텐츠를 전송
- 사용자가 오리진 서버의 콘텐츠에 대한 접속을 요청하면 지리적으로 가까운 엣지 서버에 캐싱된 콘텐츠 사본으로 리디렉션
- 캐싱된 콘텐츠가 오래된 경우 엣지 서버는 오리진 서버에 업데이트된 콘텐츠를 요청
- CDN 엣지 서버는 CDN 호스팅 공급업체가 소유하거나 관리
- DNS 서버
- DNS(도메인 네임 시스템) 서버는 오리진 및 엣지 서버의 IP 주소를 추적하고 제공
- 클라이언트가 오리진 서버에 요청을 보내면, DNS 서버는 콘텐츠를 더 빠르게 제공할 수 있는 페어링된 엣지 서버의 이름으로 응답
CDN의 장단점
장점
- 데이터 접근 속도 향상, 지연 시간 단축
- 서버 부하 분산
- 보안 강화
- DDoS 공격과 같은 네트워크 위협으로부터 보호
- 가용성 향상
- 하나의 서버에 문제가 생겨도 서비스에 영향 적음
- 비용 절약
- 글로벌 인프라에 직접 투자 X
- 트래픽을 효율적으로 관리함으로써 대역폭 비용 절약
- 글로벌 서비스 용이
단점
- 특정 국가나 지역만을 대상으로 하는 웹 서비스의 경우 CDN 필요 X
- CDN 서버가 충분하지 않거나 성능이 안정적이지 않으면 시스템 전체에 문제 발생
- 부하 분산 실패, 트래픽 급증 처리 불가능 → 웹사이트 속도 저하, 서비스 중단
CDN을 적용한다면?
- 이점
- 정적 및 동적 콘텐츠의 전송
- CDN은 정적 콘텐츠(웹 사이트 헤더 이미지, 로고, 글꼴 스타일 등)와 동적 콘텐츠(소셜 미디어 뉴스 피드, 날씨 보고서, 로그인 상태, 채팅 메시지 등)를 효율적으로 전송
- 콘텐츠 캐싱
- 캐싱을 통해 데이터 액세스를 가속화
- 정적 및 동적 콘텐츠의 전송
- 대표적인 CDN 사용 사례 → 전 세계 어디서나 사용자들이 지연 없이 콘텐츠를 소비할 수 있도록 지원
- 넷플릭스는 전 세계 사용자들에게 안정적인 동영상 스트리밍 서비스를 제공하기 위해 자체 CDN을 구축
- 에어비앤비는 전 세계 고객에게 숙박 예약 서비스를 제공하기 위해 CDN 기술을 활용
- NC소프트나 카카오게임즈와 같은 온라인 게임 기업들도 북미나 유럽과 같이 지리적으로 먼 지역의 사용자에게 안정적이고 빠른 게임 플레이 환경을 제공하기 위해 CDN을 사용
- 특히 글로벌 비즈니스를 운영하거나 대용량의 콘텐츠를 제공하는 웹 사이트에 매우 중요
CDN 캐싱 전략과 설정
캐시 키 (Cache Key)
- 어떤 기준으로 컨텐츠를 캐싱할 것인지 결정
- 기본적으로 URL로 캐싱
- 설정에 따라 Header와 Cookies, 쿼리스트링 등을 사용 가능 (같은 URL로 접속했지만 헤더나 쿠키를 이용해 영어로된 컨텐츠를 보여주거나 광고를 보여주거나 등 다르게 세팅 가능)
TTL (Time to live)
- 캐싱된 아이템이 살아있는 시간 → TTL초 이후에는 캐싱에서 삭제
캐시 정책
- Minimum TTL : 오리진으로 요청이 전달되기 전에 Cloudfront캐시에 머무르는 최소 시간
- Maximum TTL : 오리진으로 요청이 전달되기 전에 Cloudfront캐시에 머무르는 최대 시간, 특정 HTTP 헤더(Cache-Control, max-age…)가 존재할 경우에만 작동.
- Default TTL : 오리진으로 요청이 전달되기 전에 Cloudfront캐시에 머무르는 기본시간 (24시간 1일)
- Forward Cookies : 오리진으로의 쿠키 정보 포워딩에 관한 설정, 오리진에는 쿠키를 처리하지 않기 때문에 쿠키를 전달하는 경우 가능성이 줄어든다
- QueryString Forwarding and Caching : 쿼리 스트링을 통해 각각의 컨텐츠를 버전별로 관리할 수 있다.
- QueryString whiteList : 쿼리스트링 포워딩 시 오리진으로 전달할 쿠키 정보의 필터링 역할을 한다.
AWS에서 CDN을 구현하려면?
→ AWS에서는 Amazon CloudFront가 CDN 서비스를 제공
1. S3 버킷 설정
- S3 버킷 생성: AWS S3에서 버킷을 생성하고 정적 콘텐츠를 업로드
- 퍼블릭 엑세스 설정: 콘텐츠에 퍼블릭 액세스를 허용
2. CloudFront 배포 생성
- CloudFront 서비스 선택: AWS Management Console에서 CloudFront 서비스를 선택
- 배포 생성: Web 배포를 선택하고, 오리진 도메인에 S3 버킷 URL을 입력
- 기본 캐시 동작 설정: 기본 설정을 사용하거나 필요에 따라 캐싱 동작을 조정
3. 도메인 이름 사용
- CloudFront 도메인 사용: CloudFront가 제공하는 도메인 이름을 통해 콘텐츠를 요청
- 커스텀 도메인 설정: 필요에 따라 DNS 설정에서 CNAME 레코드를 추가하여 커스텀 도메인을 설정
4. 코드 수정
- 클라이언트 경로 변경: 기존 URL 대신 CloudFront 도메인으로 변경
- 캐시 확인: CloudFront 배포 도메인에서 콘텐츠 요청 시 캐시 히트를 확인
