BLOG
보안 강화 및 비용 절감과 동시에 컨텐츠 저장 및 가속화
빠른 속도와 큰 규모의 콘텐츠 저장 및 전달
웹 사이트, 응용 프로그램 또는 다른 웹 리소스가있는 경우 정적 컨텐츠가 있을 수 있습니다. 정적 컨텐츠에는 이미지, 비디오 또는 음악과 같은 파일 또는 .css 또는 js와 같은 스크립트가 포함됩니다. 클라우드 시대 이전에는 이러한 파일을 표준 서버에 저장한 다음 전 세계 모든 시청자에게 인터넷을 통해 특정 지리적 위치에서 제공할 수 있었습니다. 그러나 클라우드 서비스의 경우 보다 빠른 전달과 확장성을 제공하는 솔루션이 있습니다. 이 글에서는 Amazon S3 (Simple Storage Service) 및 Amazon CloudFront를 사용하여 정적 컨텐츠를 저장, 보안 및 전달하는 방법을 배우게 됩니다. 단 몇 번의 클릭만으로 시작하는 데 도움이 되도록 이러한 서비스를 신속하게 프로비전할 수 있는 CloudFormation 템플릿을 포함 시켰습니다. (나중에 설정 과정을 안내해 드리겠습니다.)
첫 번째 단계는 안전하고 확장 가능한 방식으로 콘텐츠를 저장하는 것입니다. 인터넷에서 사용 가능하게 하려는 정적 컨텐츠에 대한 간단하고 유연한 접근법은 Amazon S3 “버킷”에 저장하는 것입니다. S3는 설치 및 사용이 쉽고 모든 파일을 저장 및 검색하도록 설계되었거나 인터넷상의 어느 곳에서나 볼 수 있습니다. 사용이 간편하며 가용성이 높고 확장 가능한 데이터 저장소를 저렴한 비용으로 제공합니다.
콘텐츠를 클라우드의 S3 버킷에 넣으면 많은 일이 훨씬 쉬워집니다. 첫째, S3 버킷이 자동으로 확장되므로 특정 저장 공간을 계획하고 할당할 필요가 없습니다. 또한 S3는 서버가 없는 서비스이기 때문에 직접 파일을 저장하는 서버를 관리하거나 패치할 필요가 없습니다. 단지 콘텐츠를 넣고 빼내기만 하면 됩니다. 마지막으로 응용 프로그램에 서버가 필요한 경우 (예를 들어 동적 응용 프로그램이 있기 때문에) 정적 콘텐트에 대한 요청을 처리할 필요가 없기 때문에 서버를 더 작게 만들 수 있습니다.
정적 컨텐츠를 S3와 함께 저장하면 많은 이점을 얻을 수 있습니다. 그러나 응용 프로그램의 성능과 보안을 최적화하면서 비용을 효율적으로 관리하려면 Amazon CloudFront가 S3 버킷과 함께 작동하여 콘텐츠를 제공하고 보호하도록 설정하는 것이 좋습니다. CloudFront는 전 세계적으로 정적이며 동적인 웹콘텐츠, 비디오 스트리밍 및 API를 안전하고 규모에 맞게 제공하는 CDN (Content Delivery Network) 서비스입니다. 설계상으로는 CloudFront에서 데이터를 전달하는 것이 S3에서 사용자에게 직접 전달하는 것보다 비용 효율적일 수 있습니다.
CloudFront는 에지 로케이션이라고 하는 전세계 데이터 센터 네트워크를 통해 콘텐츠를 제공합니다. 에지 서버를 사용하여 콘텐츠를 캐시하고 제공하면 시청자가 있는 곳과 가까운 위치에 콘텐츠를 제공하여 성능을 향상시킬 수 있습니다. CloudFront는 다음지도에서 볼 수 있듯이 전세계 모든 지역에 에지 서버를 보유하고 있습니다.
사용자가 CloudFront에서 제공하는 콘텐츠를 요청하면 해당 요청은 근처의 에지 로케이션으로 라우팅됩니다. CloudFront에 요청된 파일의 캐시된 복사본이 있는 경우 CloudFront는 이를 사용자에게 전달하여 빠른 (대기 시간이 짧은) 응답을 제공합니다. 요청한 파일이 아직 캐시되지 않은 경우 CloudFront는 오리진을 검색합니다 (예 : 콘텐츠를 저장한 S3 버킷). 그런 다음 동일한 콘텐츠에 대한 다음 로컬 요청의 경우 이미 인근에 캐시되어 즉시 게재할 수 있습니다.
에지 로케이션에서 컨텐츠를 캐싱함으로써 CloudFront는 S3 버킷의 부하를 줄이고 컨텐츠를 요청할 때 사용자에게보다 빠른 응답을 보장합니다. 또한 CloudFront를 사용하여 콘텐츠에 대한 데이터 전송은 S3에서 직접 파일을 제공하는 것보다 비용 효율적이며 S3에서 CloudFront에 대한 데이터 전송 요금은 없습니다. CloudFront에서 인터넷으로 전달되는 비용과 요청 수수료 (전체 가격정보 참조)만 지불합니다.
예를 들어 동적 콘텐츠를 제공하기 때문에 콘텐츠를 캐시하지 않으려는 경우에도 에지 로케이션이 사용자와 더 가깝게 연결을 설정하고 유지 관리하므로 CloudFront는 콘텐츠 전달을 향상시킵니다. CloudFront는 또한 정적 및 동적 컨텐츠 모두에 대해 더 나은 성능을 제공하기 위해 전세계 네트워크 문제를 우회하는 데 도움이 되는 인터넷상의 별도 백본인 AWS 글로벌 사설 네트워크를 활용합니다.
그림이 작동하는 방식을 명확히 하는 데 도움이 될 수 있으므로 다음 그림에 표시된 시나리오를 살펴보십시오. 유럽의 한 리전에 위치한 S3 버킷에 콘텐츠를 저장했으며, 전세계에 있는 사용자들이 해당 콘텐츠에 액세스합니다. 화살표가 표시되면 사용자가 콘텐츠를 요청할 때마다 요청은 공용 인터넷을 통해 소스 위치인 유럽의 S3 버킷으로 이동해야 합니다. 사용자의 위치에 따라 시간이 오래 걸릴 수 있습니다. 지연으로 인해 일부 사용자 요청이 반송되어 페이지에서 오류를 반환할 수도 있습니다.
이제 S3 버킷으로 CloudFront를 설정했다고 상상해보십시오. 다음 그림에서 콘텐츠를 얻기 위해 전 세계를 횡단하는 요청이 더 이상 없음을 알 수 있습니다. 대신 요청은 “가장 잠재성이 적은” 에지 로케이션으로 라우팅됩니다. 즉, 전달 속도 측면에서 가장 가까운 것입니다. 그런 다음 CloudFront는 녹색 화살표와 같이 캐시된 콘텐츠를 주변의 요청한 사용자에게 신속하고 직접 제공합니다. 콘텐츠가 아직 에지 서버로 캐시되지 않은 경우 CloudFront는 S3 버킷 오리진에서 콘텐츠를 검색합니다. 또한 콘텐츠가 공용 인터넷 대신 AWS 사설 네트워크를 통과하고 CloudFront가 TCP 핸드 셰이크를 최적화하므로 요청과 콘텐츠 리턴은 공용 인터넷을 통한 액세스보다 훨씬 빠릅니다.
콘텐츠 보호
종종 인터넷을 통해 콘텐츠를 배포하는 회사는 유료 고객과 같이 선택한 사용자만이 요청할 수 있도록 문서, 비즈니스 데이터, 미디어 스트림 또는 기타 콘텐츠에 대한 액세스를 제한하려고 합니다. CloudFront를 사용하면 지역 제한, URL 지정 및 쿠키 지정과 같은 추가 액세스 제한을 설정하여 다른 기준에 따라 콘텐츠에 대한 액세스를 제한 할 수 있습니다.
CloudFront의 또 다른 보안 기능은 Origin Access Identity (OAI)입니다. 이 기능은 S3 버킷 및 해당 콘텐츠에 대한 액세스를 CloudFront 및 해당 작업만으로 제한합니다. 이 글의 CloudFormation 템플릿에는 콘텐츠가 보호되고 제한되도록 OAI가 포함되어 있습니다.
CloudFront에는 악의적 공격으로부터 추가 보호 기능이 포함되어 있습니다. 이러한 안전장치를 제공하기 위해 CloudFront는 웹 응용프로그램을 일반적인 웹 악용으로부터 보호하는 웹 응용프로그램 방화벽인 AWS WAF와 AWS에서 실행되는 웹 응용프로그램의 관리되는 DDoS 보호 서비스인 AWS Shield를 모두 통합합니다. AWS WAF를 사용하면 IP 주소 또는 콘텐츠 요청의 쿼리 문자열 값과 같이 사용자가 지정한 조건에 따라 콘텐츠에 대한 액세스를 제어할 수 있습니다. 그런 다음 CloudFront는 조건이 충족되면 요청된 콘텐츠로 응답하거나 HTTP 403 상태 코드 (금지됨)로 응답합니다. 모든 CloudFront 고객은 추가 비용 없이 AWS Shield Standard의 자동 보호 혜택을 누릴 수 있습니다. 그러나 DDoS 공격에 대한 심층적인 통찰력, 개선된 완화 및 비용 보호를 원하는 고객은 AWS Shield Advanced를 사용할 수 있습니다.
시작하기
가능한한 턴키 방식으로 S3 및 CloudFront를 설정하기 위해 시작할 때 사용할 수 있는 CloudFormation 템플릿을 만들었습니다. 템플릿은 S3 버킷을 생성한 다음 Origin Access Identity가있는 CloudFront 배포를 추가합니다.
다음 단계에 따라 사용자 환경의 설정을 복제하십시오.
1) 콘솔에 로그인 한 다음 아래의 Launch Stack 버튼을 클릭하여 AWS 계정에 CloudFormation 스택을 시작합니다. 이 스택은 버지니아 북부 (us-east-1) 리전에서 시작됩니다.
2) 마법사를 통해 마지막 단계에서 만들기(Create) 버튼을 선택합니다. 일반적으로 CloudFormation 스택 작성이 완료되는 데 약 15 분이 걸립니다. 실행 중에 잠시 휴식을 취한 다음 계속할 수도 있습니다.
3) CloudFormation의 상태가 CREATE_COMPLETE로 변경된 후 스택을 선택한 다음 출력 탭을 선택합니다. S3 버킷 이름 (S3BucketName)과 CloudFront 도메인 이름 (CfDistributionDomainName)의 두 값을 적어 두십시오. 나중에 파일에 대한 액세스를 테스트 할 때 사용합니다.
4) S3 콘솔을 열고, CloudFormation이 만든 S3 버킷에 이미지를 올리세요. 이번 예에서 image.jpg 라는 파일을 업로드하였습니다.
5) 파일이 업로드 된 후에 파일에 액세스 하기 위한 URL을 선택하세요. CloudFormation이 OAI 기능을 설정하였기에 버킷에 있는 파일은 S3 에서 공개적으로 액세스가 가능하지 않습니다. 따라서 아래 스크린샷과 같은 비슷한 메시지를 보게 될 것입니다.
6) 대신 CloudFront 배포 도메인 이름을 사용하여 파일에 액세스 할 수있는 URL을 입력하십시오. 3 단계에서 복사한 CloudFront 배포 값을 사용하고 6 단계에서 S3 버킷에 추가한 파일의 이름을 추가하십시오. 이 예제에서는 Java라는 이름의 강아지 이미지를 업로드 한 것을 볼 수 있습니다. CloudFront에는 S3 버킷에 대해 OAI 액세스가 구성되어 있기 때문에 CloudFront URL을 사용할 때 이미지에 액세스 할 수 있습니다.
성능 트랙킹
CloudFormation 템플릿을 사용하여 S3 버킷을 만든 다음 CloudFront를 추가하여 S3 콘텐츠에 액세스했습니다. 그러나 CloudFront의 추가가 추가단계에 가치가 있습니까? 전 세계의 다른 로케이션에서 이미지를 볼 때 성능이 향상되는지 봅시다. 이를 확인하기 위해 서로 다른 지리적 위치에서 사이트 및 콘텐츠 로드 시간을 측정하는 온라인 플랫폼을 사용합니다.
저의 S3 버킷 오리진은 북 버지니아 리전에 있습니다. CloudFront를 사용하거나 혹은, 사용하지 않고 파일을 제공한 결과를 비교하기 위해 동일한 리전에 동일한 이미지로 CloudFront를 추가하지 않은 S3 버킷을 만들었습니다. 다음 차트에서 볼 수 있듯이 스웨덴 (스톡홀름), 미국 (뉴욕) 및 호주 (멜버른)의 세 곳에서 로드 시간을 테스트했습니다.
각각의 로케이션에서 저는 4개의 테스트를 실행했습니다. 일반적으로 CloudFront가 있는 콘텐츠에 대한 첫 번째 GET 요청은 CloudFront가 없는 동일한 요청보다 약간 빠릅니다. 그 이후의 각 GET 요청은 훨씬 빠릅니다. 이것은 캐싱 때문입니다. S3 버킷에서 제공되는 파일은 첫 번째 GET 요청 이후에 캐시되며 현재 테스트를 수행하는 곳과 가장 가까운 에지 로케이션에 저장됩니다. 때로는 파일이 100 배나 빠른 속도로 돌아옵니다.
어때요, 정말 간단하지 않나요? S3로 CloudFront를 설정하는 것이 얼마나 쉽고 간단한지 이해하시고, 다음의 장점들 또한 알아주셨으면 좋겠습니다. 1) 사용자에게 훨씬 빠르게 콘텐츠를 제공하여 응용 프로그램의 성능을 향상시키고 2) CloudFront의 보안 기능과 함께 응용프로그램의 보안이 확장됩니다. 그리고 CloudFront에서 인터넷으로 데이터를 전송할 때의 가격이 S3에서 인터넷으로 전송되는 가격보다 낮은 경우가 종종 있으므로 AWS 비용을 줄일 수도 있습니다.
원문 URL: https://aws.amazon.com/ko/blogs/networking-and-content-delivery/amazon-s3-amazon-cloudfront-a-match-made-in-the-cloud/
** 메가존 TechBlog는 AWS BLOG 영문 게재글중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아서, 정기적으로 게재하고 있습니다. 추가로 번역및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.