[CDN] 이미지 최적화 cloudinary 와 cloudfront 함께 이중 CDN으로 쓴다면?
date
Sep 4, 2023
slug
cdn-이미지-최적화-cloudinary-cloudfront-함께-이중-CDN-으로-쓴다면
category
Dev
status
Public
tags
SEO
Next.js
aws
keywords
summary
cloudinary 비용이 어마무시한데, cdn을 이중으로 태운다면 어떻게 될까
type
Post
Last updated
Sep 5, 2023 12:27 AM
Created time
Sep 4, 2023 01:11 AM
왜 시작하게 되었는가?
![notion image](https://www.notion.so/image/https%3A%2F%2Ffile.notion.so%2Ff%2Ff%2F79daeffd-7fd4-40b4-a94d-a812cef8a6f2%2Fc50a1913-ed4d-4035-ba6b-4b446bcf79be%2FUntitled.png%3Fid%3Dea5f92a8-2e74-4499-ba98-f9bb75309887%26table%3Dblock%26spaceId%3D79daeffd-7fd4-40b4-a94d-a812cef8a6f2%26expirationTimestamp%3D1719122400000%26signature%3D06BDATqVV_PD-7T8dog6wagWYcUDh8C9IdRPkQ3_NaY?table=block&id=ea5f92a8-2e74-4499-ba98-f9bb75309887&cache=v2)
프로젝트 내에서 이미지 최적화를 위해 cloudinary라는 서비스를 사용중인데, 이번년도 중순에 잠시 엄청난 과금이 되었던 적이 있었다. 아직까지 원인을 찾지 못했지만 그 당시 이 이슈를 해결하고자 cloudinary + aws cloudfront 이중 CDN을 테스트했었는데 실제 효과가 있을지 궁금해져서 이번에 비용을 계산해보고자 한다.
CDN이란?
콘텐츠 전송 네트워크(CDN)은 데이터 사용량이 많은 애플리케이션의 웹 페이지 로드 속도를 높이는 상호 연결된 서버 네트워크를 의미한다.
CDN이 중요한 이유?
주 목적은 대기 시간을 줄이거나 네트워크 설계로 인해 발생하는 통신 지연을 줄이는 것.
클라이언트와 웹 사이트 서버 간에 중간 서버를 두고 효율성을 높이고, 이를 통해 웹 트래픽을 줄이고 대역폭 소비를 줄이며, 사용자 환경을 개선하게 한다.
CDN을 통해 얻는 이점?
- 페이지 로드 시간 단축
- 대역폭 비용 절감
- 콘텐츠 가용성 제고
- 웹 사이트 보안 강화
CDN의 작동 원리?
여러 지리적 위치에 접속 지점(POP) 또는 CDN 엣지 서버 그룹을 설정하는 방식으로 작동. 지리적으로 분산된 이 네트워크는 캐싱, 동적 가속 및 엣지 로직 계산의 원리를 기반으로 작동한다.
- 캐싱: 더 빠른 데이터 액세스를 위해 동일한 데이터의 여러 복사본을 저장하는 프로세스
- 동적 가속: 웹 애플리케이션과 클라이언트 사이의 중개 CDN 서버로 인해 발생하는 동적 웹 콘텐츠 요청에 대한 서버 응답 시간을 단축하는 것
- 엣지 로직 계산: 클라이언트와 서버 간의 통신을 단순화하는 논리적 계산을 수행하도록 계산
cloudinary의 요금 정책
![notion image](https://www.notion.so/image/https%3A%2F%2Ffile.notion.so%2Ff%2Ff%2F79daeffd-7fd4-40b4-a94d-a812cef8a6f2%2F8d71592e-314f-42e4-ba06-d39c0787ad20%2FUntitled.png%3Fid%3D1c4bc16d-a42b-4915-bbbc-060746cf9429%26table%3Dblock%26spaceId%3D79daeffd-7fd4-40b4-a94d-a812cef8a6f2%26expirationTimestamp%3D1719122400000%26signature%3DuZtgsTz48aSmk2Gn_ilmVuMB5gbiMzKnj63LS7Fl9sY?table=block&id=1c4bc16d-a42b-4915-bbbc-060746cf9429&cache=v2)
![notion image](https://www.notion.so/image/https%3A%2F%2Ffile.notion.so%2Ff%2Ff%2F79daeffd-7fd4-40b4-a94d-a812cef8a6f2%2F297b41b3-bee6-4e74-bb51-639375baca05%2FUntitled.png%3Fid%3D9737c611-bf66-4c5c-a703-f3d54208e912%26table%3Dblock%26spaceId%3D79daeffd-7fd4-40b4-a94d-a812cef8a6f2%26expirationTimestamp%3D1719122400000%26signature%3DUmYcYO5or2gtU5yOwpyQh8l4SYKUlNlDYJy4tQCylD8?table=block&id=9737c611-bf66-4c5c-a703-f3d54208e912&cache=v2)
cloudinary에선 요청대상에 따라 요금 부과 방식이 다르다.
또한, 크레딧이라는 내부적인 결제 단위를 사용하기 때문에 화폐가치를 별도로 계산해야 한다.
![notion image](https://www.notion.so/image/https%3A%2F%2Ffile.notion.so%2Ff%2Ff%2F79daeffd-7fd4-40b4-a94d-a812cef8a6f2%2F2b3baa0b-fc36-4824-b56c-381d6bd93951%2FUntitled.png%3Fid%3D5b1a34fc-8359-4d4c-84e0-2786fb9d8ec2%26table%3Dblock%26spaceId%3D79daeffd-7fd4-40b4-a94d-a812cef8a6f2%26expirationTimestamp%3D1719122400000%26signature%3DB3R_EXjaiyFVpkd4Nf9xSjUMihVcIm9ZNcPs28MXKCM?table=block&id=5b1a34fc-8359-4d4c-84e0-2786fb9d8ec2&cache=v2)
지난 1개월을 기준으로 보자면 변환횟수 151.55K회, 대역폭 1.24TB에 용량 523.56GB
1크레딧 당 달러 가치를 계산하면 2750크레딧 내 사용 기준, 1크레딧 당 0.3996달러 := 0.4$
대역폭 1.24TB: 1240GB * 0.4 = 496$
변환횟수 151.55K: 151,550 / 1000 * 0.4 = 60.62$
용량 523.56GB: 523.56 * 0.4 = 209.424$
aws cloudfront의 요금 정책
![notion image](https://www.notion.so/image/https%3A%2F%2Ffile.notion.so%2Ff%2Ff%2F79daeffd-7fd4-40b4-a94d-a812cef8a6f2%2F3ac64c34-e6e9-4d9c-ac54-126170b0e812%2FUntitled.png%3Fid%3Da9453e1a-cb78-4629-a240-99710de13f23%26table%3Dblock%26spaceId%3D79daeffd-7fd4-40b4-a94d-a812cef8a6f2%26expirationTimestamp%3D1719122400000%26signature%3DB5aTEyQAmbb0cpME0x0LirFWRCx9Jp9-S3OsfwBI3aA?table=block&id=a9453e1a-cb78-4629-a240-99710de13f23&cache=v2)
![notion image](https://www.notion.so/image/https%3A%2F%2Ffile.notion.so%2Ff%2Ff%2F79daeffd-7fd4-40b4-a94d-a812cef8a6f2%2Fe7b64299-c4a8-421d-a77b-58316d1b9004%2FUntitled.png%3Fid%3D65f03abe-7e70-48ee-be0d-85f1c586c4c0%26table%3Dblock%26spaceId%3D79daeffd-7fd4-40b4-a94d-a812cef8a6f2%26expirationTimestamp%3D1719122400000%26signature%3DJWdovH8uTsdtUzz7rIK0r3CLUpdRDT-Gvq8M48Llvbg?table=block&id=65f03abe-7e70-48ee-be0d-85f1c586c4c0&cache=v2)
aws는 복잡해보이지만 조금 여유롭게 생각해서 데이터 송신 부분만 봐도 무방할 것 같다.
엣지 컴퓨팅은 1백만건당 0.6$ 정도로 미미한 편이기 때문.
월별 전송 단위가 10TB 이상이 아니라면 용량별 차등가격도 볼 필요 없을 것 같다.
대한민국 기준으로 대역폭(전송?)에 대한 가격은 1GB당 0.120$ + 0.06$ = 0.18$
대역폭 1.24TB를 기준으로하면 1,240 * 0.18 = 223.2$
![notion image](https://www.notion.so/image/https%3A%2F%2Ffile.notion.so%2Ff%2Ff%2F79daeffd-7fd4-40b4-a94d-a812cef8a6f2%2Fe2d2c3d8-7cd3-4798-b672-116895ea172c%2FUntitled.png%3Fid%3Dd8351abc-e5e9-4854-a97f-0eed40ce1444%26table%3Dblock%26spaceId%3D79daeffd-7fd4-40b4-a94d-a812cef8a6f2%26expirationTimestamp%3D1719122400000%26signature%3DxddV_cHnSt3tsVqDxd6pM1owr_2A824e7-r5j6RKh7Y?table=block&id=d8351abc-e5e9-4854-a97f-0eed40ce1444&cache=v2)
cloudinary에서 확인 할 수 있는 지난 한 달의 요청량은 48.4M.
48.4M회 기준으로 http 요청 요금도 계산해보면, 48,400,000 / 10000 * 0.012 = 58.08$
엣지 컴퓨팅은 48.4 * 0.6 = 29.04$
총 정리해보면 아래와 같다.
대역폭 1.24TB: 223.2$
http 요청수: 58.08$
엣지 컴퓨팅: 29.04$
결론
cloudfront를 중간에 두어 캐싱하게 하면 cloudinary의 대역폭 요금을 약 500$에서 300$ 정도로 40%정도 부담을 덜 수 있을 것 같다.
하지만, cloudinary의 용량과 변환 요금에는 변화가 없을 것으로 예상된다.
또한 cloudinary는 월 정액제로 2750 크레딧을 고정 할당받기 때문에 이를 다 쓰지 않는 상황에서 cloudfront를 적용하면 오히려 비용이 증가하게 될 것이므로, 크레딧을 초과하는 상황에 고려해볼 필요가 있을 듯 하다.