[AWS] S3 정적 파일을 CloudFront CDN으로 서빙하고, 캐시 무효화 처리하기

yeahcold·2025년 4월 2일
0

Data Engineering

목록 보기
14/20

네이버 쇼핑 EP 연동을 위해 매일 정제된 TSV 파일을 S3에 업로드하고 있는데, 단순히 S3 퍼블릭 URL을 사용하는 방식에는 두 가지 문제가 있었다.


🤔 문제 상황

1. 트래픽 부담

  • 네이버 쇼핑 쪽에서 하루 수천~수만 번 요청이 들어올 수 있음
  • 퍼블릭 S3 URL은 요청 수에 비례해 AWS 비용도 증가하고, 성능도 불안정해질 수 있음

2. 최신 파일이 반영되지 않음

  • S3는 기본적으로 정적 파일을 바로 반영하지만,
  • 네이버 쪽에서 캐시된 주소를 참조하거나 CDN 없이 직접 접근하면 최신 정보가 반영되지 않을 수 있음

✅ 해결 방법: CloudFront + 캐시 무효화

1. CloudFront 도입

CloudFront는 AWS의 전 세계 캐싱 CDN 서비스다.
정적 파일을 CloudFront 배포 ID에 연결하면, 사용자에게는 아래처럼 CloudFront 도메인으로 URL을 제공할 수 있다.

S3 원본 URL: https://**my-example-bucket**.s3.**ap-northeast-2**.amazonaws.com/final/final_data_daily.tsv
CloudFront URL: https://**d1234abcd1234.cloudfront.net**/final/final_data_daily.tsv

2. 캐시 무효화 자동 처리

Cloud Function에서 파일을 업로드할 때마다, 아래 코드처럼 CloudFront 캐시를 무효화(invalidation) 하도록 구현했다.

cloudfront.create_invalidation(
    DistributionId=cloudfront_dist_id,
    InvalidationBatch={
        "Paths": {"Quantity": 1, "Items": [f"/{object_name}"]},
        "CallerReference": str(datetime.now().timestamp()),
    },
)
  • CallerReference는 매번 고유해야 함 → timestamp로 처리
  • 무효화된 이후엔, 다음 요청부터는 최신 파일이 edge location으로 전파됨

🔧 전체 구조

Google Cloud Function
   ↓
정제된 TSV 파일 생성
   ↓
S3 업로드
   ↓
CloudFront 캐시 무효화
   ↓
(사용자 요청)
CloudFront → 최신 S3 파일 제공

📌 변경 후 얻은 이점 정리

  • 네이버 쪽에서 요청을 많이 보내더라도, CloudFront CDN이 대신 응답해줘서 S3의 부담이 크게 줄었다.
  • Cloud Function이 자동으로 캐시 무효화를 해주기 때문에, 배포할 때마다 최신 TSV 파일이 바로 반영된다.
  • 전체적으로 운영이 훨씬 안정적이고 유지보수도 수월해졌다.
profile
Software Engineer

0개의 댓글