- 월 2억 방문자급 상위 1000위권 웹사이트도 HTML만 보면 약 30TB/월, 평균 11MB/초 전송량이라 단일 서버로 감당할 수 있는 규모임
- 계산은 Business Insider를 기준으로 방문자당 2페이지, 월 4억 HTML 문서, 압축 HTML 약 75KB를 두고 JS·CSS·이미지는 CDN에 맡긴다는 전제에서 출발함
- 엣지 실행은 사용자와 가까운 서버라는 장점이 있지만, 렌더링 중 데이터베이스 왕복이 생기면 지연 시간이 원본 DB 위치로 다시 끌려감
- 비용 차이도 큼: Hetzner는 16코어·64GB RAM·NVMe 서버를 $0.34/시간, 20TB 무료 전송 후 $1.5/TB로 제공하지만 AWS와 Vercel은 대역폭 단가가 훨씬 높음
- 특별히 클라우드가 필요한 작업이 아니라면 단일 서버+SQLite+Litestream+CDN 구성이 더 단순하고 저렴하며, 불필요한 수평 확장을 피할 수 있음
11MB/초로 본 상위권 웹사이트의 실제 규모
- 상위 1000위권 웹사이트 예시로 Business Insider를 사용함
- SimilarWeb 기준 전 세계 587위였고 월 방문자는 약 2억 명
- 방문자당 평균 2페이지를 보면 월 4억 개 HTML 문서를 제공해야 함
- 샘플 기사 기준 표준 HTML 문서는 압축 후 약 75KB
- 이를 곱하면 HTML만 약 30TB/월 대역폭이 필요함
- 30TB/월은 평균으로 환산하면 약 11MB/초임
- Business Insider 사례에서는 약 150 requests/sec 수준
- HTML에 CDN을 쓰지 않는다는 가정이며, JS·CSS·이미지는 CDN으로 제공할 수 있음
- 압축 HTML 75KB는 큰 편이어서, 구현에 따라 HTML 크기를 줄이거나 요청 수를 늘리는 식의 조정도 가능함
- 현대 하드웨어에서 애플리케이션 코드가 11MB/초의 HTML을 생성하는 것은 낮은 기준임
- 최신 AMD 서버 프로세서는 64코어·128스레드를 제공함
- Zen 5 Turin 서버 프로세서는 192코어로 소문이 있으며, 듀얼 소켓 서버에서는 400코어에 가까운 구성과 768스레드까지 언급됨
- 이 관점에서는 Docker, 서버리스, 수평 확장이 항상 필요한 선택지는 아님
엣지 실행이 항상 지연 시간을 줄이지는 않음
- 지구 반대편 왕복 지연 시간의 물리적 하한은 빛의 속도 기준 약 200ms임
- 실제로는 지구 반대편의 좋은 데이터센터까지 대략 300ms가 걸리는 경우가 많음
- JS·CSS·미디어를 CDN으로 제공한다면 초기 렌더링에서 서버 처리 시간을 300ms 줄이는 것만으로도 서버를 사용자 가까이 옮긴 효과와 비슷해짐
- 2세대 서버리스 기술은 과거 콜드 부트가 300ms 지연 예산을 쉽게 잡아먹던 문제를 크게 줄였지만, 데이터베이스 왕복은 여전히 남아 있음
- 페이지 렌더링에 데이터베이스 쿼리가 하나라도 필요하면 엣지 서버는 원본 데이터베이스가 있는 us-east-1 같은 위치로 다시 왕복해야 함
- 지연 시간이 사용자-원본 서버 사이에서 엣지 서버-원본 서버 사이로 옮겨짐
- 복잡한 페이지는 렌더링에 5개 이상 데이터베이스 쿼리가 필요한 경우가 많음
- 많은 웹 프레임워크는 단일 스레드 방식으로 쿼리를 순차 실행하므로, 여러 번 데이터센터 간 왕복이 생기면 한 번 원본으로 가는 것보다 더 느릴 수 있음
- 데이터센터 간 통신은 데이터센터 내부 통신보다 10배 느리고, 데이터센터 내부 통신은 같은 장치 내부 통신보다 10배 느리다는 경험칙이 있음
- 이 맥락에서 로컬 SQLite가 지연 시간 절감에 유리한 선택지로 등장함
Hetzner, AWS, Vercel의 비용 차이
- Hetzner의 16코어 서버는 64GB RAM과 NVMe 드라이브를 포함해 $0.34/시간임
- 비슷한 x86 서버로 비교된 AWS EC2 m5a.4xlarge는 $0.68/시간임
- 대역폭 가격 차이는 더 큼
- Hetzner는 20TB 전송량을 무료 제공하고 이후 $1.5/TB를 청구함
- AWS는 100GB를 무료 제공하고 이후 $90/TB를 청구함
- Vercel은 첫 1TB 무료 이후 $200/TB를 청구하는 예시로 언급됨
- 클라우드 벤더의 무료 제공량은 초기 진입을 쉽게 만들지만, 규모가 커질 때 높은 비용으로 돌아올 수 있음
단일 서버 구성으로 단순하게 운영하기
- 비디오 트랜스코딩, 자체 AI 모델 실행, 시스템에 실제로 큰 부하를 주는 작업처럼 특정한 클라우드 사용 사례가 없다면 웹사이트나 SaaS는 단일 서버에서 실행 가능함
- 버지니아에 서버를 두면 영어권 사용자에게 100ms 미만 지연 시간을 제공할 수 있음
- 권장 구성은 서버 한 대를 중심으로 단순하게 잡음
- 데이터베이스는 같은 박스의 SQLite를 사용함
- Litestream으로 SQLite를 지속 백업함
- CSS, JS, 이미지는 CDN으로 캐시함
- SQLite와 가까운 곳에서 서버 렌더링해 왕복을 줄이고 성능을 높임
- 배포도 복잡하게 만들 필요가 없음
- CI가 코드를 서버로 SCP하면 됨
- NGINX는 무중단 배포를 지원함
- Docker와 가상화는 코드 실행과 CI/CD를 느리게 만드는 요소로 취급됨
수평 확장이 필요한 경우와 아닌 경우
- 수평 확장이 필요하다는 이야기는 대부분의 경우 과장되어 있음
- 서버 성능은 인터넷 성장보다 더 빠르게 좋아지고 있다는 전제가 깔려 있음
- 지연 시간이 정말 중요하다면 독일과 캘리포니아에 서버를 추가하는 구성이 가능함
- 쓰기는 primary로 라우팅함
- 읽기는 로컬 read replica를 사용함
- 이런 구성은 충분히 확장 가능하고, 관리 복잡도가 낮으며, 비용도 상당히 저렴함
- 11MB/초 규모의 HTML 제공은 불필요하게 어렵게 만들 필요가 없음