
AWS S3는 저장하는 건 저렴한데, S3에 직접 엑세스하는건 비싸고 느리다.
그래서 CDN(Content Delivery Network)을 이용해 캐싱을 많이하는데, AWS에서는 CloudFront 서비스를 이용해서 CDN을 사용할
Amazon CloudFront는 .html, .css, .js 및 이미지 파일과 같은 정적 및 동적 웹 콘텐츠를 사용자에게 더 빨리 배포하도록 지원하는 웹 서비스이다. CloudFront는 엣지 로케이션이라고 하는 데이터 센터의 전 세계 네트워크를 통해 콘텐츠를 제공한다. CloudFront를 통해 서비스하는 콘텐츠를 사용자가 요청하면 지연 시간이 가장 낮은 엣지 로케이션으로 요청이 라우팅되므로 가능한 최고의 성능으로 콘텐츠가 제공된다.

AWS에서 사용하는 기능이니 고가용성은 기본적으로 보장이 될거고, SSL/TLS 인증서를 사용할 수 있어 보안적인 측면도 보장된다.
그리고 콘텐츠가 지연 시간이 가장 낮은 엣지 로케이션에 있는 경우 CloudFront가 콘텐츠를 즉시 제공해 속도 면에서도 많은 이점을 얻을 수 있다.

하고있는 프로젝트는 Vite 기반 React로 이루어져 있고 CSR 기반이기 때문에 정적 리소스를 대규모로 특화 되어 있는 S3를 선택했다. 또한 CDN 방식인 Cloudfront를 사용해 S3에 직접적 접근을 막고 CloudFront로 접근하여 보안과 속도 두 가지 이점을 모두 잡고자 했다. CloudFront는 Edge 서버를 사용하여 콘텐츠를 캐싱하고 가까운 지역의 서버에서 콘텐츠를 전송할 수 있어 속도가 빠르다는 이점이 있다.

AWS S3 버킷을 만들 때 AWS 리전은 보통 서울로 하고 나머지는 기본 설정으로 버킷 만들기를 하면 된다.

만든 Bucket을 클릭하여 Build한 파일들을 Upload를 한다.
Create-React-APP 으로 만든 경우 .build폴더, vite로 만든 경우는 .dist 폴더을 업로드하면 된다.
이때 주의할 것은 .dist 폴더를 한꺼번에 옮기는 것이 아닌 파일 혹은 폴더를 하나하나 옮겨야 한다.


S3 에서 생성한 domain 선택한다.
이후 원본 엑세스(Origin access) 에서 원본 액세스 제어 설정(권장) (Origin access control settings) 을 선택한다.

나머지는 기본 설정 되있는 것으로 다 하면 된다.
웹 애플리케이션 방화벽(WAF)은 보안 보호 비활성화 하면 된다.
(보안 보호 활성화하면 요금이 더 나감)


Copy policy 이후 '정책을 업데이트하려면 ~~~.. ' 링크를 클릭하여 이동한다.

버킷 정책(Bucket policy)에 편집을 누른 후 아까 복사한 것을 붙여넣은 후 저장한다.



-> Cloudfront에 들어가서 Error pages 에서 Create custom error response 클릭해서 403 (+404) error code 선택하고 Customize error response
는 Yes 누르고 Response page path 는 /index.html 입력하고 HTTP Response code 는 200 으로 선택!