너무 비싼 오버 엔지니어링: 클라우드
최근 유튜브 알고리즘을 통해 재미있는 영상을 봤습니다. “The cloud is over-engineered and overpriced” 라는 제목의 영상인데, 직역하면 “클라우드는 오버 엔지니어링이며 너무 비싸다”는 것 입니다. 영상의 주요 내용은 규모가 작은 스타트업에서의 클라우드 도입을 권하지 않는 이유와 함께 Docker 기반의 기술로 심플한 On-Premise Self-Hosting 서버를 운영하는 방법을 소개하고 있습니다.
저는 이 영상을 보며 공감이 되는 부분도 있고 반대되는 부분도 있었는데요. 그래서 이 영상의 내용과 댓글 반응을 소개해드리고 저의 생각을 함께 적어보고자 합니다.
주요 내용
평균적인 SaaS 스타트업은 연간 1,160,000$ 의 비용을 클라우드에 지출한다고 합니다. 이는 현재 환율로는 약 15억 원에 달하는 금액입니다. 이 돈이면 서버 장비를 임대하고 전문적인 관리 인력 한 두명을 고용하는 것보다도 훨씬 비싼 금액입니다.
하지만 클라우드를 사용하면서 얻는 장점들도 있습니다. 대부분의 기능은 UI 에서 쉽게 조작할 수 있어 전문가가 필요하지 않으며 고가용성을 위한 서버 확장도 쉽게 할 수 있습니다. 즉, 우리는 편리함을 얻습니다.
하지만 이는 틀렸습니다. 우리는 편리하기 위해 클라우드를 사용함에도 여전히 AWS 인증을 받은 전문가를 고용해야 합니다. AWS 설정에 관한 전문가가 필요하다는게 놀랍지 않나요? 클라우드를 사용하는 주된 이유는 간편함 때문이 아니였나요?
이 덕분에 스타트업은 투자자에게서 받은 모든 돈을 AWS 에 사용합니다. 하지만 우리가 AWS 에서 사용하는 대부분의 기능들(ECR, ECS, RDS, ALB 등)은 Linux 서버와 함께 Git, Docker, 몇 가지 오픈 소스 도구면 매우 유사한 결과를 얻을 수 있습니다.
…
여기까지가 영상의 서문입니다. 이후 영상은 예시로 구형 노트북을 자체 리눅스 서버를 운용하는 방법에 대해 안내합니다. 마지막으로는 이러한 서버 운영 방식에 대한 비판 의견들과 이에 대한 답변으로 영상을 마칩니다. 주요 비판 내용과 그 답변은 다음과 같습니다.
- 클라우드의 고가용성이 필요하지 않나요?
하루만에 10배 100배 확장해야 하는 경우는 거의 없습니다.
웹사이트가 폭발적으로 성장한다면, 오히려 다운타임이 발생하는 것이 더 낫습니다.
폭발적인 성장보다는 느려도 꾸준하게 성장하는 것이 정상적이라 생각합니다.
트래픽이 악의적이지 않고, 비용을 건강하게 커버할 수 있다는 확신이 있을 때만 확장을 원합니다.
- 클라우드가 더 시작하기 쉽지 않나요?
쉬운 것이 복잡한 것에 대한 추상화인 경우가 많고 어려운 것도 실제로는 간단한 경우가 많습니다.
사용 사례에 맞지 않는 엔진보다는 이해할 수 있는 엔진을 선호합니다.
클라우드는 시작하기 쉽지만 확장성을 사용하게 되면 빠져나올 수 없는 과도한 비용의 함정에 빠지게 됩니다.
저는 항상 쉬운 도구보다 단순한 도구를 선택할 것입니다. 단순함은 어렵지만 장기적으로는 더 낫습니다.
- 전세계에 동일한 품질 제공이 필요한 경우는요?
캐시할 수 없는 동적 컨텐츠를 여러 지역에 지연없이 제공하려면 클라우드가 분명 필요합니다.
제품 요구사항은 모두 다르고 클라우드가 최상의 솔루션인 경우는 있습니다.
하지만 대부분의 스타트업에게는 필요하지 않습니다.
여러분은 포춘 500대 기업이 아니며 그와 동일한 방식으로 할 필요도 없습니다.
제 번역 실력을 너무 믿지는 마세요 :)
저의 생각
제가 다녔던 스타트업들도 모두 서비스의 시작부터 클라우드를 사용했습니다. 아마 대부분의 국내 서비스 스타트업들도 편리함이나 나중에 성장했을 때를 고려해 클라우드를 선택할 것이라 생각합니다. 어쩌면 실무자가 별 생각없이 익숙한 방식을 그대로 사용한 것일 수도 있습니다. (저도 종종 그래요.)
하지만 클라우드는 분명 돈이 많이 듭니다. 클라우드는 서비스 시작 요금이 저렴한 대신 서비스 성장에 따라 요금을 가파르게 증가시키는 전략을 사용합니다. 요즘은 프론트엔드도 SSR 이 대세가 되면서 저렴한 파일 서버보다 좀 더 비용이 높은 컨테이너 서비스를 사용하기 때문에 비용은 더 높아졌습니다.
또, 클라우드는 수평적 확장이 너무 쉽다보니 애플리케이션의 비효율 때문에 발생하는 가용성 문제를 클라우드의 수평적 확장으로 쉽게 해결해버리려는 불상사가 발생하기도 합니다. 서비스의 정상화가 우선이기 때문에 이 행동을 비난할 순 없겠지만 추후 약속했던 개선 작업은 쉽게 잊혀집니다. 이런 문제도 비용 증가의 원인입니다.
그래서 제가 Self-Hosting 를 꼭 사용해야 한다고 생각하느냐 하면 그건 또 아닙니다. 클라우드의 고가용성과 안정성은 분명한 장점이며 편리함도 무시할 수 없기 때문입니다. 그래서 저의 경우는 운영 서비스를 제외한 내부 서비스만 모두 Self-Hosting 오픈소스 앱으로 처리하는 쪽을 선호하고 있습니다. 내부 서비스라 함은 아래와 같은 것들입니다.
- 개발용 배포 서버
- Git 서버 (Gittea, Gitlab 등)
- CI/CD 서버 (Jenkins 등)
- VPN (Wireguard, OpenVPN 등)
- 기타 내부 업무관련 서비스 (채팅, Wiki, 백오피스 등)
이런 것들은 좀 망가지더라도 운영 서비스에 지장을 주지 않으니 Self-Hosting 으로 운영하는 것이 적합하다고 생각합니다. 그리고 클라우드를 사용할 때는 프론트엔드 개발자로써 다음과 같은 룰을 적용하곤 합니다.
- SSR 보다 SSG 를 선호합니다. (클라이언트는 연산을 좀 해도 됩니다.)
- SSG 로 만든 앱을 클라우드를 통해 배포합니다. (이 경우 저렴하거나 무료입니다.)
- 정말로 ‘동적’ 컨텐츠가 필요한 경우에만 SSR 을 사용합니다.
정리해보면 저는 스타트업이더라도 Self-Hosting 과 클라우드를 둘다 사용해야 한다는 입장입니다. 클라우드의 편리함과 안정성을 이용하면서도 비용은 절감할 수 있는 방법이 있다고 생각하기 때문입니다.
일이 아닌 개인적으로는 Self-Hosting 을 더 적극적으로 사용하고 있습니다. 이 블로그와 문서는 모두 SSG 로 Cloudflare 를 통해 배포하고 있고 이외의 모든 서비스는 제 집의 개인 서버 랙(KVM, Docker)에서 운영됩니다.
저는 영상처럼 Self-Hosting 만으로 시작해야 한다고 생각하진 않지만, 적어도 우리가 너무 불필요하게 클라우드 지출 비용을 증가시키고 있진 않은지 한번쯤 고민해보면 좋겠다고 생각합니다.
댓글의 반응들
글을 마치며 영상에 달린 여러 댓글 중 몇가지를 골라 소개해드립니다. 확실히 모두가 Self-Hosting 에 동의하진 않지만 성공적으로 전환한 사례도 적지 않게 있음을 볼 수 있었습니다. 저도 언젠가는 상용 프로젝트를 Self-Hosting 으로 시도해 볼 날이 있을지도 모르겠네요.
현재 스타트업에 있습니다: 모든 것을 AWS에서 Linode로 옮기고, Kubernetes를 사용하여 오픈 소스 솔루션으로 배포했습니다. 수평 확장된 SaaS 앱의 총 운영 비용은 주당 $50, 연간 $2600입니다.
AWS, Azure, Google 은 곡선 형태로 가격을 책정합니다. 처음에는 저렴하지만, 유용한 “확장성”을 사용하게 되면, 결국에는 빠져나올 수 없는 과도한 비용의 함정에 갇히게 됩니다.
저는 FreeBSD, Git, Gitlab CI/CD를 사용하여 두 번째 스타트업을 구축했습니다. 클라우드의 복잡성을 피할 수 있는 것이 확실히 가능합니다. 여기서 보여주신 접근 방식이 마음에 듭니다. 깔끔하고 단순하게 유지하면서도 나중에 옵션을 남겨둔 점이 좋습니다.
이것은 정말로 훌륭한 셀프 호스팅 안내서이고, 클라우드의 단점에 대해 당신이 맞습니다. 클라우드 서비스를 지지하려는 건 아니지만, 여기서 보여주시는 것과 클라우드가 필요한 상업 규모의 운영 사이에는 상당한 차이가 있다는 점은 말해야 할 것 같습니다.
초기 또는 소규모 배포의 경우 높은 신뢰성을 위해 클라우드를 사용하는 것이 합리적입니다. 신뢰할 수 있는 인터넷과 전력의 비용은 일반적으로 클라우드 비용을 초과합니다 (예: Lambda + RDS 인스턴스).
Self-Hosting 에 대한 여러분들의 생각은 어떠신가요?