S3 + cloudfront 를 선택한 이유
확장성: AWS S3는 거의 무제한의 스토리지 용량을 제공하며, CloudFront는 트래픽 증가에 따라 자동으로 확장됩니다. 따라서 큰 양의 데이터 및 높은 트래픽을 처리하는 데 용이합니다.
보안: AWS CloudFront는 DDoS (분산 서비스 거부 공격) 및 웹 애플리케이션 방화벽을 지원하여 웹 애플리케이션을 보호할 수 있습니다. AWS S3는 데이터를 암호화하고 데이터 접근 권한을 관리하기 위한 다양한 보안 기능을 제공합니다.
간편한 설정 및 관리: AWS S3와 CloudFront를 설정하고 관리하기가 상대적으로 간단합니다. AWS 콘솔을 사용하여 필요한 리소스를 생성하고 설정할 수 있으며, AWS CLI 또는 SDK를 사용하여 자동화된 프로비저닝 및 관리를 수행할 수 있습니다.
비용 효율적: AWS S3와 CloudFront는 사용한 양에 따라 비용을 지불하므로 트래픽 및 스토리지 비용을 최소화할 수 있습니다. 또한, AWS S3에서 CloudFront로 데이터 전송 시 비용이 추가로 발생하지 않습니다.
고가용성: AWS S3와 CloudFront는 고가용성을 제공합니다. AWS S3는 데이터의 내구성을 보장하고 CloudFront는 여러 엣지 위치를 통해 고가용성을 제공합니다.
캐싱 및 압축: CloudFront는 컨텐츠를 캐싱하고 GZIP 압축과 같은 압축 알고리즘을 적용하여 대역폭을 절약하고 성능을 향상시킵니다.
AWS 생태계 통합: AWS S3와 CloudFront는 AWS 생태계의 다른 서비스와 쉽게 통합됩니다. Lambda, API Gateway, Cognito, RDS 등과 같은 다른 AWS 서비스를 사용하여 웹 애플리케이션을 더욱 강력하게 개발할 수 있습니다.
빠른 성능: AWS CloudFront는 전 세계에 분산된 엣지 서버를 사용하여 컨텐츠를 캐싱하고 더 빠른 응답 시간을 제공합니다. 사용자가 웹 애플리케이션에 접근할 때 정적 파일 (이미지, 스타일 시트, 자바스크립트 등)은 가장 가까운 엣지 서버에서 제공되므로 로딩 시간이 크게 단축됩니다.
필요 작업
- name: Deploy
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
run: |
aws s3 cp \
--recursive \
--region ap-northeast-2 \
build s3:// 페이지 이름
- name: Invalidate CloudFront
uses: chetan/invalidate-cloudfront-action@v2
env:
DISTRIBUTION: ${{ secrets.AWS_CLOUDFRONT_DISTRIBUTION_ID }}
PATHS: "/*"
AWS_REGION: "ap-northeast-2"
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
느낀점
yml은 띄어씌기나 오타, 대소문자에 민감함으로 확인을 잘 해야한다, action ci/cd와 s3로 배포를 하니 간편하며 세팅이 쉽다.