[AWS] CloudFront

👀·2024년 11월 18일

CloudFront

CloudFront는 AWS에서 제공하는 콘텐츠 전송 네트워크(CDN) 서비스로 전 세계에 분산된 엣지 로케이션을 통해 웹 콘텐츠를 유저에게 빠르게 전달해주는 역할.

CDN (Contents Delivery Network)

CDN: 전 세계적으로 분산된 서버 네트워크로, 콘텐츠를 사용자와 가까운 위치에서 제공하여 웹사이트나 애플리케이션의 속도, 안정성, 확장성을 개선하는 시스템.

  • 일반적인 웹 사이트:
    모든 요청이 중앙 서버 (원본 서버)로 전달된다. 이는 요청 수가 많아질수록 서버의 부담이 커지고 응답속도가 느려진다.

  • CDN 활용한 웹 사이트:
    콘텐츠를 미리 분산된 엣지 서버에 캐싱하여 요청을 처리한다.
    유저의 요청은 가장 가까운 엣지 서버에 전달되어 응답시간이 짧다.

  1. 작동방식
    1-1. 유저가 콘텐츠 요청:

    • 웹 사이트나 애플리케이션에 접속하거나 동영상을 스트리밍하려 할 때, 콘텐츠 요청이 발생한다.

    1-2.- 가장 가까운 엣지 서버로 라우팅:

    • CDN은 유저의 위치를 기반으로 가장 가까운 엣지 서버로 요청을 전달
    • 엣지 서버에 요청한 콘텐츠가 있으면 바로 제공

    1-3. 캐싱 동작

    • 엣지 서버에 요청한 콘텐츠가 없을 경우, 중앙서버(원본서버)에서 콘텐츠를 가져온다.
    • 가져온 콘텐츠는 엣지 서버에 저장(캐싱)되어 이후 빠르게 응답을 보낼 수 있다.
  2. 비용
    2-1. 데이터 전송량:

    • 유저에게 전송된 데이터 양(GB단위)에 따라 비용이 발생.

    2-2. 요청 수:

    • 엣지 서버가 처리한 요청 수에 따라 과금.

    2-3. 추가 기능:

    • WAF(Web Application Firewall), DDoS방어, 실시간 로그 분석과 같은 추가 기능은 별도의 비용이 발생.

엣지 로케이션 (Edge Location)

CDN의 핵심 구성요소로 전 세계 여러 지역에 분산 배치된 데이터 센터.

  1. 작동 방식
  • 유저 요청 처리:
    => 웹 사이트나 애플리케이션에 접속하면, DNS는 유저의 지리적 위치를 기준으로 가장 가까운 엣지 로케이션에 요청을 라우팅한다.

  • 캐싱된 콘텐츠 제공:
    => 엣지 로케이션에 요청한 콘텐츠가 이미 캐싱되어 있다면, 해당 콘텐츠를 즉시 제공(캐시 히트)한다.

  • 원본 서버에서 콘텐츠 가져오기
    => 요청한 콘텐츠가 엣지 로케이션에 없으면, 원본 서버에서 데이터를 가져와 제공한다.
    가져온 콘텐츠는 엣지 로케이션에 캐싱되어 이후 요청 시 사용된다.

  • 동적 콘텐츠 요청
    => 일부 동적 콘텐츠 (API응답, 사용자데이터)는 원본 서버와의 통신을 통해 실시간으로 제공되며, 엣지 로케이션은 데이터 전달을 최적화한다.

  1. 이점
  • 빠른 속도: 가까운 위치에서 콘텐츠를 제공함으로 응답시간과 로드시간을 개선할 수 있다.
  • 중앙 서버 부하 감소: 요청을 엣지 로케이션에서 캐싱하여 사용함으로 원본 서버에 대한 요청 수가 줄어들어 서버 부하가 감소한다.
  • 높은 안정성: 하나의 엣지 로케이션에 장애가 발생해도 인근 엣지 로케이션이 처리할 수 있다.
  • 네트워크 효율성: 네트워크 트래픽이 엣지 로케이션에서 처리되므로, 대역폭 사용이 최적화되고 전송 속도가 빨라진다.
  • 보안 강화: 엣지 로케이션은 DDos 방어, HTTPS 암호화, Web Application Firewall 와 같은 보안 기능을 지원하여 안전한 콘텐츠 전송을 보장한다.

CloudFront 배포

  1. AWS 콘솔에서 CloudFront를 검색하거나 서비스메뉴에서 찾아 CloudeFront대시보드로 이동한다.
  2. 배포 생성 버튼을 클릭한다.
  3. Origin domain 필드에 연동시킬 S3의 도메인을 선택하고, ‘웹 사이트 엔드포인트 사용’을 클릭해 정적 사이트 엔드포인트가 origin domain이 되도록 한다. 이렇게 하면 ‘이름’ 필드는 자동 완성된다.
원본 액세스 설정

실습용이기 때문에 "공개"로 설정하지만 실무에서는 "원본 액세스 제어 설정"으로 한다.
1. 직접 액세스 방지

  • OAC를 사용하면 사용자가 S3 버킷에 직접 접근하는 것을 막을 수 있다.
  • 모든 요청은 반드시 CloudeFront를 거쳐 가야 한다.
  1. 보안
  • S3 버킷의 콘텐츠를 공개적으로 접근 가능하게 설정할 필요가 없어 잠재적인 보안 위협을 줄일 수 있다.
  1. 세분화된 접근 제어
  • CloudFront를 통해 누가,어떤 조건에 콘텐츠에 접근할 수 있는지 세밀하게 제어할 수 있다.
  1. HTTPS 강제
  • CloudFront를 통해 HTTPS 연결을 강제할 수 있어 데이터 전송 중 보안을 크게 향상시킨다.
  1. 비용 최적화
  • S3에 직접 접근하는 요청을 줄임으로써, 불필요한 데이터 전송비용을 절감한다.
  1. 지리적 제한
  • CloudFront의 지리적 제한 기능을 활용하여 특정 지역에서만 콘텐츠에 접근할 수 있도록 설정할 수 있다.
  1. 캐싱 효율성
  • 모든 요청이 CloudFront를 통과함으로 캐싱 효율성을 극대화할 수 있다.
  1. 확장성
  • Web Application Firewall이나 Lamda@Edge와 같은 추가 보안 레이어를 쉽게 통합할 수 있다.
  1. 기본 캐시 동작 섹션의 뷰어 항목에서 뷰어 프로토콜 정책을 'Redirect HTTP to HTTPS'로 설정

    뷰어 프로토콜 정책을 ‘Redirect HTTP to HTTPS’로 설정하면 사용자(뷰어)가 웹사이트에 접근할 때 HTTP 방식으로 요청을 보내도 HTTPS로 자동 리다이렉트 된다. 이는 보안을 강화하면서 HTTP링크의 호환성을 유지할 수 있어, 프론트엔드 개발을 비롯한 다양한 케이스에서 권장된다.

  2. WAF 비활성화 선택

    실습용이므로 비활성화 조치

  3. 배포 생성 버튼 클릭

    S3, CloudFront
    사용자가 CloudFront URL을 통해 콘텐츠 요청
    요청은 사용자와 가까운 엣지 로케이션으로 라우팅
    엣지 로케이션은 해당 콘텐츠가 캐시되어 있는지 확인
    캐시에 없다면 원본(S3 버킷)에서 콘텐츠를 가져온다
    가져온 콘텐츠를 사용자에게 제공하고 캐싱
    => 이 후, 요청에 있어서 캐싱된 데이터를 활용함으로 원본(S3)서버에 대한 요청을 줄일 수 있고 이를 통해 빠른 속도로 콘텐츠를 제공할 수 있다.

🎈캐시 수명(TTL): 콘텐츠가 엣지 로케이션에 얼마나 오래 저장될지 설정할 수 있다.
🎈동적 콘텐츠: 항상 최신 상태이어야 하는 동적 콘텐츠의 경우, 캐시 설정을 조정하여 더 자주 원본에서 가져오도록 할 수 있다.

CDN 활용해 웹사이트 접근

CloudFront 배포를 생성하면 배포 도메인 이름을 할당받게 된다.

브라우저에 도메인 이름 을 입력해 수동으로 S3에 올린 정적 파일들을 브라우저에서 확인할 수 있다.

cloudFront에 요청한 콘텐츠는

X-cache: Hot from cloudfront 헤더가 붙는다.
또한 압축되어 서빙된 것을 확인할 수 있다.

0개의 댓글