AWS2014. 5. 21. 11:04

ColudFront는 AWS에서 제공하는 CDN(Contents Delivery Network) 서비스입니다. S3에 서비스하고자 하는 파일들을 올려놓고 간단한 설정을 통해서 CDN을 이용할 수 있습니다.


Management Console에서 CloudFront메뉴로 들어간 다음 "Create Distribution"을 선택해서 CDN서비스를 시작할 수 있습니다. 서비스 종류에 따라서 다운로드용과 스트리밍용으로 구분이 됩니다. 



스트리밍이야 유투브등의 좋은 무료서비스도 많으니 다운로드를 살펴보도록 하겠습니다.

Download를 선택하고 다음으로 넘어가면 아래와 같은 화면이 나옵니다.

여기서 Origin Domain Name에 원본 파일이 있는 S3 bucket을 입력합니다. 해당 텍스트 박스를 클릭하면 그림과 같이 현재 자신이 보유하고 있는 S3의 목록이 나타납니다.


여기서 보면 S3 뿐만 아니라 Elastic Load Balancers도 선택할수 있습니다.

Elastic Load Balancers(ELB)는 AWS에서 제공하는 로드밸런서입니다. 이것역시 가상이며, 이 로드밸런서에 EC2를 할당해서 사용할 수 있습니다. CloudFront를 ELB에 설정하면 정적인 웹페이지에 CDN을 적용할 수 있습니다. 그러나 실제 웹페이지를 구성하다보면 페이지는 대부분동적으로 구성되게 됩니다. 그래서 CloudFront에 ELB를 적용하려면 웹페이지를 개발할때 잘 설계해서 개발해야 합니다.

S3목록을 선택하면 Origin ID는 자동으로 입력됩니다. 다음단계로 넘어가면 CloudFront에 대한 설정을 할 수 있습니다.

여기서 Path Pattern은 선택된 Bucket에서 어떤 대상들에게 CloudFront를 적용할 것인지를 나타냅니다. 기본설정은 해당 Bucket의 전체 객체에 적용하는 것이고, 생성한 다음에 CloudFront 관리화면에서 변경할 수 있습니다.

HTTP와 HTTPS 프로토콜을 모두 사용할 것인지 HTTPS 만 사용할 것인지 선택할 수 있고, Cache를 어떻게 관리할 것인지 선택할 수 있습니다. Use Origin Cache Headers를 선택하면 원본헤더에 있는 Cache-Control정보를 이용하고 Customize를 선택하면 직접 TTL 값을 입력해서 관리할 수 있습니다 .

마지막으로 Forward Query Strings는 동적인 페이지에 대해서는 지원을 하지 않는 CloudFront에서 나름의 방법으로 동적인 페이지를 지원해주는 방법입니다. Yes를 선택하면 URL을 입력할때 GET 방식으로 URL뒤에 요청을하는 파라메터를 인식해서 자동으로 구분해서 CDN을 적용해 줍니다. 그러나 POST방식은 인식하지 않습니다. 이 옵션을 No로 선택하면 캐싱성능이 개선됩니다. 다음으로 넘어갑니다.


Alternate Domain Names는 CloudFront에 CNAME을 적용하는 것입니다. CloudFront를 적용하게되면  Coludfront.net에 대한 주소가 생성되게 되는데 사용자가 원하는 도메인 명을 사용하고 싶을때 이부분을 설정하면 됩니다.

Default Root Object는 CloudFront에 접속했을때 루트객체를 어떤것으로 할 것인지에 대한 것입니다.

Logging은 On을 선택하면 S3에 자동으로 CloudFront파일들에 대한 로깅정보가 남게 됩니다.

Comments는 주석입니다.

Distribution State는 CloudFront를 사용할것인지 아닌지에 대한 설정입니다.

모든 설정을 하고 다음으로 넘어가서 설정내용을 확인한 다음에 Create 버튼을 선택해서 CloudFront를 생성합니다.



CloudFront가 생성된 화면입니다. 여기서 붉은박스가 쳐져 있는 부분을 선택해서 세부설정 정보를 볼 수 있습니다.



위의 화면에서 Domain Name이라고 되어 있는 부분이 CloudFront 가 적용된 주소입니다.

사용자가 S3에 있는 객체에 접근할때 원래의 S3주소가 아니라 위에 있는 Domain Name에 있는 정보를 이용해서 접근하게 한다면 자동으로 CDN이 적용되게 됩니다. 이로써 CloudFront를 사용할 수 있게 되었습니다.

CloudFront를 사용하면서 한가지 주의할점은 CDN이다보니 데이터들이 캐시가 되는데 원본(예를들어 S3)에 있는 데이터들을 업데이트 하더라도 캐시된 데이터에 즉시 반영되지 않는다는 점입니다. 캐시된 데이터는 24시간뒤에 원본의 변경내역을 확인해서 반영하도록 됩니다. 그러나 실제 사용하다보면 즉시 변경내역을 반영해야할 일이 있는데요.

이때는 위 메뉴에서 Invalidations를 이용하면 됩니다.


Invalidations 메뉴에서 Create Invalidation 메뉴를 선택한 다음에 나오는 Create Invalidation창에 변경내역을 바로 적용하려는 객체들의 정보를 입력하고 Invalidate버튼을 눌러서 작업을 시작하면 원본의 변경내역이 캐시에 직접 반영되게 됩니다.

Invalidations기능은 한달에 1000개의 객체까지 무료이고 1000개가 넘어가면 과금이 됩니다. 또한 Invalidate 작업이 진행되는 동안 누군가가 해당 캐시에 접근하게되면 지우는것과 CloudFront를 이용하는 작업이 동시에 진행되게 되서 시간이 지연되거나 Invalidate작업이 여러번 일어날수도 있습니다.

Posted by 다오나무