AWS_Cloud

9강 Cloudfront 실습 노트 (AWS Cloud)

Chansman 2025. 4. 8. 16:52

📚 CloudFront의 역할과 CDN 서비스의 개념

CloudFront는 AWS에서 제공하는 CDN(Content Delivery Network) 서비스로, 전 세계 사용자에게 콘텐츠를 빠르고 효율적으로 전달하는 역할을 합니다. CDN은 '컨텐츠 전송 네트워크'로, 콘텐츠를 빠르게 전 세계에 전달하기 위한 전송 네트워크를 구축합니다.

CloudFront는 엣지 로케이션을 통해 콘텐츠를 캐싱하여 전 세계로 빠르게 전달합니다. 이로 인해 사용자에게 제공되는 콘텐츠는 빠른 로딩 시간을 보장할 수 있습니다. 또한 AWS에서 CloudFront와의 데이터 전송은 무료로 제공되며, DDoS 공격 방어도 기본적으로 제공됩니다.


🌍 AWS 인프라 이해하기

AWS의 글로벌 인프라는 매우 중요한 개념입니다. 리전지역을 나타내며, 가용 영역은 리전 내의 물리적 데이터 센터들을 묶은 집합입니다. 예를 들어, 서울 리전에는 4개의 가용 영역이 존재하며, 각 가용 영역은 물리적으로 분리되어 있어 고가용성과 이중화 구성이 기본 요소로 제공됩니다.

CloudFront는 전 세계 곳곳에 존재하는 엣지 로케이션을 통해 콘텐츠를 빠르게 제공하는데, 이러한 로케이션이 가용 영역보다 많고 더 촘촘하게 분포되어 있어 성능이 크게 향상됩니다.


📦 CloudFront의 기본 개념

CloudFront의 가장 중요한 개념은 **디스트리뷰션(배포)**입니다. 디스트리뷰션은 콘텐츠를 전달하는 단위로, 각 배포는 고유의 도메인을 가지고 있으며, 기본적으로 "클라우드프론트 닷넷"이라는 도메인에 고유한 아이디가 부여됩니다. 이 배포를 통해 콘텐츠를 전 세계로 전달할 수 있습니다.

CloudFront는 데이터를 캐싱하여 빠르게 전송하며, **오리진(원본)**이 있어야 합니다. S3 버킷은 가장 흔히 사용되는 오리진으로, EC2나 로드밸런서(ELB) 같은 다른 서버들도 오리진으로 설정할 수 있습니다.


🗂️ CloudFront와 S3 버킷 설정 과정

CloudFront를 사용할 때, 콘텐츠를 캐싱하려면 오리진으로 데이터를 가져오는 S3 버킷을 설정해야 합니다. 여기서는 S3 버킷을 설정하고 파일을 업로드하는 과정을 다룹니다. 기본적으로 S3 버킷은 외부에서 접근할 수 없으며, 공용 객체에 대한 접근은 제한됩니다.

배포를 생성하기 전에 S3 버킷을 준비하고, 파일을 업로드한 후 CloudFront 배포를 생성하는 과정으로 진행됩니다. 이때, 버킷 이름을 중복 방지를 위해 변경하는 것도 좋습니다.


☁️ CloudFront 배포 과정

CloudFront 배포를 생성하려면, 오리진을 선택해야 합니다. 오리진으로는 S3 버킷을 선택하고, 원본 액세스 제어 설정을 해야 합니다. **OAC(Origin Access Control)**를 사용하여 CloudFrontS3 버킷의 객체에 접근할 수 있도록 허용합니다.

배포를 생성한 후에는 S3 버킷 정책을 업데이트하여 CloudFront 배포S3 버킷 간의 연결을 안전하게 설정합니다. 이 설정을 통해 외부에서 직접 접근할 수 없고, 오직 CloudFront를 통해서만 접근이 가능하게 됩니다.


🚀 CloudFront 배포 설정 및 정책 관리

CloudFront 배포를 생성할 때 기본적인 캐시 동작은 기본값을 사용하지만, 필요에 따라 방화벽이나 **웹 애플리케이션 방화벽(WAF)**을 설정할 수 있습니다. 이때, 방화벽 설정을 활성화하면 추가 요금이 발생할 수 있으므로, 실제 사용에 따라 선택적으로 설정하면 됩니다.

루트 객체를 설정하는 것도 중요한 과정입니다. 루트 객체는 CloudFront 배포 주소에 접속할 때 기본적으로 나타날 파일을 지정하는데, 예를 들어 hello.txt를 루트 객체로 설정하면 해당 파일이 기본으로 출력됩니다.

배포 생성은 약 5~10분 정도 걸리며, S3 버킷 권한을 업데이트해야 배포가 정상적으로 작동합니다. 이 과정에서 정책을 복사하여 S3 버킷에 붙여넣고 저장하면, CloudFront를 통해 S3 버킷의 객체에 접근할 수 있습니다.


🗂️ CloudFront 배포 및 캐싱 관리

CloudFront에서 콘텐츠를 캐싱할 때, 초기에는 **"miss from cloudfront"**라는 상태가 발생하고, 캐시가 완료되면 **"hit from cloudfront"**로 표시됩니다. 캐싱된 데이터는 스테일(구식) 데이터가 될 수 있기 때문에, 최신 데이터를 항상 제공하려면 캐시 무효화(Invalidation) 기능을 사용해야 합니다.

무효화는 캐싱된 데이터를 새로 고침하여 최신 데이터를 받아올 수 있도록 해주는 기능입니다. 이때, 고유 해시 값을 추가하여 파일 이름을 변경하면 캐싱 문제를 피할 수 있습니다. 예를 들어, bundle.js와 같은 파일을 해시값을 추가하여 이름을 변경하면 캐시 문제를 방지할 수 있습니다.


7.1 CloudFront 배포 설정 방법

배포 설정 시, 루트 객체를 설정하고, 엣지 로케이션을 선택하는 것이 중요합니다. 모든 엣지 로케이션을 사용하면 최고의 성능을 낼 수 있습니다. 배포 생성 후, 정책 복사 버튼을 눌러 S3 페이지로 이동하여 정책을 붙여넣고 저장하면 됩니다.


7.2 CloudFront 정책 개요

정책에는 액세스를 허용하는 설정이 포함되어 있으며, CloudFrontS3 버킷GetObject 액션을 수행할 수 있도록 설정됩니다. 이때 소스 ARN이 CloudFront 배포 ARN일 경우만 허용하도록 설정되어 있습니다.


7.3 CloudFront 객체 접근 실습

S3 버킷의 index.html 파일에 직접 접근하려고 시도했을 때, "액세스 디나이드" 메시지가 표시됩니다. 이는 보안을 강화하기 위한 설정입니다. 대신, CloudFront 배포 도메인을 통해 접근하면 정상적으로 파일이 출력됩니다.


7.4 캐싱 및 데이터 히트 상태

CloudFront에서 콘텐츠가 캐싱되면, **"miss from cloudfront"**가 **"hit from cloudfront"**로 변경됩니다. 그러나 캐싱된 데이터가 오래되면 스테일 데이터가 될 수 있어, 최신 데이터를 확인하려면 캐시 무효화를 사용해야 합니다.


7.5 CloudFront의 무효화 기능

캐싱된 데이터를 최신 상태로 유지하려면, 무효화 기능을 사용하여 캐시된 데이터를 삭제하고 새로운 데이터를 받아올 수 있습니다. 이때 파일 이름에 고유 해시 값을 추가하는 방식도 효과적인 전략이 될 수 있습니다.


7.6 CloudFront 배포 및 정리 과정

배포가 생성된 후, S3 버킷 정책을 업데이트하여 CloudFront가 데이터를 안전하게 접근할 수 있도록 설정해야 합니다. 이후 배포를 비활성화하고 삭제하는 과정을 통해 리소스를 정리합니다.