Regional Request Grid / 0.2.0 / 2026-11-10

세 지역의 Android를
하나의 요청 네트워크로.

서로 다른 지역의 Wi-Fi에 연결한 전용 Android 3대가 HTTP 요청과 데이터 추출을 처리합니다. 기존 fetch·requests·Playwright는 로컬 게이트웨이를 통해 기기의 네트워크를 사용할 수 있습니다.

서버 배포와 소프트웨어 테스트를 완료했습니다.
실제 Android 기기 3대는 설치 대기 상태입니다. 예시 화면의 지역·IP·처리 수는 샘플이며 실제 연결 상태가 아닙니다.

전송 방식이 바뀌었습니다

v0.1 위에 v0.2 APK를 설치 업데이트해 기존 서버 주소·기기 ID·암호화된 토큰이 유지되는 것을 확인했습니다. 앱을 삭제할 필요가 없습니다. Studio의 로컬 프록시는 서버 업데이트가 적용됐습니다.

기기 연결

  1. 각 기기에서 위 APK를 설치하고 해당 지역 Wi-Fi에 연결합니다.
  2. 앱의 서버 주소에 wss://request-grid.fika-d.com/worker를 입력합니다.
  3. 각각 region-a, region-b, region-c와 해당 기기의 토큰을 입력합니다.
  4. 설정 저장 · 연결을 누르고 충전 상태로 앱 화면을 유지합니다.

관리 토큰은 서버의 비공개 설정 파일에 있습니다. 관리 화면 로그인 후 Android 기기 설치 정보에서 기기별 토큰을 복사할 수 있습니다. 이 공개 안내 페이지에는 토큰이 없습니다.

이미 쓰는 코드와 연결

클라이언트 컴퓨터에서 로컬 게이트웨이를 실행한 뒤 프록시를 http://127.0.0.1:8899로 지정합니다. 프록시 비밀번호는 관리 API 토큰입니다.

프록시 사용자 이름선택 방식
auto사용 가능한 기기에 자동 배정
region-a특정 기기로 고정
session~research같은 세션은 같은 기기에 유지

Cloudflare 공개 주소는 API·WebSocket 접속용입니다. 일반 HTTP 프록시 주소로 직접 입력하지 않습니다. 브라우저의 JavaScript는 Playwright 실행 머신에서 처리하며 통신이 Android를 경유합니다.

리뷰와 테스트

검증결과
서버·전송 회귀 테스트37개 통과
Android 단위 테스트18개 통과
관리 화면11개 통과 / 페이지 오류 0
공개 Cloudflare 경로 Android14개 통과 / 4개 동시 터널 포함
릴리스 APK5개 통과 / v0.1 → v0.2 설치 업데이트·설정 유지·바이너리 HTTPS·사설 주소 차단
Docker3개 통과
npm 의존성 감사알려진 취약점 0건

작성자가 코드 리뷰를 수행했습니다. 전송 창·프레임 수·누적 ACK 경계·오프셋·타임아웃·느린 수신자·양방향 종료·구/신 버전 혼합을 확인했습니다. Wi-Fi 단절 시 TLS 소켓 정리를 백그라운드로 옮겼습니다. 검증 기록 JSON

공개 경로에서 비교한 결과

Android 15 arm64 에뮬레이터 한 대에서 동일 무작위 데이터 512 KiB를 각 버전으로 번갈아 왕복했습니다. 성공 결과는 모두 SHA-256이 일치합니다.

실행v0.1v0.2
1회21.79초8.23초
2회28.16초6.64초
3회중간 단절8.66초
성공한 실행의 중앙값24.98초 (2회)8.23초 (3회)

성공한 실행 기준 약 3.03배입니다. 구버전 실패 1회를 제외한 중앙값이며, 실기기 성능 보장이나 통계적 신뢰 구간을 뜻하지 않습니다. 512 KiB 원시 기록

2.5MB 비교 1쌍은 164.31초 → 113.07초였습니다. 이어진 구버전 반복 1회는 180초 제한으로 중단했습니다. Android→서버 데이터 메시지는 약 26% 작아졌습니다. 대용량 성공·실패 기록

데이터 메시지 크기는 WebSocket/TLS/TCP 헤더를 제외한 값입니다. 공개망 편차가 컸고 이전 50초 기록과는 페이로드·터널·망 상태가 달라 직접 비교하지 않았습니다.

설치 후 확인할 부분

실제 세 지역의 외부 IP 차이, 실기기 재부팅 후 복구, 제조사별 절전 동작과 24시간 연속 운전은 아직 검증하지 않았습니다. Android 에뮬레이터 테스트가 이 검증을 대신하지 않습니다.

프록시 스트림은 바이너리 연속 전송으로 최적화했습니다. 직접 실행 작업 API의 응답 최대 1 MiB·추출 결과 256 KiB 제한은 그대로입니다.

변경 요청은 단절 시 실행 여부 불명으로 표시하고 자동 재실행하지 않습니다. 세션 기기가 오프라인이면 다른 기기로 이동하지 않습니다.

APK 무결성

SHA-256: e7d27f7e8ca94385829aee9dc8681a3e43eab3419242bc5bc95b9651382bdc6e

릴리스 APK는 서명 검증을 통과했으며 서버 토큰을 포함하지 않습니다.