개발 취재 노트

여러 휴대폰을 노트북 서버에 붙일 때 핫스팟 접속 조건을 확인하는 법

무용 연습실에서 여러 사람이 각자 폰으로 같은 안무 영상을 맞춰 보는 웹앱(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"도 마찬가지다 .

해결

핫스팟 후보를 쓰기 전에 아래 두 가지를 본다.

  1. 핫스팟을 여는 폰의 최대 연결 대수(서버 노트북 포함 11대 이상)를 확인한다. 제조사·통신사 문서에서 해당 기종의 동시 접속 한도를 찾거나, 실제로 뷰어 10대와 노트북이 함께 붙는지 먼저 테스트한다. 한도를 확인하지 못하면 숫자를 알 수 없으므로, 그 핫스팟은 후보에서 뺀다. 세션에서 나온 "5대"는 출처가 없는 숫자로 취급한다 .
  2. 노트북과 뷰어 폰 한 대를 같은 핫스팟에 붙인다. 뷰어 폰은 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는 맞는데, 붙을 수 있을까?

연습실 와이파이 대신 핫스팟을 검토하던 날의 대화.

박도은
연습실에서 10명이 자기 폰으로 같은 안무 영상을 맞춰 보는 웹앱 있잖아. 노트북이 서버고 폰들이 거기 붙는 구조인데, 핫스팟 열고 다 연결하면 대역폭 괜찮을까?
정바다
계산은 간단해. 영상 하나가 초당 약 4.5메가비트(Mbps)를 받아야 하니까 10대면 45야. 와이파이가 그 정도는 버티겠지
정하늘
45라는 숫자는 맞는데, 버틴다는 근거가 뭐야? 10대를 동시에 틀어 본 사람 있어?
정바다
실측은 없지. 대신 AI 답변에서 5GHz(빠른 쪽 주파수) 공유기면 200~400은 나온다고 했잖아
정하늘
그 200~400이 측정한 값이야? 아니잖아, 그냥 써 놓은 숫자지. 계산은 통과했는데 증거가 없어.
박도현
대역폭은 화질을 낮추면 어떻게든 맞출 수 있어. 진짜 걸리는 건 핫스팟이라는 점이었잖아. 대역폭 얘기만 하는 건 본질을 피하는 거야.
박도은
핫스팟이 뭐가 그렇게 달라? 그냥 인터넷 공유 아니야?
정바다
아이폰 개인 핫스팟은 동시에 붙는 기기 수가 제한돼 있어. AI 답변에선 최대 5대라고 했어. 10명이면 절반도 못 들어가는 거지
정하늘
5대라는 숫자 어디서 나왔는데? 기종이랑 통신사마다 다르다는 단서도 붙었잖아. 확인 안 한 숫자로 결론 내리면 바다 말처럼 한쪽만 보는 거야.
박도은
그럼 그 한도는 어떻게 확인하는데? 설정 화면에서 바로 보여?
정바다
몰라. 그건 아직 확인 못 한 거야. 문서에서 기종별 한도를 찾거나, 10대랑 노트북이 실제로 붙는지부터 봐야 해.
박도은
그럼 두 번째 걸림돌은? 클라이언트 격리가 뭔데? 붙기는 붙는데 노트북만 안 열린다는 거야?
박도현
맞아. 핫스팟 중에는 연결된 기기끼리 서로 통신을 막는 설정이 있어. 인터넷은 되는데 옆 폰이 노트북 주소에 닿지 않는 거지. 우리 서버는 폰이 노트북에 직접 붙는 구조라 그러면 한 대도 안 열려
정하늘
그럼 45든 11이든 접속이 안 되면 의미가 없네. 계산이 맞다고 "된다"고 말할 수는 없겠다.
정바다
아, 맞아. 나도 "변수는 WiFi뿐"이라는 AI 말에 넘어갔어. 계산만 보고 한 말이었지
박도은
그럼 이번엔 어떻게 했는데? 핫스팟 버리고 끝?
박도현
핫스팟은 빼고 연습실 와이파이로 가기로 했어. 근데 그것도 측정한 게 아니라 판단이야. 공유기가 몇 대까지 버티는지도 아직 안 봤잖아
박도은
판단이면 뷰어 폰 한 대로 주소 여는 것부터 해보면 되지 않아? 핫스팟에서 그 주소를 연 기록은 대화에 없잖아.
정하늘
맞아. 그러니까 두 가지만 먼저 보자. 핫스팟 쓸 폰이 몇 대까지 붙는지, 뷰어 폰 한 대가 노트북 주소를 여는지. 둘 중 하나라도 막히면 핫스팟은 더 따질 것도 없어.
박도현
계산이 통과해도 접속 제약에서 막힐 수 있어. 여러 폰을 노트북에 붙이기 전에 대수와 격리부터 확인해야 해.