aws VS cloudflare
필자는 2022년에 cloudflare를 알고 난 후 착한 가격 정책에 매료되어 현재 까지도 사용하고 있습니다. 최근 서비스 배포를 준비하면서 aws의 S3
+ cloudfront
와 cloudflare의 R2
를 비교하게 되었고, cloudflare에 대한 애착(가격) 때문에 R2에 마음이 기울여졌습니다. 하지만 가격 차이 외에도 성능 차이가 궁금했기 때문에 직접 실험해 보기로 했습니다.
이 글에서는 버킷과 CDN에 대한 설명은 생략합니다.
가격 비교
성능과는 별개로 가격 정책에서는 cloudflare가 매우 매력적입니다.
Free Tier에서는 cloudflare가 압도적이고, 이후 추가 요금에서도 모든 면에서 cloudflare가 더 저렴합니다. 특히 cloudflare는 데이터 전송 수수료가 무료인게 인상적입니다.
또한 R2는 S3의 API를 사용할 수 있습니다. 따라서 손쉽게 마이그레이션 할 수 있습니다.
하지만 cloudflare는 리전을 선택할 수 없는것은 아쉽습니다.
실험 환경
서버: OCI (Oracle Cloud Infrastructure)
- Region: South Korea Central (Seoul)
- CPU: 4 OCPU
- RAM: 24GB
- OS: Ubuntu 22.04
- 대역폭: 4Gbps
파일:
- 255MB mp4 파일 (용량이 큰 파일)
- 113.14kB JPG 파일 (용량이 작은 파일)
실험 방법: 서버에서 파일을 다운로드 받는 시간을 측정합니다.
wget
을 사용했습니다.실험 대상:
- aws S3 (region: ap-northeast-2)
- aws S3 + cloudfront
- cloudflare R2
- cloudflare R2 + CDN
주의 사항:
- 시간대 별로 다른 결과가 나올 수 있습니다.
- wget을 사용하여 브라우저에서 다운로드 받는 것과는 다른 결과가 나올 수 있습니다.
- S3를 public으로 설정하는 것은 aws에서 권장하지 않습니다. 따라서 실험을 위해 public으로 설정했지만, 실제 서비스에서는 private으로 설정하는 것이 좋습니다.
기타
R2 CDN 서버 위치: HKG(Hong Kong)
cloudflare R2에서 캐시를 사용 하지 않는 방법은 Public access를 허용하는 것입니다.
캐싱 확인
여담으로 CDN에 캐싱이 됐는지 확인하는 방법은 HTTP 헤더를 확인하는 것입니다.
cloudflare R2
CF-RAY는 방문자의 요청과 데이터 센터의 해시 값 입니다. 데이터 센터가 ICN(Seoul)
인 것을 알 수 있습니다.
cloudflare R2 + CDN
cf-cache-statu
s가 HIT
이면 캐싱이 된 것입니다.
데이터 센터가 HKG(Hong Kong)
인 것을 알 수 있습니다.
aws S3
aws S3 + cloudfront
x-cache: Hit from cloudfront
가 있으면 캐싱이 된 것입니다. 아래 사진은 캐싱이 안된 경우입니다.
실험 결과
255MB mp4 파일
cloudflare R2
1회 (3.5s)
2회 (3.8s)
cloudflare R2 + CDN
cloudflare R2 + CDN은 일정 시간이 지나고 접근이 가능했습니다. 따라서 1회차에 이미 캐시가 되어 있을 수 있습니다.
1회 (23s)
2회 (23s)
aws S3
s3는 2.5 ~ 심하면 7초 정도 걸렸습니다. 다만 대부분 3초 내외로 걸렸습니다.
1회 (4.7s)
2회 (2.7s)
aws S3 + cloudfront
파일에 접근이 가능한지 확인을 해서 1회에 살짝 캐시가 되어 있을 수 있습니다.
1회 (3.1s)
2회 (0.7s)
113.14 kB JPG 파일
용량이 작은 파일이라 여러번 확인 했습니다. 캐싱은 이미 된 상태입니다.
cloudflare R2 (0.002s ~ 0.1s)
값이 일정하지 않습니다.
cloudflare R2 + CDN (0.3s)
aws S3 (평균 0.01s)
aws S3 + cloudfront (평균 0.005s)
요약
cloudflare R2 | cloudflare R2 + CDN | aws S3 | aws S3 + cloudfront | |
---|---|---|---|---|
255MB mp4 파일 (1회) | 3.5s | 23s | 4.7s | 3.1s |
255MB mp4 파일 (2회) | 3.8s | 23s | 2.7s | 0.7s |
113.14 kB JPG 파일 | 0.002s ~ 0.1s | 0.3s(동일) | 평균 0.01s | 평균 0.005s |
결론
대한민국 국내에서는 망사용료 이슈 때문에 cloudflare의 CDN을 사용하는 경우 CDN을 사용하기 위해서 요청이 해외로 나갔다가 돌아오는 기형적인 상황을 목격할 수 있었습니다. 현재 실험에서는 홍콩으로 서버를 배정받았지만, 더 먼곳으로 배정받는 경우 더 큰 속도 저하가 발생할 수 있습니다.
따라서 특수한 상황을 제외하고는 aws S3 + cloudfront가 적절한 선택일것입니다. 하지만 R2를 사용하게 된다면 CDN을 사용하지 않는 선택지도 고려해야 할 것 같습니다.