Skip to main content

12B. S3와 CloudFront 연동하기

About 2 minAWScrashcoursepyrasisawsamazon-web-services

12B. S3와 CloudFront 연동하기 관련

목차

아마존 웹 서비스를 다루는 기술

12장 - 2. S3와 CloudFront 연동하기

아마존 웹 서비스를 다루는 기술

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

S3와 CloudFront 연동하기
S3와 CloudFront 연동하기
AWS 콘솔로 접속한 뒤 메인 화면에서 Storage & Content Delivery의 <FontIcon icon="iconfont icon-select"/>를 클릭합니다.
AWS 콘솔로 접속한 뒤 메인 화면에서 Storage & Content Delivery의 [S3]를 클릭합니다.
S3 버킷 목록 페이지에서 위쪽 <FontIcon icon="iconfont icon-select"/> 버튼을 클릭합니다.
S3 버킷 목록 페이지에서 위쪽 [Create Bucket] 버튼을 클릭합니다.
  • Bucket Name: 버킷의 이름입니다. 이 이름은 모든 S3 리전 중에서 유일해야 합니다(examples3origin은 이 책을 쓰는 시점에 제가 이미 사용하고 있으므로 같은 이름을 사용할 수 없습니다. 그림 12-6과는 다른 이름을 설정합니다).
  • Region: Tokyo를 선택합니다. CloudFront로 배포를 생성할 것이기 때문에 리전의 위치는 크게 상관이 없습니다. 하지만 S3에도 파일을 매번 올려야 하므로 가장 가까운 곳을 선택합니다.
S3 버킷을 생성합니다
S3 버킷을 생성합니다

도쿄 리전과 싱가포르 리전

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

생성된 버킷()을 클릭합니다.
생성된 버킷(examples3origin)을 클릭합니다.

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

.index.html

<html>
<head>
    <title>Example CloudFront Distribution</title>
</head>
<body>
    <p>Hello CloudFront - S3</p>
</body>
</html>
이 <FontIcon icon="fa-brands fa-html5"/>을 S3 버킷()에 올립니다. 파일을 올리는 방법은 '11.2 S3 버킷에 파일 올리기/받기'를 참조하기 바랍니다.
index.html을 S3 버킷(examples3origin)에 올립니다. 파일을 올리는 방법은 '11.2 S3 버킷에 파일 올리기/받기'를 참조하기 바랍니다.
AWS 콘솔의 메인 화면에서 Storage & Content Delivery의 <FontIcon icon="iconfont icon-select"/>를 클릭합니다.
AWS 콘솔의 메인 화면에서 Storage & Content Delivery의 [CloudFront]를 클릭합니다.
CloudFront 메인 페이지에서 위쪽 <FontIcon icon="iconfont icon-select"/> 버튼을 클릭합니다.
CloudFront 메인 페이지에서 위쪽 [Create Distribution] 버튼을 클릭합니다.

전송 방식을 선택합니다

  • Web: 일반적인 웹 서버 방식입니다.
  • RTMP: 동영상 실시간 스트리밍 프로토콜 입니다.
Web의 <FontIcon icon="iconfont icon-select"/> 버튼을 클릭합니다.
Web의 [Get Started] 버튼을 클릭합니다.

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: 동적 콘텐츠 전송을 사용할 때 선택합니다.
CloudFront 배포 생성 설정
CloudFront 배포 생성 설정

이어지는 세부 설정입니다

  • 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개까지 설정할 수 있습니다. 각자 구입한 도메인 이름을 설정하면 됩니다. 기본값 그대로 비워둡니다.
CloudFront 배포 생성 설정
CloudFront 배포 생성 설정

이어지는 세부 설정입니다

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

자체 도메인 이름과 자체 SSL 인증서를 사용하여 HTTPS를 통해 콘텐츠를 전달하려면 Amazon에서 제공하는 사용자 지정 SSL 인증서 지원 기능 중 하나를 사용할 수 있습니다.
Using HTTPS with CloudFront - Amazon CloudFront

Learn how to require HTTPS connections with CloudFront.
설정이 완료되었으면 <FontIcon icon="iconfont icon-select"/> 버튼을 클릭합니다.
설정이 완료되었으면 [Create Distribution] 버튼을 클릭합니다.

CloudFront 배포가 생성되었습니다.

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

모든 에지 로케이션에 전파가 완료되면 StatusDeployed로 바뀝니다.

Domain Name에 CloudFront 배포의 도메인이 표시됩니다. CloudFront 배포 도메인 형태는 이며 앞의  부분은 배포를 생성할 때마다 바뀝니다.
Domain Name에 CloudFront 배포의 도메인이 표시됩니다. CloudFront 배포 도메인 형태는 http://d38443sd7c5866.cloudfront.net이며 앞의 d38443sd7c5866 부분은 배포를 생성할 때마다 바뀝니다.

웹 브라우저에서 CloudFront에 접속합니다.

<FontIcon icon="fa-brands fa-html5"/> 파일의 내용이 표시됩니다.
index.html 파일의 내용이 표시됩니다.

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

크롬에서 HTTP 헤더 확인하기

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

개발자 도구에서 [Network] 부분을 보면 현재 웹사이트에서 열린 파일들의 목록이 표시되고, 파일을 클릭하면 HTTP 헤더를 확인할 수 있습니다.

Response Headers에 X-Cache 항목을 보면 라고 표시됩니다. 이것은 CloudFront에 캐시된 파일을 가져왔다는 뜻입니다.
Response Headers에 X-Cache 항목을 보면 Hit from cloudfront라고 표시됩니다. 이것은 CloudFront에 캐시된 파일을 가져왔다는 뜻입니다.

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

CloudFront 배포 삭제하기

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


이찬희 (MarkiiimarK)
Never Stop Learning.