OpenFreeMap, 초당 10만 요청을 견딘 경험 공유

1 month ago 12

  • OpenFreeMap가 초당 10만 요청과 3억 건의 일일 트래픽을 성공적으로 처리함
  • Wplace.live의 갑작스러운 인기와 자동화된 대량 요청이 트래픽 폭증의 원인임
  • Cloudflare의 CDN 캐시율 99.4% , 서버는 남은 1,000 rps도 무난히 소화함
  • 이로 인해 타일 누락 현상 등 사소한 장애만 발생, 서비스는 대부분 정상 운영임
  • 앞으로는 참조자 기반 대역폭 제한 등 자동 트래픽 관리 개선 계획임

OpenFreeMap의 지난 10개월과 초대형 트래픽 대응 경험

OpenFreeMap은 지난 10개월간 매우 안정적인 운영 경험을 했음. Cloudflare의 대역폭 후원, Hetzner 서버의 안정성, Btrfs에서의 타일 서비스, nginx의 효율성 덕분에 시스템 신뢰성이 입증됨. 그러나 어느 날 갑자기 일부 타일이 로드되지 않는다는 보고를 받게 되었음. 이는 평소에는 알고리듬 버그 때문이지만 이번에는 open() "Too many open files" 오류가 nginx 로그에서 발견됨.

트래픽 모니터링 도구로 확인 결과, 24시간 동안 30억 요청이 발생했으며, 작은 타일 파일만으로도 215TB 트래픽을 기록함. 최근 5분간 3천만 건 요청, 즉 초당 10만 요청에 달하는 폭증 현상이 있었음. 이 트래픽은 상업용 지도 서비스에서는 월 600만 달러 이상의 비용이 들 것임.

Cloudflare 대시보드에는 96%가 200 OK로 응답했고, 3.6%만 비정상(206 Partial Content)임. 대다수 요청이 정상적으로 서비스되고, 일부 누락 타일을 제외하고는 전체 시스템이 잘 동작함을 확인함.

트래픽 폭증 원인: Wplace.live

이번 폭증의 원인은 Wplace.live라는 새로운 협업 드로잉 웹사이트임. 오픈 직후 수많은 사용자가 몰려들었고, 이들이 OpenFreeMap 기반 지도를 사용하도록 설계됨. 사용자들이 1픽셀/30초 제한을 우회하기 위해 자동화 툴(예: Puppeteer/Chromium, IP 회전 등)로 대량 요청을 발생시킴.

관리자는 예전 Neal.fun과 협력했던 경험을 들어, 트래픽 발생 전 사전 소통의 중요성을 강조함. 이번에는 서비스 운영에 지장을 줬기에 Cloudflare 규칙을 처음으로 적용하여 차단함. 향후에는 referer 또는 custom header 기반의 자동 트래픽 제어 방안(Cloudflare API 활용 포함)을 모색 중임.

Cloudflare의 지원과 OpenFreeMap 아키텍처의 성과

Cloudflare는 대역폭 후원을 매우 빠른 절차(주말 포함 48시간 내)에 승인해줬으며, 엔지니어들과 아키텍처 적합성 논의까지 진행함. 대규모 기업임에도 유연한 대응력을 보여줬음.

운영자는 99.4% CDN 캐시율을 달성했으며, 서버가 1,000 rps 로드도 견딘 것에 자부심을 느낌. 주간 데이터 업데이트를 제공하는 서비스에서는 상당히 높은 성과임.

Wplace.live 개발자와의 소통, 그리고 해결 제안

이후 Wplace.live 개발자와 연락이 닿아, 갑작스러운 200만 사용자 증가로 준비 부족을 이해함. 이들에게 OpenFreeMap 셀프 호스팅 인스턴스 지원을 제안, 트래픽 집중을 막고 효율성을 높이기로 논의함.

또한, 실제 200만 사용자 수에 비해 30억 요청이 발생한 것은 스크립트 기반 대량 요청이 압도적임을 시사함. 일반 사용자는 10~20회 요청에 그치므로, 서비스 정책을 변경해 불필요한 자동 요청을 방지하도록 추천함.

향후 개선 및 학습 내용

운영자는 두 가지 문제 개선을 예고함.

  1. 참조자(Referer) 기반 대역폭 제한

    • Cloudflare에서 참조자별 요청을 24시간당 1억~2억회 등으로 제한하는 방안 도입 예정임
    • 네이티브 앱은 custom header를 사용하는 쪽으로 유도 예정임
  2. 타일 누락 처리 및 서버 구성 개선

    • 잘못된 서버 설정으로 인한 빈 타일이 생성되지 않도록 조치 예정임

OpenFreeMap은 현재 매월 500달러의 기부로 운영 중임. 인프라 비용은 충분히 충당하지만, 신규 개발은 한정된 개인 시간에 의존함. 추가 지원을 통해 개발 속도 및 서비스 안정성 확대 가능함.

GitHub 후원을 통해 프로젝트 지원에 참여할 수 있음: https://github.com/sponsors/hyperknot

Read Entire Article