AWS, GCP, AZURE 쓰지 마세요

AWS, GCP, AZURE 쓰지 마세요
Photo by Alex Kulikov / Unsplash

그 동안 작은 프로젝트를 하더라도 Cloud Service Provider 를 통해 배포하는 것이 버릇처럼 되었고, Server Instance 를 띄우기 보다는 Docker 를 Kubernetes Engine 에 올리는 겉멋 아닌 겉멋에 빠져있던 덕분에 서버비로 피땀흘려 모은 내 돈을 구글에 (GCP 를 주로 사용했음) 많이 주었더랜다. 심할땐 매월 100만원도 넘겨봤는데, 어찌어찌 비용을 회수하긴 했지만, 이렇게까지 내면서 토이 프로젝트를 해야 하는건가? 하는 생각도 종종 들었었다.

이번에 숏폼 블로그(?)인 Bytes.by 를 개발하게 된 계기는 페이스북에 많은 기록을 남기는데 검색도 안되고, 아카이빙이 거의 불가능한 뉴스피드를 다른 방식으로 기록하고 싶어서 작은 블로그를 만들게 되었다. 마스토돈을 써볼까 생각하다가 트위터와 뭐가 다른가 싶어서 쓸 이유를 느끼지 못했고, 그냥 가볍게 만들어보았다. 개발하기 귀찮아서 Keystone.js 를 사용했고, 아래 Bytes 에 적당히 정리해 두었다.

21세기에 웹 서비스 개발하고 배포하는 방법
일로도 취미로도 여러 서비스를 개발하다보니 특히 백엔드의 경우 비슷한 기능이 많다보니 지긋...

이미 짤봇에 매월 수십만원이 날라가고 있는 터라 (돈이 점점 많이 들어서 정리하는 것도 진지하게 고민하고 있다) 더이상 큰 돈을 쓰기는 싫었고, 최대한 저렴하면서도 힙하게 호스팅 하는 방법을 찾아보았다. Server, Front, SQL 정도를 쓰면서 $50/월 정도로 크게 부담도 없는 수준에서 적당한 퍼포먼스를 낼 수 있다면 좋지 않을까 하는 막연한 기준을 세웠다.

1. Hosting - Render

Cloud Application Hosting for Developers | Render
Render is a unified cloud to build and run all your apps and websites with free TLS certificates, global CDN, private networks and auto deploys from Git.

뭐니뭐니 해도 서버 인프라가 우선이다. 처음에는 Kubernetes 를 가볍게 올릴만한 클라우드를 찾아봤는데, 생각만큼 괜찮은 곳이 별로 없었다. Digital Ocean 정도가 옵션이었는데 기본 과금이 $12/월 로 시작했고, 여기에 서버 한두개 올리면 금방 $50/월 을 넘어갈 것 같았다.  

두번째 찾은 곳은 Vercel 이었는데, 프론트를 Next.js 로 만들었으니 좋은 옵션이기도 했다. 다만, Vercel 로 뭘 배포하려면 상당히 귀찮은데 특히 백엔드를 Keystone 으로 작성한 이상 Vercel 에 올리려면 Next.js 의 API route 에 엮고 하는 일을 해야 하는데, 손 안가려고 선택한 개발스택 때문에 두고두고 피곤할 것이 눈에 뻔히 보였다. 다만 Vercel 은 무료로 호스팅을 할 수 있어서 프론트는 그대로 배포하고 Keystone 만 Render 에 놓아봤는데, Round trip 에 너무 오랜 시간이 걸려서 서버사이드 렌더링 퍼포먼스가 너무 떨어졌다.

Cloudflare Worker 를 사용할 생각도 했었다. Bytes 는 글로벌(!)을 목표로 개발하고 있어서 Edge 있게 가보고 싶었으나, Keystone 을 Worker 에 올리려니 해야할 일들이 한두개가 아닌데 쉽게 개발하려는 프로젝트에서 심장마비 올 것 같아서 포기했고, 찾은 다른 옵션 중에 하나가 Render 다.

Render 의 가장 큰 강점은 가격이다. 무제한 프리티어를 제공하는데 0.1 CPU 에 512 MB 라는 처참한 스펙이지만, 어쨋든 빠르게 서비스를 배포해하기엔 최적이다. Node.js 프로젝트는 build 와 start 커맨드만 입력하면 바로 배포가 가능하고 빌드 속도도 괜찮은 편이다.  Elixir, Go, Node.js, Python, Ruby 와 Rust 를 지원하는데  Dockerfile 을 만들면 컨테이너 형태로도 배포할 수 있어서 크게 제한 사항은 없다. 다만 Docker 빌드 속도는 무척 느렸다. 과금 정책도 훌륭한데 위 이미지의 티어를 얼마만큼 사용했는지로 과금하기 때문에 서비스를 일시적이라면 올렸다 내려도 크게 비용이 추가되지 않는다.

내부적으로는 Kubernetes 같은 Orchestration 툴로 관리하는 것으로 보이는데, 덕분에 Kubernetes 서비스처럼 인스턴스 사이에 Internal Address 로 통신할 수 있다. 그래서 Next.js 와 Keystone.js 를 Render 에 올리면 SSR 하기 편리했다.

과거 로그는 볼 수 없다는 치명적인 단점이 있지만, 간단하게 볼수 있는 로그도 편리한 점이다. 생각보다 이것저것 꽤 많은것을 지원하고 있어서 상당히 유용하다.

서버 말고도 Cron Job 이나 Background Worker 등 간단하게 사용할 수 있는 다양한 옵션을 제공하는 것 또한 맘에 든다. Bytes 에는 Reddit 에서 쓰이는 Hot-ranking Algorithm 을 적용했는데, 크론잡 만들기도 너무 편해서 매우 만족하고 있다.

단점을 뽑자면 역시 리전 문제인데, Oregon, Frankfruit, Ohio, Singapore 이 네가지 리전만 지원하고 있다.

2. DB - Planetscale

PlanetScale: The world’s most advanced database platform
PlanetScale is the MySQL-compatible, serverless database platform.

Planetscale 은 관대한 프리티어를 자랑하는 서버리스 MySQL 플랫폼이다. 서버리스 얘기만들어도 설레이는데 무료라고?

Planetscale 은 관대하다

결론부터 말하자면 사용하지는 않았다. 이유는 사실 좀 복잡한데, 원래는 Planetscale 을 사용하고 있었다. Render 에서 SSR 퍼포먼스가 안나와서 이래저래 방법을 찾다가 최대한 라운드트립을 줄이려고 Render 에 있는 PostgresSQL 을 사용했다.

Planetscale 은 MySQL 만 지원하고 Render 는 Postgres 만 지원하다 보니 MySQL 에서 Postgres 로 마이그레이션 하는게 너무 귀찮았는데, 문제를 Redis 로 해결하다보니 딱히 Render 의 DB 를 쓸 이유는 없어졌다.  Postgres 를 다시 MySQL 로 마이그레이션 할 생각을 하니 눈물이 나올거 같아서 포기했다. 사실 Planetscale 은 Tokyo 에 셋업을 하고 Render 는 Singapore 만 지원을 하다보니 여기서 발생한 문제도 있었는데, 다시 세팅하고 마이그레이션 하는건 회사에서나 할 일이지 토이 프로젝트에서 할 일은 아니었다.

3. Cache - Redis Cloud

Redis | The Real-time Data Platform
Developers love Redis. Unlock the full potential of the Redis database with Redis Enterprise and start building blazing fast apps.

AWS 를 위시한 CSP 들이 오픈 소스로 돈을 많이 벌면서 해당 코드에 기여하지 않는 행태에 질린 나머지 Mongo 나 Redis 를 만드는 회사들은 이제 직접 Cloud 서비스를 제공하는 경우가 많다. Redis 를 잘 모르는 것 같던데 계정당 1개의 인스턴스 30MB 까지는 무료로 사용할 수 있다.

주요 CSP 들을 직접 고를 수 있어서 좋긴 하지만 역시 서울은 고를 수 없다. (한국이 은근히 갈라파고스화 되고 있다는 걸 이런데서 알 수 있다.) 도쿄나 싱가포르만 해도 그렇게까지 느리지는 않고, 속도보다는 돈이 더 중요하기 때문에 그럭저럭 쓸만하다. 짤봇도 무료티어를 사용하고 있고, Bytes 역시 그렇다. 나중에 좀 돈이 벌리면 Render 에 있는 Redis 인스턴스를 사용해도 좋을 것 같다. Render 도 프리티어로 25MB 를 주기 때문에 이걸 선택하는 것도 나쁘지 않다.

4. Storage - Cloudflare R2

Cloudflare R2 - 송신료 없는 개체 스토리지
Cloudflare R2 - 송신료가 없는 분산 개체 스토리지에 대해 알아보세요.

SSL 과 더불어 R2 때문에 이제 Cloudflare 없이는 살 수 없는 몸이 되어버렸다. 아직 빌링이 나오지 않아서 정확하게 얼마나 아꼈는지 알 수는 없지만, Update 가 빈번하지 않은 경우 95% 이상 줄어든다고 하니 결제일만 손꼽아 기다리게 되었다.

R2의 가장 큰 장점은 AWS-SDK 의 S3 클라이언트를 그대로 사용할 수 있다는 점이다. 설정만 잘 넣어주면 아무 문제없이 동작하고 Migrator 도 제공해서 뭐 할것도 없이 잘 된다. 다만 내 경우에는 GCP 라서 새로 작성했어야 했지만...


이 외에도 저렴하게 호스팅 할 수 있는 방법이 꽤 많다.

DB - Mongo Atlas
Pricing
MongoDB Product Pricing

몽고디비 클라우드도 계정당 1개의 프리티어를 제공한다. 짤봇은 2018년 말부터 만 5년간 무료로 쓰고 있다. Shared 인스턴스에 512MB 까지면 영원히 공짜로 쓸 수 있다.

Hosting - Digital Ocean
Pricing Overview | DigitalOcean
Pricing Overview | DigitalOcean

이 바닥의 전통의 강호 Digital Ocean. Kubernetes 에 가볍게 올리기엔 최적이 아닌가 싶다. 근데 굳이 기본료 $12/월 을 내면서 Kubernetes 를 가야 할지 모르겠네?

Design - Fiverr

https://fiverr.com/

Bytes 는 Fiverr 를 통해 디자인 작업을 진행했다. 전체 디자인에 $130 정도 들었고, 저렴한 셀러들이 많아서 영어만 잘 되면 저렴하게 진행할 수 있다. 외주 플랫폼이라 다양한 옵션이 있다. (개발은 안해봤다)

Domain Search - Rayst Domains
Rayst Domains
A Powerful Domain Search Engine.

매우 파워풀한 도메인 검색엔진으로 Bytes.by 라는 도메인을 여기서 찾았다. 등록되어 있는 도메인도 없는 것처럼 나오는 경우가 종종 있다.


결론

AWS 를 배우겠다면 말릴 이유가 없는데, 그게 아니라면 어지간하면 쓰지 말기를 권한다. k8s 를 배울거면 minikube 를 쓰면 될일이지, 배우는데 쓰기엔 이미 너무 비싼게 사실이다. 스타트업도 Render 같은 저렴한 호스팅을 사용하다가 규모가 커지면 AWS 같은 곳으로 넘어가면 된다.

한국 IT 가 갈라파고스 화 되는 면이 있다보니, 서울 리전이 없다는 점이 아쉽긴 하지만 Singapore 만 해도 사실 TTFB 가 그렇게까지 나쁘지 않다. 한국 클라우드들도 맨날 AWS 따라잡기만 해봐야 어차피 따라잡지도 못할텐데 이러한 방식으로 시장에 접근을 해보는것도 괜찮은 전략이 아닐까 싶다.

개발자로서는 AWS 의 거지같은 카드 등록 시스템과 관리의 복잡함을 벗어나서 개발 본연의 일에 집중할 수 있다는 것에 장점이 있다. 특히 Kubernetes 는 장점이 매우 많긴 하지만 클러스터만 만들어도 조금씩 돈이 새어나가기 때문에 개인 프로젝트면 안쓰는게 속편하다. Managed DB 가격은 욕나오니 굳이 언급하지도 않겠다.


여담

호스팅 비용도 비용이지만 개발 비용도 만만치 않다. 프론트는 비슷한 걸 만들일이 별로 없다보니 그런 인식이 없는데, 백엔드는 솔직히 대부분이 비슷한 기능이라서 거의 신물이 나더라.

KeystoneJS: The superpowered Node.js Headless CMS for developers - Keystone 6
Build faster and scale further with the programmable open source GraphQL API back-end for structured content projects.

GraphQL 을 지원하는 Headless CMS 를 써봐야 겠다고 진작부터 생각하고 있었다. 많이 찾아봤는데 Strapi, Hygraph, Contentful 등등 수없이 많은 CMS 가 있었으나, 돈 안내고 커스터마이징 가능한 건 Keystone 뿐이었다. Admin 도 깔끔하고 코딩할때 함정이 종종 튀어나오지만, 그래도 의도한 걸 적은 코드량으로 구현할 수 있다는 점에서 높이 평가할만 하다. 다른 Headless CMS 는 커스텀만 하면 다들 기본 $150/월은 내라고 하다보니 쳐다도 보지 않았다. 이것도 싼거고 보통 $250/월 은 한다.