지난 포스트에서 Flask를 사용한 홈페이지를 Next.js로 마이그레이션하기로 결심한 이유에 대해 이야기했었죠. 장황하게 설명을 했지만, 결론적으로는 Cloudflare Pages로 배포하기 용이한 프레임워크이기 때문에 Next.js를 선택하게 되었습니다. 이번 게시글에서는 많고 많은 서버리스 플랫폼 중에서 Cloudflare Pages를 선택하게 되었는지에 대해 이야기해보려고 합니다.
서버리스 플랫폼
서버리스를 말 그대로 해석하자면 서버가 없다는 뜻이죠. 그렇지만 실제로 서버 없이 서비스가 구동된다는 의미는 절대 아니고, 서버는 존재하지만 개발자가 서버를 관리할 필요가 없다는 것이 서버리스의 정의에 더 가까운 것 같습니다.
이전의 홈페이지는 Flask로 개발하여 Gunicorn과 Nginx를 연동하고, 이를 Docker 컨테이너로 만들어 Microsoft Azure 가상 머신으로 배포했었습니다. 이렇게 서버를 설계하는 것이 일반적인 방법이긴 하겠지만, 별도로 무중단 배포 솔루션을 구축하거나 서버의 상태를 지속적으로 모니터링하는 것이 저에게 있어서는 귀찮은 일이었습니다. 특히나, 홈페이지의 콘텐츠가 업데이트되었을 때 이를 서버에 반영하기 위해서는 Azure 가상 머신에서 Docker 컨테이너를 다시 빌드해야 했는데, 이 작업이 꽤나 번거로웠습니다. 배포 자동화를 구축할 수도 있었겠지만, 그것 또한 번거로운 일이지요.
그러나 서버리스 플랫폼을 사용하면 개발자가 서버 자체를 관리할 필요가 없으니 위에서 말한 번거로움을 해소할 수 있습니다. 홈페이지의 콘텐츠를 업데이트하는 과정을 예시로 들면, 그냥 코드를 수정하고 Git 저장소에 푸시하면 서버리스 플랫폼이 알아서 배포해줍니다. 만약 푸시한 코드가 배포 환경에서 문제가 발생한다면 이전 버전으로 손쉽게 롤백을 할 수도 있죠.
Cloudflare Pages
오늘날 서버리스 플랫폼을 제공하는 서비스는 많습니다. 대표적으로 Vercel과 Netlify가 있고, Amazon Web Services에도 Amplify를 제공하고 있습니다. 그 많은 플랫폼 중에서도 저는 Cloudflare Pages를 선택하게 되었습니다. 이유는 다음과 같습니다.
1. 가격
Cloudflare Pages는 무료입니다! Vercel과 Netlify에서도 무료 플랜을 제공하지만, 일정 트래픽 이상이 되면 과금이 되는 것으로 알고 있습니다. 반면에 Cloudflare Pages는 무료 플랜에서도 무제한 요청과 무제한 대역폭이 제공됩니다. 방문자 수를 쉽게 예측할 수 없는 이번 프로젝트의 경우 Cloudflare Pages를 선택하는 것이 가장 합리적이라고 생각했습니다.
2. Cloudflare와의 연동
저는 평소에도 Cloudflare를 많이 활용하고 있습니다. 제가 가진 도메인들은 모두 Cloudflare에 등록하여 DNS 서비스를 사용하고 있고, 캐시 서비스를 활용하여 웹 사이트의 속도를 높이면서 트래픽은 줄이고 있습니다. Cloudflare Pages를 사용하면 기존에 사용하던 Cloudflare에 가지고 있던 도메인을 연동하는 과정도 쉽고, 캐시 서비스와 DDoS 방어 서비스와 같은 부가 서비스들도 함께 사용할 수 있다는 점이 큰 장점으로 다가왔습니다.
Cloudflare의 글로벌 CDN 네트워크를 활용할 수 있는 점도 Cloudflare Pages를 선택한 이유 중 하나입니다. Cloudflare의 CDN 네트워크는 전 세계에 250개 이상의 데이터 센터를 보유하고 있어서, 방문자가 서버와 가까운 데이터 센터에서 콘텐츠를 받아올 수 있습니다.
3. Web Analytics
웹 분석 도구인 Web Analytics를 무료로 제공한다는 점도 Cloudflare Pages를 선택한 이유 중 하나입니다. Google 애널리틱스를 사용할 수도 있었겠지만, Cloudflare Pages와 Web Analytics를 연동하면 별도의 설정 없이도 웹 분석 도구를 이용할 수 있다는 점이 편리했습니다.
마치며
이와 같은 이유로 저는 Cloudflare Pages를 선택하게 되었습니다. Cloudflare Pages를 사용하면 서버리스 플랫폼을 사용하면서도 Cloudflare의 다양한 부가 서비스를 함께 사용할 수 있기 때문에, 이번 프로젝트에 가장 적합한 서버리스 플랫폼이라고 생각했습니다.
다만, Cloudflare Pages로 Next.js 프로젝트를 배포할 때는 Edge Runtime을 강제하기 때문에 특정 경우에서 빌드가 실패하는 경우를 종종 겪곤 했습니다. 또한 Cloudflare Pages를 사용하는 케이스가 Vercel보다 적기 때문에 문제 발생 시 해결 방법을 찾기 어려울 때도 많았습니다.
그럼에도 불구하고 상당히 후한 가격 정책과 Cloudflare의 다양한 부가 서비스들을 고려했을 때, Cloudflare Pages를 사용한 것은 적절한 선택이었다고 생각합니다. 이 프로젝트를 계기로 저의 다른 사이드 프로젝트에서도 Cloudflare Pages를 사용하여 배포하고 있는데, 비용을 신경쓰지 않아도 된다는 점에서 개발 의욕이 사그라들지 않더군요. 그러니 여러분들도 꼭 Cloudflare Pages 쓰십시오.