개발 취재 노트
여러 휴대폰을 노트북 서버에 붙일 때 핫스팟 접속 조건을 확인하는 법
무용 연습실에서 여러 사람이 각자 폰으로 같은 안무 영상을 맞춰 보는 웹앱(formation)을 만들고 있었다. 노트북이 서버를 맡고 폰들이 그 주소로 붙는 구조인데, 핫스팟을 열어 10명 정도를 연결해도 되는지가 질문이었다. 이 질문은 AI 코딩 도우미에게 던졌다. 버그가 아니라 설계 질문이었고, 계산상 대역폭은 넉넉해 보였다.
결론
핫스팟을 쓰기 전에 두 가지를 확인한다. (1) 핫스팟을 여는 폰이 동시에 몇 대까지 붙는지. 뷰어 10명에 서버 노트북까지 같은 핫스팟에 붙어야 하므로, 이 숫자가 11 이상이어야 후보가 된다. 이 글은 그 숫자를 확인하지 못했다. 제조사·통신사 문서나 실제 접속 테스트로 확인하고, 본문의 "5대"는 출처가 없는 숫자이므로 답으로 쓰지 않는다(방법은 아래 해결 1번). (2) 뷰어 폰 한 대가 핫스팟에 붙은 상태에서 노트북 서버 주소가 실제로 열리는지. 열리지 않으면 노트북 방화벽에서 Node.js(또는 서버 포트)가 개인·공용 모두 허용돼 있는지 먼저 본다 . 허용돼 있는데도 주소가 맞는 것을 확인한 뒤에도 안 열리면 클라이언트 격리(접속한 기기끼리 서로 통신을 막는 설정)를 의심한다. 대역폭 계산이 통과해도 이 두 가지에서 막힐 수 있다. 그 대화에서는 계산만 하고 두 가지 모두 확인하지 않은 채 핫스팟을 버리고 연습실 와이파이로 정했다 .
이 글의 결론: 핫스팟은 두 확인을 통과해야 후보가 되고, 그 전에는 공유기(연습실 와이파이)를 기본으로 둔다. 공유기가 몇 대까지 버티는지는 아직 측정하지 않았다.
상황
이 웹앱은 리더 폰이 재생 위치를 보내고 뷰어 폰들이 그 위치를 따라가는 구조다 . 서버는 노트북에서 Node로 돌고, 영상 구간은 디스크에서 읽어 응답으로 흘려보낸다 . 이 질문은 AI 코딩 도우미와의 대화에서 나왔다 . 뷰어가 서버에 붙는 주소는 네트워크를 바꿀 때마다 달라서, 이후에는 QR로 여는 방향으로 갔다 .
증상
겉으로 드러난 건 "10명 붙여도 되나?"라는 질문 하나였다. 계산은 간단했다. 영상 하나가 약 4.5Mbps이고 10대면 약 45Mbps다 . 핫스팟이 거론되자 화질 단계별로 10명 × 480p 약 11Mbps, × 360p 약 6Mbps처럼 나눠서 봤다 . 이 계산만 보면 "화질을 낮추면 넘길 수 있다"로 끝난다.
원인
계산은 대역폭 하나만 본다. 그런데 핫스팟에서는 대역폭보다 먼저 접속이 막힐 수 있다.
(a) 동시 접속 대수. 답변은 "아이폰 개인용 핫스팟은 오랫동안 최대 5대"라고 했다. 모델·통신사에 따라 다르다는 단서가 붙었고, 출처는 없었다 . 10명이면 이 숫자 하나로 절반 이상이 붙지 못한다. 이 숫자는 그 대화에서도 확인되지 않은 상태로 남았다.
(b) 클라이언트 격리. 일부 핫스팟은 접속한 기기끼리 통신을 막는다. 인터넷은 되지만 옆 폰이 노트북에는 닿지 않는다. 이 구조는 폰이 노트북에 직접 붙는 방식이라 격리가 걸리면 뷰어가 한 대도 열리지 않는다 .
덧붙여, 대역폭 판단의 근거였던 "변수는 WiFi뿐"이라는 문장과 "실측 합산 200~400Mbps"라는 수치도 측정이 아니라 계산이나 가정이었다. "CPU·메모리 부담 거의 0"도 마찬가지다 .
해결
핫스팟 후보를 쓰기 전에 아래 두 가지를 본다.
- 핫스팟을 여는 폰의 최대 연결 대수(서버 노트북 포함 11대 이상)를 확인한다. 제조사·통신사 문서에서 해당 기종의 동시 접속 한도를 찾거나, 실제로 뷰어 10대와 노트북이 함께 붙는지 먼저 테스트한다. 한도를 확인하지 못하면 숫자를 알 수 없으므로, 그 핫스팟은 후보에서 뺀다. 세션에서 나온 "5대"는 출처가 없는 숫자로 취급한다 .
- 노트북과 뷰어 폰 한 대를 같은 핫스팟에 붙인다. 뷰어 폰은 Wi-Fi 목록에서 핫스팟 이름을 고르고 비밀번호를 넣는다. 노트북도 이 핫스팟에 붙어야 서버에 닿는다. 노트북 주소와 포트는 서버 화면(
server.html)의 "📱 뷰어 접속" URL을 복사하면 된다 . 이 URL이 엉뚱해 보이면 서버가 첫 번째 non-internal IPv4를 자동으로 고르는 구조라 어댑터가 여러 개일 때 다른 주소를 잡았을 수 있다 . 노트북이 핫스팟을 여는 경우 게이트웨이는 보통192.168.137.1이고, 폰이 핫스팟이면 폰이 준192.168.x.x대역이다 . 세션에서 쓴 포트는 3000이었다 . 그렇게 만든http://노트북주소:포트/viewer.html을 뷰어 폰 브라우저에서 연다.
- 열리면 격리는 없는 것이다. 다음 단계로 넘어간다.
- 열리지 않으면 클라이언트 격리를 먼저 의심한다. 노트북 방화벽이 서버 포트를 막았는지도 같이 본다.
- 격리를 끄는 메뉴를 찾지 못하면 그 핫스팟은 쓰지 않는다.
두 가지가 모두 통과해야 핫스팟을 후보로 다시 올린다. 실제 결정은 판단이었다. 사용자는 핫스팟을 버리고 연습실 와이파이에 붙기로 했다 . 이 판단은 측정 결과가 아니므로, 연습실 공유기가 몇 대까지 버티는지도 같은 방식으로 확인해야 한다.
덤 — 계산한 숫자와 잰 숫자를 구분하기
10대 45Mbps는 계산이고, "실측 200~400Mbps"는 측정이 아니었다 . 글이나 회의에서 두 숫자를 같은 문장에 섞으면, 듣는 사람은 계산을 측정으로 받아들인다.
취재 후기 — 45Mbps는 맞는데, 붙을 수 있을까?
연습실 와이파이 대신 핫스팟을 검토하던 날의 대화.