CloudFront

LeeKyoungChang·2022년 4월 14일
0
post-thumbnail

생활 코딩을 참고하며 정리한 내용입니다.

 

📚 1. CloudFront이란?

Cache : 가장 기본적인 기능

  • DB에서 자주 사용하는 데이터나 값을 미리 복사해 놓은 임시 저장소
  • 저장 공간이 작고 비용이 비싼 대신 빠른 성능을 제공한다.
  • 저장된 결과를 이용해서 응답한다. => Cache Server

CDN(Content Delivery Network)

  • 지리적으로 여러 나라에 분산된 여러 개의 서버
  • CDN은 사용자가 인터넷상에서 가장 가까운 곳의 서버로 컨텐츠를 전송받아 트래픽이 특정 서버에 집중되지 않고 각 서버로 분산되도록 하는 기술

CloudFront = Cache Server + CDN

 

📖 A. CloudFront가 필요한 이유

사용자가 웹 사이트에 접속한다. (현재 시간 : 10:27:20)

스크린샷 2022-04-13 오전 10 27 14

 

사용자가 웹 사이트에 다시 접속한다. (현재 시간 : 10:27:55)

스크린샷 2022-04-13 오전 10 27 14
  • 사용자가 보통 웹 사이트 접속할 때, 몇 초동안 기다려야할 때가 한 번씩 있다.
  • 이는 사용자에게 있어 불편한 상황이다.

➡️ 이를 위한 해결책으로 CloudFront를 사용하면 매번 빠르게 다시 접속할 수 있다.

 

📚 2. AWS에서 CloudFront 생성하기

스크린샷 2022-04-13 오전 10 36 20
  • 사용자가 웹 서버에 접속할 때 CloudFront를 먼저 만나게 된다.
  • CloudFront가 사용자의 요청을 받아 웹 서버에 전달한다.
  • 웹 서버는 정보를 CloudFront에게 전달하여, 사용자에게 전달된다.

 

📖 A. AWS에서 CloudFront 띄우기

🔔 사전 세팅

  • 인스턴스를 하나 생성한다.
    sudo apt-get update
    sudo apt-get install apache2
    /var/www/html에서 index.html 삭제 후, 새로 생성 후, sudo mv index.html index.php php로 변경
    sudo apt install php : php 설치
    sudo vim index.php 소스 삽입
    스크린샷 2022-04-13 오전 11 20 09
    스크린샷 2022-04-13 오전 11 25 42
  • 1초간 잠재운다.
  • 서버에 접속할 때마다, 현재 시간이 출력된다.

 

✔️ CloudFront 생성하기

스크린샷 2022-04-13 오전 11 32 11
  • Orign Domain Name : S3를 지정해도 되고, EC2를 추가해도 된다. EC2를 추가할 경우 DomainName을 넣어줘야한다. (나같은 경우 : ec2-13-209-99-153.ap-northeast-2.compute.amazonaws.com)

 

스크린샷 2022-04-13 오전 11 34 10
  • 캐시 : Cache 정책과 관련된 것 (현재는 추가 x)

 

스크린샷 2022-04-13 오전 11 34 24
  • 설정 : CDN과 관련된 것(전세계 컴퓨터 어디에 세팅할 것인가) (현재는 추가 x)

 

이후로는 추가할 것이 없기에 배포 생성하기를 클릭한다.

 

💡 참고
스크린샷 2022-04-13 오전 11 46 07

  • 아마 배포 생성 후, 바로 활성화 상태가 될 것인데, DNS 주소로 웹 접속할 시 접속이 안될 것이다.
  • 2 ~ 3분정도 기다리면 웹사이트 접속이 된다!

 

성공!

스크린샷 2022-04-13 오전 11 46 07 스크린샷 2022-04-13 오전 11 52 50
  • EC2 서버를 띄웠을 때는 시간이 지날 때마다 초가 변경되지만
  • CloudFront에서는 재접속을 해도 똑같은 시간 결과물이 나온다.
  • 다만, 생성한 도메인에 굉장히 빠르게 접속할 수 있다. (1.03s10ms)
  • origin 숫자가(시간이) 변경되었지만, Distribution에는 숫자 및 아무런 변화가 없다.

 

✔️ 배포 삭제할 때

스크린샷 2022-04-13 오전 11 46 17
  • 비활성화를 클릭하면 CloudFront가 사용 중지 상태가 된다.
  • 2 ~ 3분 정도 기다리면, 삭제 버튼을 클릭할 수 있다.
  • 그 때, 삭제하면 된다.

 

📚 3. CloudFront에서 Cache 띄우기

기본값 (*) : 모든 동작 방법을 지정한다.

스크린샷 2022-04-13 오후 12 03 39
  • 웹 서버가 클라이언트에게 이 정보는 60초 동안 유용하니, 서버에 물어보지 말아라고 전달한다.
스크린샷 2022-04-13 오후 12 04 49
  • CloudFront가 확인하고, 60초동안 웹 서버에게 요청오는 것을 막고 자기가 응답한다.

 

📖 A. Cache 설정해보기

log : apahce2 웹 서버(log)는 접속이 들어올 떄마다 xss 로그 텍스트 파일에 접속자에 대한 정보를 저장한다.
tail -f /var/log/apach2/access.log : 실시간 log 실행

스크린샷 2022-04-13 오후 12 15 50

 

✔️ 현재는?

EC2 주소를 입력하여 웹사이트에 접속했을 때는 Enter를 칠 때마다 로그가 추가된다.

스크린샷 2022-04-13 오후 12 20 13 스크린샷 2022-04-13 오후 12 21 27

 

CloudFront에서 만든 도메인 주소를 웹 주소에 입력하여 실행했을 때는, 로그가 추가되지 않는다.

스크린샷 2022-04-13 오후 12 17 23 스크린샷 2022-04-13 오후 12 19 45

 

✔️ Cache를 사용해보자!

웹 서버가 웹 클라이언트에게 캐시를 10초동안 진행하라는 것을 알려줘야 한다.

스크린샷 2022-04-13 오후 12 25 31
  • htmlindex.phpheader("Cache-Control: max-age=10") 을 준다.

 

스크린샷 2022-04-13 오후 12 27 49
  • 매번 f5(reload버튼)을 클릭할 때마다 1초간격으로 화면이 출력된다.

 

스크린샷 2022-04-13 오후 12 29 13

Request Headers Cache-Control : max-age=0 : f5(reload버튼)을 클릭했을 때 웹 브라우저가 웹 서버에게 캐시를 쓰지 않을 것이라고 말하는 것이다.

 

📖 B. Cache에 링크를 달기

자기 자신에게 가는 링크를 달기

스크린샷 2022-04-13 오후 12 43 36 스크린샷 2022-04-13 오후 12 39 20
  • 웹 서버는 링크가 추가되었다.
  • self를 클릭했을 때, 웹 브라우저가 웹 서버에게 요청하지 않은 상황이 발생하였다.

 

스크린샷 2022-04-13 오후 12 40 47
  • Cloud Front에는 링크가 추가되지 않았다.
  • Cloud Front로 접속해서 f5(reload)를 눌러보지만, 아무런 변화가 없는 상태이다.
  • 왜냐하면 아직 Cache가 살아있기 때문이다. 기본적으로 Cloud FrontCache를 24시간 저장한다.

 

📚 4. Cache를 강제로 지우는 방법

스크린샷 2022-04-13 오후 12 47 08
  • 현재는 옛적에 만든 캐시를 가지고 있는 상태이다.

 

✔️ invalidate, 무효화

스크린샷 2022-04-13 오후 12 50 15 스크린샷 2022-04-13 오후 12 50 35
  • /index.php 지정

 

스크린샷 2022-04-13 오후 12 51 33
  • (전세계에 서버가 생성되었기에) 무효화 생성이 완료되는데 2분 정도 시간이 걸린다.

 

스크린샷 2022-04-13 오후 12 52 47
  • 이제 CloudFront에 이전에 생성한 self가 추가된 것을 확인할 수 있다.
  • 시간도 계속 업데이트 된다!
  • 실행될 때 마다 Cache가 강제로 지워진다.

 

⚠️ 하지만

  • 무효화 생성할 경우, 돈이 발생한다.
  • 무효화 대신 다른 전략을 세워야 한다.

 

📚 5. Cache를 설정하는 방법

캐시 시간을 설정할 수 있다.

스크린샷 2022-04-14 오전 10 31 11
  • Cache 시간을 제한한다.
    • 현재, 10초마다 화면이 업데이트 된다.

 

수업 화면
스크린샷 2022-04-14 오전 10 37 54

현재 aws에서
스크린샷 2022-04-14 오전 10 43 53

스크린샷 2022-04-14 오전 10 44 11
  • Minimum TTL : 캐시를 최소 5초 유지한다.
  • Maximum TTL : 캐시를 최대 15초만큼 유지하겠다.
  • Defaulf TTL : 지정하지 않았을 시, 10초간 캐시를 유지하겠다.
    • Cache-Control: max-age=3 일경우, 현재 Minimum TTL보다 작기 때문에 Minimum TTL에 맞추어 캐시를 유지한다.

 

📚 6. CDN

CDN(Content Delivery Network)

✔️ 속도 차이

  • origin이 0.5초시간이 걸렸다면 Cloud Front는 0.2초만큼 시간이 걸린다.
  • 실행횟수가 많을 수록 Cloud Front가 더빨리 실행된다.

 

📚 7. 요금

생성한다고 요금이 발생하지는 않는다.

스크린샷 2022-04-14 오전 11 01 08 * 사용량에 따라 요금이 발생한다.

12개월간, 데이터 송신 50GB 무료이다.

aws Cloud Front 요금제

읽으면 데이터 크기에 따라 발생하는 요금을 알 수 있다.
실습을 하며, 요금에 대해 감을 익히는 것이 가장 좋다.

 

💡 참고
도메인 이름을 지정하려면 Route53를 사용하면 된다.
aws cloud front는 http를 제공하는데, AWS Certificate Manager를 사용시 https를 사용하기 위한 인증서를 만들어준다.
Cloud front 관련 동적인 컨텐츠를 제공하는 방법에 대해 알아보면 좋다.
Cloud front는 애플리케이션 상태를 보여주는 통계 기능도 제공한다. (여러 서비스 수 감각에 대해 알게 될 것이다. 특이점을 감지할 수 있을 것이다.)

 

aws cloudfront 공식문서

profile
"야, (오류 만났어?) 너두 (해결) 할 수 있어"

0개의 댓글