오늘은 AWS와 Firebase의 비용을 비교해 보고 생각해 보려고 합니다.
여기서 언급하는 가격이나 수치는,
절대적인 것이 아니며, 하나의 의견으로 참고만 해 주세요.
1. AWS Calculator vs Firebase Calculator
두 서비스 다 요금을 미리 계산해 볼 수 있는 계산기를 제공해 주는데요.
AWS가 제공하는 서비스가 많은만큼 굉장히 다양한 서비스에 대한 계산이 가능합니다.
아래링크를 통해서 확인 가능하구요.
이에 반해 Firebase Calculator는 아래링크에서 확인할 수 있는데요.
>> https://firebase.google.com/pricing/
화면하단에 사용하는데로 요금을 내는 Blaze Plan에 대한 계산기를 이용해서 추산해 볼 수 있습니다.
참고로 이 글에서 Firebase의 요금을 알아본다는 것은,
무료인 SparkPlan등에 대한 것이 아닌, 사용하는 만큼 요금을 내는 Blaze Plan을 기준으로 하였습니다.
2. EC2 & Firebase Hosting
EC2와 정적인 파일만 넣을 수 있는 Firebase Hosting의 성격이 서로 다르기는 하지만,
한번 이 두 서버의 비용을 비교해 보겠습니다.
2-1. EC2
EC2의 t2.medium서버를 기준으로 해 보겠습니다.
아래와 같이 나오는데요. 시간당으로는 50원대가 나오구요.
1년 계약을 하면, 이것을 30원대까지 조절할 수 있습니다.
하지만, 프로젝트 성격에 따라서, 1년 계약이라는 것을 함부로 할수는 없는 것이기에
우선은 on-demand가격을 기준으로 해야 겠습니다.
onDemand를 기준으로 했을 때 한달 가격은 36.87달러 인데요.
원화기준으로는 4~5만원 정도로 나오겠네요.
다만 주의할 것은 이것은 저렴은 US East기준이라는 것이구요.
서울 기준으로 하면, 같은 T2.Medium을 기준으로 이 가격은 금새 5~6만원 사이로 올라갑니다.
또한 요즘처럼 환율이 올라가는 추세라면 부담은 더 해지겠지요.
사양을 T2.Large로 하면 US East기준으로 한달 8~9만원 정도가 나오고 있네요.
Spot Instance의 경우는 이 값의 절반정도에 구할수도 있다고 하는군요.
일반적으로 t2인스턴스에
대략 1~2년에 한 번 꼴로 새 인스턴스 class가 출시되는 것으로 보이고 가격인하도 1~2년에 한 번씩은 하는 것 같습니다.
AWS가 어려운 이유중에 하나는 AWS제품에 대해서 잘 알아야 한다는 것입니다.
단순히 T2 medium을 쓰는 것이 아니라,
T1 Micro로는 도저히 않되는 것인지에 대해서 판단할 수 있는 능력이 있어야 한다는 것이지요.
대충 한 단계 높여서 쓰자정도의 마음으로 한단계식 높여서 쓸 경우,
실제로 각 클래스별로 나는 금액차이는 한달, 1년이 되면 매우 커집니다.
새롭게 출시되는 클래스들을 잘 이용하면 비용을 많이 아낄 수 있다고 하니,
새 서버의 사양등에 대해서도 잘 알고 있어야 할 것 같습니다.
2-2. Firebase Hosting
호스팅 서비스의 경우 사용하는데로 가격을 매기는 firebase는, 10gb까지는 무료로 제공해 줍니다.
Firebase Hosting서비스는,
저장 용량 1GB와 전송량 10GB까지는 무료로 제공을 해 주는데요.
아주 Light하고 접속량이 많지 않은 소개 페이지 같은 경우는 무료로 사용할 수 있을 정도 입니다.
대신 무료 제공량을 넘어서면, 기가당 30원대($0.026)수준으로 제공해 주고 있습니다.
그리고 EC2가 서버의 용량이 어찌 되었던, 일정 금액안에서 사용할 수 있도록 할 수 있는 반면,
Firebase Hosting은 사용한데로 요금을 내야 하기 때문에,
실수로 혹은 어떤 공격에 의해서 접속이 대량으로 이루어 질 경우 그 비용을 고스란히 감당해야 합니다.
물론, 기가당 30원대 이므로, 이부분이 그렇게 크게 부담되지 않을 수 있다는 것도 생각은 할 수 있겠습니다.
전송량이 1TB(1000GB)가 되더라도, 30,000원대의 요금이 발생할 뿐 이지요.
게다가, EC2같은 경우, 단순히 Webapp을 실행시키거나, appServer로 사용할 수 있지만,
Firebase Hosting의 경우는 CloudFunctions 없이는 정적파일만 호스팅 할 수 있으므로,
사용도가 떨어지게 되는점이 존재합니다.
1인 앱 개발자가 서버까지 돌리려고 한다면, 한계가 없어서 비용산정을 하기 어려운 Firebase를 사용할지,
조금 힘들고 효율이 떨어져도 EC2를 사용할지에 대한 고민이 필요한 데요.
여기에 위에서 나온 기본적인 금액차이에 대해서도 같이 생각해 볼 수 있을 것 같습니다.
3. S3 vs Storage
S3와 Storage에 대해서는 Spec이 비슷하여서,
좀 더 직접적으로 비교해 볼 수 있을 텐데요.
3-1. S3
S3의 요금은 크게 3가지가 조합되어서 부과 되어 집니다.
한달 저장용량에 대한 비용 + 읽기(GET, SELECT) + 쓰기(GET, SELECT) 비용입니다.
저장용량은 1GB당 0.023달러인데요. 우리돈으로는 25~30원 사이라고 보면 될 것 같습니다.
읽기비용은 1,000번당 0.004달러이구요. 우리돈으로는 4~5원 정도 할 것 같습니다.
쓰기비용은 1,000번당 0.005달러이네요. 우리돈으로는 5~6원 정도 될것 같습니다.
예를 들면, 250GB의 데이터를 저장하고, 10,000,000 번 읽고, 1,000,000번 썻다면,
아래와 같이 14.75달러, 우리돈으로는 17~18,000원 정도가 소요 되겠네요.
참고로, S3 Select라고 query문으로 S3 객체에서 데이터를 읽어올 수 있는 것이 있는데요.
비용은 좀 더 비싸지만 어떻게 쓰느냐에 따라서 좀 더 효율적으로 데이터를 쓸 수도 있을 것 같습니다.
3-2. Storage
Firebase의 Storage서비스도 과금방식은 S3와 비슷하기는 하지만 조금 다릅니다.
저장용량에 대한 과금 + 읽기비용 + 쓰기비용 + delete비용 + Network Egress 비용을 의미합니다.
(참고로 egress는 서버 내부에서 외부로 나가는 트래픽으로 Ingress와는 반대말이지요.)
1GB의 저장용량에 대한 비용은 0.18달러여서, 우리돈으로 200~250원 정도인데요.
S3보다 비싼 것 같이 느껴지지만, 1GB까지는 무료이므로 이것을 무시할 수는 없겠지요.
대신 이후는 S3보다 매우 빠르게 비용이 늘어나겠지요.
읽기 비용에서는 하루당 50,000까지는 무료이구요.
그 이상은 100,000당 0.06달러 입니다. 우리돈으로는 60~80원 정도이네요.
쓰기비용은 하루당 20,000까지 무료이구요.
그 이상에 대해서 100,000당 0.18달러를 지불해야 합니다. 우리돈으로는 210~230원 정도이군요.
Delete비용은 20,000까지 무료이구요.
그 이후에 대해서는 100,000당 0.02달러입니다. 우리돈으로는 20~30원이겠네요.
마지막으로 Network Egress 비용이 있는데요.
여기서 말하는 Egress, 즉 서버내부로 나가는 비용은 Google Cloud서버의 Region간 이동으로 말하는 것을 의미합니다.
예를 들어서, 아시아 Region에 있는 데이터가 미국 Region의 서버로 들어가서 어떤 처리를 한다면,
그 비용에 대해서도 비용을 지불하라는 것 이구요.
한달 10GB 전송량 까지는 무료이구요. 그 이상에 대해서는 Region별로 다른데요.
미국 아이오와 서버를 기준으로 하면 아래 정도의 비용을 청구하게 됩니다.
보는 것과 같이, 이 서버에서는 중국Region으로 가는 비용이 가장 비싸게 청구되는 군요.
Firebase 를 250GB 를 저장하면, 6.37달러가 과금되구요. 우리돈으로 7000~8000원 정도구요.
위의 S3가 250GB가 5.75달러였으니, 살짝 비싸게 나오는군요.
읽기 쓰기에 대한 비용은 초기 무료 비용 범위를 벗어나면,
S3에 비해서 금액이 올라가는 속도가 가파르므로, 이런 점을 주의해야 할 것 같습니다.
물론 모든 Firebase의 서비스가 이런식이긴 합니다.
무료 범위 안에서는 좋지만, 그 범위를 벗어나기 시작하면 S3보다 비용이 올라가는 구조인 것이지요.
4. AWS RDS MYSQL vs DynamoDB vs Firestore
관계형 데이터베이스인 MySQL과
NoSQL인 AWS의 DynamoDB 와 Firestore를 비교해 보았습니다.
4-1. AWS MySQL
먼저 관계형 DB인 MySQL서비스보도록 하지요.
Multi-AZ기준과 Single-AZ기준의 요금은 다른데요.
한개의 Zone에만 디플로이되는 Single-AZ기준으로 보도록 하겠습니다.
2개의 CPU와 4GB의 메모리를 가지고 있는 db.t3.medium을 기준으로 보도록 하겠습니다.
시간당 사용 금액은 0.068달러이구요. 원화로 80원대이군요.
한달 혹은 730시간 사용금액은 51.94달러로, 원화로는 60000원 ~ 65000원 정도가 되겠네요.
물론 대부분의 AWS서비스가 그러하듯이, 1년 혹은 그이상 장기계약을 하면 값은 내려갑니다.
자동백업 등 좀 더 많은 기능을 제공하고 있기 때문에,
EC2보다는 같은 서버 사양에서도 비싼 가격에 이용할 수 있습니다.
대신 밑에서 비교한 NoSQL서버와는 달리, 서버사용시간에 따라 과금되므로,
어느정도 예측가능하게 서버를 사용할 수 있습니다.
아무리 NoSQL이 대세이더라도 금액문제 때문에, 관계형 DB를 사용하는 경우도 발생하겠지요.
4-2. AWS DynamoDB
읽기는 1,000,000유닛당 0.25달러인데요. 원화로 300~350원 정도이겠네요.
쓰기는 1,000,000유닛당 1.25달러입니다. 원화로 1500원 정도가 되겠네요.
저장용량에 대해서는 Firebase의 서비스처럼 무료 사용량이 있는데요.
매월 첫 25GB까지는 무료로 제공해 주고요. 이후에는 GB당 0.25달러로 사용할 수 있습니다.
백업시 GB당 0.1달러가 필요하구요. 지속적인 백업을 할 때는 GB당 0.2달러를 지불해야 합니다.
추가적으로 FireStore에서 애기하는 Egress비용이 AWS에서도 DynamoDB사용시에는 추가되는데요.
다른 Region으로 데이터를 전송하면, 아래와 같은 추가 비용이 발생하게 됩니다.
4-3. FireStore
Firebase의 Firestore서비스는 저장용량에 대해서는 1기가 까지는 무료로 사용할 수 있습니다.
이 용량이면, 약 2천만개의 대화 메시지에 해당한다고 적혀있네요.
그이후에는 기가바이트당 0.18달러 정도를 받고 있는데요. 원화로 200~230원 정도이네요.
읽기는 하루 50,000까지는 무료이구요. 그 이상에 대해서는 100,000당 0.18달러를 받고 있습니다. 마찬가지로 200~230원이 되겠네요.
쓰기는 하루 20,000까지는 무료이며, 그 이상에 대해서 100,000당 0.06달러를 받고 있습니다. 원화로 70~80원 정도가 되겠네요.
Delete는 하루 20,000까지 무료로 하고, 그 이상에는 100,000당 0.02달러를 받고 있는데요. 원화로 20~25원 정도 됩니다.
여기에다가 위에서 잠깐 알아보았던 Region간 전송비용인 Egress비용도 추가됩니다.
서비스에 따라 어느정도를 사용하게 될지 가늠하기 힘들기 때문에 월 사용금액 추정은 조금 어려울 것 같네요.
이상으로 3가지 DB서비스에 대해서 비교를 해 보았는데요.
사실 개발 경험이 많지 않고, 회사에서 서비스를 운영해보지 않았다면,
소규모 서비스를 구축하면서 사용한만큼 이용료를 내는 방식에 대해서는 조금 보수적으로 접근해야 하지 않을까 합니다.
아무래도 MySQL서비스 쪽으로 생각을 하게 되네요.
6. AWS EC2서버 + S3 + RDS
마지막으로 AWS를 기준으로 일정 서버를 가지고 정해진 금액으로 운용해 본다면,
다음과 같이 잡아볼 수 있을 것 같은데요.
EC2. T2.Medium (4~50,000원) + S3(20,000원정도) + MY_SQL 2대(120,000 정도)
로 예산을 잡고, 좀더 크게 범위를 잡아서 월 20만원 정도를 생각해 볼 수 있겠습니다.
여기에 Route53이나 ELB(Elastic Load Balancer)의 비용은 들어가지 않았는데요.
약 5~10만원을 예산으로 잡고 이들을 추가해 볼 수 있을 것 같습니다.
7. 정리
AWS의 요금제의 장점과 Firebase의 요금제 각각 장단점이 있으므로,
자신의 프로젝트 성향에 맞추어서 선택하면 좋을 것 같습니다.
요금적인 면에서만 보면,
AWS가 Free Tier를 제공해서, 일정기간 무료로 많은 것을 할 수 있는 대신,
그 기간이 지나면 무료 용량이 전혀 없는데요.,
Firebase서비스는 초기의 작은 사용량에 대해서는 기한 제한 없이 무료 용량을 제공하고 있습니다.
대신 무료 범위를 초과하면, AWS보다 사용량 대비 훨씬 빠르게 요금이 상승합니다.
초기에 Firebase를 사용하다가, 일정사용량이 넘어가면 S3로 전환하는 방법이 가능하다면 할수도 있겠지만,
그런 전환을 하는 것이 쉽지는 않은 것 같습니다.
대신 서비스를 운용한다는 면에서 보면,
AWS의 경우 얼마나 많은 서버를 추가할 지 정할 수 있고, 어느 기준으로 서버를 늘릴 수 있는지를 정할 수 있는데요.
이런면에서 예산 범위내에서의 가격적인 방어(?)를 할 수 있는 반면,
Firestore의 경우 코딩실수로 read가 순간적으로 폭증해서 금액이 올라가면 울며겨자먹기로 요금을 내야하므로,
주의가 필요합니다. 특히나 Firestore 같은경우 count()같이 전체 document의 수를 제공해주는 함수도 존재하지 않으므로,
read수에 따른 금액적인 부분도 코딩할 때 생각해 두어야 하구요.
다만 Firebase서비스가 클라이언트에서 사용하기가 정말 쉽다는 면도 간과할 수 없습니다.
문서도 잘 되어있는 편이구요. 안드로이드 앱 개발할 때도 이미 무료 서비스들이 포함되어 있기 때문에,
코드로 별다른 인증과증을 거치지 않아도 사용할 수 있습니다.
정답이 정해져 있다기 보다는,
구축하고자 하는 서비스의 특성에 맞게 최대한 경제적이면서도,
사용하기 쉬운 서비스를 선택해야 할 것 같습니다.
'Cloud Services > AWS, Mongo Atlas' 카테고리의 다른 글
AWS Cognito 로 앱 로그인 구현을 준비하기 # UserPool (0) | 2021.04.11 |
---|---|
S3 서비스에 대한 정리 # S3 버킷 AWS (0) | 2021.04.10 |
RDS Replica의 부하를 분산하는 방법 #Route53 #AWS (0) | 2020.05.12 |
RDS를 복제해 주는 Replication 설정하기 #Master #Slave #AWS (1) | 2020.05.09 |
EBS(Elastic Block Storage)에 대한 정리 #EC2 #AWS (0) | 2020.05.08 |
사용자수에 따른 AWS 아키텍처 설계하기 (1) | 2020.05.06 |
ELB에 무료 SSL인증서 받아서 설정하기 #ACM #HTTPS #AWS (0) | 2020.05.02 |
Route53을 이용해 도메인과 ELB 를연결하는 방법 #AWS (0) | 2020.05.01 |
RDS 백업과 복원하기 #AWS (0) | 2020.04.28 |
EC2 시작시 사용할 Shell Script 및 Cloud-init 작성하기 #AWS (0) | 2020.04.27 |
댓글