
Guess the Speed는 가족이나 친구가 각자 인터넷 속도를 예상한 뒤 실제 측정값과 비교하는 게임이다. 별도 계정이나 설치 없이 웹사이트에서 이용할 수 있으며, 각자 휴대전화로 참여하거나 TV 화면에 맞춘 모드로 함께 즐길 수 있다.
게임 진행과 점수
한 라운드는 약 1분 걸린다. 화면에 참여자를 추가하고 각자의 얼굴 아이콘을 고른 다음, 실제 측정 전에 다운로드와 업로드 속도를 비밀리에 예상한다. Cloudflare 네트워크를 대상으로 속도 측정을 실행하고, 결과와 예상치를 비교해 점수를 매긴다.
- 1위는 3점, 2위는 2점, 3위는 1점을 받는다.
- 다운로드 또는 업로드 예상치가 실제 값의 5% 이내이면 각각 1점의 근접 보너스를 받는다.
- 평균 오차가 50%를 넘으면 순위 점수를 받지 못한다.
예를 들어 실제 결과가 다운로드 240Mbps, 업로드 20Mbps일 때 세 사람의 예상은 다음과 같다.
| 참여자 | 다운로드 예상 | 업로드 예상 |
|---|---|---|
| Mom | 250 | 22 |
| D&J | 200 | 30 |
| Dad | 500 | 50 |
Mom은 전체에서 가장 가까운 예상치를 냈고 다운로드 예상도 실제 값과 약 4% 차이라 근접 보너스를 받는다. 따라서 3점에 보너스 1점을 더해 4점을 얻는다. Mia는 2점, Dad는 평균 오차가 50%를 훨씬 넘어서 0점이다.
여러 기기와 TV에서 즐기기
방을 만들면 여섯 글자 코드나 QR 코드를 공유해 최대 12명이 각자의 휴대전화로 참여할 수 있다. 결과를 공개하기 전까지 서버가 예상치를 숨겨 다른 사람의 답을 보고 따라 하는 일을 막는다. 진행자는 어느 기기에서 속도 측정을 실행할지 고른다.
TV 모드는 큰 게이지와 글자를 사용하며 전체 화면을 지원한다. 브라우저가 허용하면 화면이 라운드 중 꺼지지 않도록 화면 깨우기 잠금도 사용한다. 측정 중에는 핑, 다운로드, 업로드 단계와 실시간 수치를 볼 수 있다. 우승자 화면에서는 점수와 함께 결과를 공유할 수 있으며, 기기의 공유 메뉴를 쓰거나 링크를 복사한다. 테마는 밝게, 어둡게, 계절별 테마 중에서 고르거나 날짜에 따라 바뀌는 자동 설정을 사용할 수 있다.
개발 진단 화면에는 요약, 지연 시간 샘플, 개별 테스트 요청, 대역폭 백분위, 테스트 계획, 브라우저 정보가 표시된다. 최근 실행 결과는 JSON으로 복사하거나 내려받을 수 있다. URL에 ?dev=1을 붙이면 이 화면을 연다.
구현과 실행 방법
정적 사이트는 Astro와 TypeScript로 만들고 Cloudflare Workers에서 제공한다. 브라우저에서 실제 속도 측정을 수행할 때는 @cloudflare/speedtest를 사용한다. 멀티플레이어 방은 GameRoom Durable Object가 관리하며, 비활성 상태의 비용을 거의 들이지 않도록 WebSocket 하이버네이션을 사용한다. PlayStats Durable Object는 누적 플레이 횟수를 보관한다.
게임과 점수 규칙은 src/lib에 있으며 Vitest 테스트로 검사한다. 개발자는 50% 제한이나 동점 처리처럼 조용히 오류가 생길 수 있는 규칙을 단위 테스트와 함께 두면 규칙을 바꿀 때 확인하기 쉽다고 설명한다. 방 하나를 하나의 Durable Object가 맡고, 결과 공개 전까지 예상치를 보관하는 방식이 여러 휴대전화가 공유 상태에 접근하는 구조에 맞았다는 설명도 덧붙였다.
실제 속도 측정은 시간이 걸리므로 짧은 가상 측정 모드를 제공한다. URL 끝에 ?mock=1을 붙이면 가상 테스트를 실행하고, ?tv=1을 붙이면 TV 레이아웃으로 바로 이동한다. 로컬에서 실행할 때는 npm install npm run dev를 사용한다. Worker를 로컬에서 실행해 방과 플레이 횟수 기록 기능을 시험하려면 npm run dev:worker를 실행한다.
배포는 Cloudflare Workers Builds가 처리한다. wrangler.jsonc에서 npm run build를 실행한 뒤 npx wrangler deploy가 dist를 정적 자산으로 올린다. Durable Object 마이그레이션도 배포 과정에서 실행된다.
개인정보 처리와 이용
한 화면에서 하는 게임의 설정, 참여자 이름, 점수는 브라우저의 로컬 저장소에 남는다. 방 이름과 얼굴 아이콘, 예상치, 점수는 6시간 동안 활동이 없으면 삭제된다. 플레이 횟수 기록에는 합계만 저장하며 Cloudflare Web Analytics는 쿠키를 사용하지 않는다. 속도 측정은 사용자의 브라우저에서 Cloudflare 네트워크를 대상으로 실행한다. 자세한 내용은 웹사이트의 개인정보 페이지에서 확인할 수 있다.
직접 해보려면 guessthespeed.com에 접속해 참여자를 추가하고 얼굴 아이콘을 고른다. 각자 비밀 예상치를 입력하거나 방 코드를 이용해 휴대전화로 참여한 뒤 측정을 시작하면 된다. 결과 화면에서 점수를 확인하고 우승자를 공유할 수 있다. 사이트에는 가족 게임의 밤을 위한 안내, 실제 속도 측정 방식 설명, 어린이를 위한 30분 수업 활동도 마련돼 있다.
코드는 GitHub 저장소에서 볼 수 있다. 사이트 제작자 나빈쿠마르 나마치바얌(NaveenKumar Namachivayam)은 이 프로젝트를 통해 범위를 좁힌 게임이 설계를 단순하게 하고, 실제 네트워크 측정값이 참여자의 관심을 끌며, 데이터 삭제와 쿠키 없는 분석이 개인정보 보호를 게임의 장점으로 만든다는 점을 배웠다고 설명한다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요