아마존 웹 서비스를 다루는 기술 12장 - 2. S3와 CloudFront 연동하기

저작권 안내
  • 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
  • 책 또는 웹사이트의 내용을 발췌, 요약하여 강의 자료, 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.

전 세계에 콘텐츠를 배포하는 CDN 서비스인 CloudFront

이재홍 http://www.pyrasis.com 2014.03.24 ~ 2014.06.30

S3와 CloudFront 연동하기

가장 기본적인 형태인 S3 오리진에서 CloudFront 배포Distribution를 생성해보겠습니다.

그림 12-3 S3와 CloudFront 연동하기

AWS 콘솔로 접속한 뒤 메인 화면에서 Storage & Content Delivery의 S3를 클릭합니다.

그림 12-4 S3 Scalable Storage in the Cloud

S3 버킷 목록 페이지에서 위쪽 Create Bucket 버튼을 클릭합니다.

그림 12-5 S3 버킷 목록에서 버킷 생성

S3 버킷을 생성합니다(그림 12-6).

  • Bucket Name: 버킷의 이름입니다. 이 이름은 모든 S3 리전 중에서 유일해야 합니다(examples3origin은 이 책을 쓰는 시점에 제가 이미 사용하고 있으므로 같은 이름을 사용할 수 없습니다. 그림 12-6과는 다른 이름을 설정합니다).
  • Region: Tokyo를 선택합니다. CloudFront로 배포를 생성할 것이기 때문에 리전의 위치는 크게 상관이 없습니다. 하지만 S3에도 파일을 매번 올려야 하므로 가장 가까운 곳을 선택합니다.

그림 12-6 S3 버킷 생성

도쿄 리전과 싱가포르 리전
우리나라에서 가까운 리전은 도쿄(Tokyo)와 싱가포르(Singapore) 리전 입니다. 요금은 도쿄 리전이 싱가포르 리전보다 좀더 비쌉니다. 따라서 S3의 업로드/다운로드 속도가 크게 상관이 없는 상황이라면 싱가포르 리전을 사용하여 비용을 좀 더 줄일 수 있습니다.

생성된 버킷(그림 12-7에서는 examples3origin)을 클릭합니다.

그림 12-7 S3 버킷 목록에서 버킷 클릭

간단한 웹 페이지를 작성합니다. 메모장이나 기타 텍스트 편집기를 열고 아래와 같이 작성한 뒤 index.html로 저장합니다.

index.html
<html>
<head>
    <title>Example CloudFront Distribution</title>
</head>
<body>
    <p>Hello CloudFront - S3</p>
</body>
</html>

이 index.html을 S3 버킷(examples3origin)에 올립니다. 파일을 올리는 방법은 '11.2 S3 버킷에 파일 올리기/받기'를 참조하기 바랍니다.

그림 12-8 S3 버킷에 index.html 업로드

AWS 콘솔의 메인 화면에서 Storage & Content Delivery의 CloudFront를 클릭합니다.

그림 12-9 CloudFront Global Content Delivery Network

CloudFront 메인 페이지에서 위쪽 Create Distribution 버튼을 클릭합니다.

그림 12-10 CloudFront 메인 페이지에서 배포 생성

전송 방식을 선택합니다(그림 12-11).

  • Web: 일반적인 웹 서버 방식입니다.
  • RTMP: 동영상 실시간 스트리밍 프로토콜 입니다.

Web의 Get Started 버튼을 클릭합니다.

그림 12-11 CloudFront 전송 방식 설정

S3을 오리진으로 사용하는 배포를 생성합니다(그림 12-12).

  • Origin Domain Name: 오리진의 도메인 이름을 설정합니다. Origin Domain Name 부분을 클릭하면 현재 사용할 수 있는 S3 버킷과 ELB의 목록이 표시됩니다. 방금 생성한 S3 버킷(그림 12-12에서는 examples3origin.s3.amazonaws.com)을 선택합니다.
  • Origin ID: 오리진을 구분하는 ID입니다. 크게 중요한 것은 아니며 Origin Domain Name에서 S3 버킷을 선택하면 자동으로 설정됩니다.
  • Restrict Bucket Access: S3 버킷에 CloudFront 만 접근할 수 있도록 설정하는 옵션입니다. Yes를 선택합니다.
  • Origin Access Identity: 오리진에 접근할 식별자 입니다. 새로 생성할 수도 있고 이미 있는 것을 사용할 수도 있습니다. Create a New Identity를 선택합니다.
  • Comment: 새로 생성할 식별자 이름입니다. 기본값 그대로 사용합니다.
  • Grant Read Permissions on Bucket: CloudFront가 S3에서 파일을 읽을 수 있는 권한을 버킷의 Bucket Policy에 설정합니다. Yes로 설정하면 다른 모든 접속은 제한되고 CloudFront만 접근할 수 있도록 버킷에 Bucket Policy가 설정됩니다. Yes, Update Bucket Policy를 선택합니다.
  • Path Pattern: CloudFront로 파일을 가져올 규칙입니다. 기본값은 *로 설정되어 있어서 모든 파일을 가져오게 됩니다. 이 부분은 여기서는 수정할 수 없고 배포를 생성한 뒤 따로 추가할 수 있습니다.
  • Viewer Protocol Policy: CloudFront로 보여질 프로토콜 정책 입니다. 기본값 그대로 사용합니다.
    • HTTP and HTTPS: HTTP와 HTTPS를 둘 다 사용합니다.
    • Redirect HTTP to HTTPS: 모든 HTTP 접속을 HTTPS로 리다이렉트 합니다.
    • HTTPS Only: HTTPS만 사용합니다.
  • Allowed HTTP Methods: 허용하는 HTTP 메서드 종류입니다. 기본값 그대로 사용합니다.
    • GET, HEAD: 파일을 읽기만 할 때 선택합니다.
    • GET, HEAD, PUT, POST, PATCH, DELETE, OPTIONS: 동적 콘텐츠 전송을 사용할 때 선택합니다.

그림 12-12 CloudFront 배포 생성 설정

이어지는 세부 설정입니다(그림 12-13).

  • Object Caching: 파일의 캐시 유지 시간을 설정합니다. 유지 시간이 지나면 CloudFront에서 파일이 삭제됩니다. 기본값 그대로 사용합니다.
    • Use Origin Cache Headers: 오리진 HTTP 헤더의 캐시 설정(Cache-Control)을 따릅니다. 각 파일마다 캐시 설정을 다르게 할 수 있는 장점이 있습니다. 캐시 설정이 없으면 기본 캐시 유지 시간은 24시간 입니다.
    • Customize: 기본 캐시 유지 시간을 따로 설정합니다.
      • Minimum TTL: 최소 캐시 유지시간 입니다. 초 단위로 설정해야 합니다. 이 Minimum TTL 설정 시간과 오리진 HTTP 헤더의 캐시 설정(Cache-Control) 시간 중 긴 시간이 적용됩니다.
  • Forward Cookies: 오리진의 쿠키를 CloudFront를 거쳐 사용자에게 전달할지 설정합니다. 기본값 그대로 사용합니다.
    • None: 쿠키를 전달하지 않습니다. 캐시 성능이 좀더 향상됩니다.
    • Whitelist: 쿠키를 선별하여 전달합니다.
      • Whitelist Cookies: 전달할 쿠키 이름을 설정합니다. 각 쿠키는 새 줄로 구분합니다.
  • Forward Query Strings: CloudFront에서 오리진으로 쿼리 문자열을 전달합니다. 오리진에서 쿼리 문자열에 따라 파일을 구분하여 보여주고 싶을 때 설정합니다. 설정하지 않으면 캐시 성능이 향상됩니다. 기본값 그대로 사용합니다.
  • Smooth Streaming: 실시간 스트리밍 프로토콜인 Microsoft Smooth Streaming을 사용하고 싶을 때 설정합니다. 기본값 그대로 사용합니다.
  • Restrict Viewer Access: Signed URL로 CloudFront 사용을 제한하고 싶을 때 설정합니다. Signed URL에 대해서는 뒤에서 자세히 설명하겠습니다. 기본값 그대로 사용합니다.
  • Price Class: 요금 수준입니다. 에지 로케이션 사용 범위를 설정하는데 실제 서비스에서 그다지 필요가 없는 지역을 제외할 때 설정합니다. 세부적으로 설정할 수는 없으며 3가지 옵션이 있습니다. 기본값 그대로 사용합니다.
    • Use Only US and Europe: 미국과 유럽의 에지 로케이션만 사용합니다.
    • Use Only US, Europe and Asia: 미국과 유럽, 아시아의 에지 로케이션만 사용합니다.
    • Use All Edge Locations: 모든 에지 로케이션을 사용합니다. 위의 두 옵션보다는 요금이 많이 나옵니다.
  • Alternate Domain Names: Route 53에서 도메인을 연결하려면 이 부분을 설정해야 합니다. 여러 도메인이라면 새 줄로 구분하고 최대 10개까지 설정할 수 있습니다. 각자 구입한 도메인 이름을 설정하면 됩니다. 기본값 그대로 비워둡니다.

그림 12-13 CloudFront 배포 생성 설정

이어지는 세부 설정입니다(그림 12-14).

  • SSL Certificate: HTTPS 프로토콜을 사용하기 위한 인증서 설정입니다. 기본값 그대로 사용합니다.
    • Default CloudFront Certificate: CloudFront의 인증서를 사용합니다.
    • Custom SSL Certificate: 사용자가 구입한 도메인과 인증서를 사용하고 싶을 때 설정합니다. 인증서 저장은 IAM에서 할 수 있습니다.
  • Custom SSL Client Support: 커스텀 SSL 클라이언트 설정입니다. 앞에서 Custom SSL Certificate를 설정해야 합니다.
  • Default Root Object: CloudFront 배포 도메인의 최상위(Root)로 접속했을 때 기본적으로 보여줄 파일 이름입니다. index.html로 설정합니다.
  • Logging: CloudFront 접속 로그 설정입니다. 기본값 그대로 사용합니다.
    • Bucket for Logs: CloudFront 로그를 저장할 S3 버킷을 선택합니다.
    • Log Prefix: S3 버킷에 로그를 저장할 때, 디렉터리 명을 설정합니다.
  • Comment: 메모입니다. 추가적인 설명을 기록하고 싶을 때 사용합니다. 기본값 그대로 비워둡니다.
  • Distribution State: 배포를 생성한 뒤 배포 상태 설정입니다. Enabled로 설정하면 곧바로 사용할 수 있는 상태가 되며 Disabled로 설정하면 그냥 배포만 생성하고 비활성화 상태로 둡니다. 기본값 그대로 사용합니다.

설정이 완료되었으면 Create Distribution 버튼을 클릭합니다.

그림 12-14 CloudFront 배포 생성 설정

CloudFront 배포가 생성되었습니다. Status를 보면 InProgress로 표시되며 인디케이터가 회전하고 있습니다. 배포가 모든 에지 로케이션에 전파되기까지 약 15~20분이 소요됩니다.

그림 12-15 CloudFront 배포 목록

모든 에지 로케이션에 전파가 완료되면 Status가 Deployed로 바뀝니다. Domain Name에 CloudFront 배포의 도메인이 표시됩니다. CloudFront 배포 도메인 형태는 http://d38443sd7c5866.cloudfront.net이며 앞의 d38443sd7c5866 부분은 배포를 생성할 때마다 바뀝니다.

그림 12-16 CloudFront 배포 도메인 확인

웹 브라우저에서 CloudFront에 접속합니다. index.html 파일의 내용이 표시됩니다.

그림 12-17 웹 브라우저에서 S3와 연동한 CloudFront에 접속

이제 전 세계 어디에서나 빠른 속도로 파일을 배포할 수 있습니다.

크롬에서 HTTP 헤더 확인하기
크롬 웹 브라우저 개발자 도구에서는 HTTP 헤더를 확인할 수 있습니다. 크롬에서 F12 키를 입력하거나, 메뉴 → 도구(L) → 개발자 도구(D)를 클릭하면 개발자 도구를 실행할 수 있습니다.

개발자 도구에서 Network 부분을 보면 현재 웹사이트에서 열린 파일들의 목록이 표시되고, 파일을 클릭하면 HTTP 헤더를 확인할 수 있습니다. Response Headers에 X-Cache 항목을 보면 Hit from cloudfront라고 표시됩니다. 이것은 CloudFront에 캐시된 파일을 가져왔다는 뜻입니다.

그림 12-18 크롬 개발자 도구에서 HTTP 헤더 확인

캐시 유지 시간이 지나서 CloudFront가 오리진에 접속하여 파일을 가져왔을 때에는 Miss from cloudfront라고 표시됩니다.

CloudFront 배포 삭제하기
CloudFront 배포를 삭제하려면 배포 목록에서 배포를 선택한 뒤 Disable 버튼을 클릭하여 동작을 정지시킵니다. 모든 에지 로케이션에 전파되기까지 15~20분 정도 걸립니다. Status가 Deployed로 바뀌었다면 Delete 버튼을 클릭하여 배포를 삭제합니다.


저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.