본문으로 건너뛰기
중급약 22분

기기에서 직접 거는 저하 — iOS 링크 컨디셔너와 Android 속도 제한

추가 장비 없이 스마트폰 자체에서 네트워크 저하를 거는 두 가지 방법을 익힌다. iOS 네트워크 링크 컨디셔너의 프로파일과 사용자 정의, Android 개발자 옵션의 다운로드 속도 제한, 각각의 한계와 원복 절차를 다룬다.

  • #iOS
  • #Android
  • #NetworkLinkConditioner
  • #개발자옵션
  • #실기기

개념

저하 지점을 폰 안으로 옮긴다

레슨 2의 결론은 "PC를 통과하는 폰 트래픽은 PC 도구가 못 본다"였다. 가장 확실한 해결은 저하를 거는 지점을 폰 자신으로 옮기는 것 이다.

[PC 기반]   폰 → PC(핫스팟) → 인터넷
                  ↑ 여기서 걸려다 실패
 
[기기 내장] 폰 → 인터넷
             ↑ 여기서 건다. 경로를 탈 필요가 없다

경로가 짧아지면 실패할 구석도 줄어든다. 추가 장비도, 커널 드라이버 설치 승인도, 프록시 인증서도 필요 없다. 오늘 당장 되는 방법이 이것이다.

방법 ① — iOS 네트워크 링크 컨디셔너

애플이 제공하는 기기 내장 기능이다. iOS 실기기 네트워크 테스트의 사실상 표준 수단이라고 봐도 된다.

활성화 절차

기본적으로 숨겨져 있고, 개발자 모드를 한 번 켜야 메뉴가 나타난다.

1. Xcode가 설치된 Mac에 기기를 USB로 1회 연결한다
   기기에서 [이 컴퓨터를 신뢰] 를 선택한다
 
2. 기기에 개발자 모드가 활성화되면 재시동한다
 
3. 설정 > 개발자 > Network Link Conditioner 로 이동한다
 
4. 프로파일을 선택하고 [Enable] 을 켠다
   → 즉시 기기 전체 통신에 적용된다

1단계 때문에 Mac과 Xcode가 한 번은 필요하다. 한 번 켜두면 그 뒤로는 Mac 없이 폰에서만 조작할 수 있다. 팀에 Mac이 한 대만 있어도 테스트 기기들을 미리 전부 활성화해두면 된다.

주요 프로파일

프로파일재현하는 것이 모듈의 상태 모델 대응
Edge저속·고지연 회선저하
3G구형 이동통신 회선저하
Very Bad Network극단적으로 나쁜 회선Limited Service
100% Loss완전 단절단절
High Latency DNS이름 해석만 지연Limited-B (레슨 6)
사용자 정의대역폭·손실·DNS 지연 개별 입력임의 조건

High Latency DNS 가 이 도구의 숨은 강점이다. 다른 도구로는 DNS만 골라 지연시키기가 까다로운데, 여기서는 프로파일 하나로 된다. DNS 실패는 Limited Service의 주요 원인 중 하나라 레슨 6에서 다시 다룬다.

사용자 정의로 상태 모델 맞추기

프리셋은 편하지만 우리 조건표와 수치가 어긋난다. 정확한 값이 필요하면 사용자 정의에 직접 입력한다. 입력 항목은 다음과 같다.

In Bandwidth   / In Packets Dropped   / In Delay
Out Bandwidth  / Out Packets Dropped  / Out Delay
DNS Delay

In(다운)과 Out(업로드)을 따로 입력할 수 있다는 점이 중요하다. 레슨 1에서 강조한 비대칭 조건을 여기서 그대로 만들 수 있다.

[비대칭 저하 조건 예]
In  Bandwidth 5000 Kbps  /  Out Bandwidth 500 Kbps
In  Delay 150 ms         /  Out Delay 150 ms
In  Dropped 2 %          /  Out Dropped 2 %

주의사항 — 기기 전체에 걸린다

이 기능은 특정 앱이 아니라 기기 전체 통신에 적용된다. 통화, 메시지, 사내 업무용 앱, 인증 앱까지 전부 영향을 받는다.

테스트 전용 단말 사용을 강력히 권장한다. 개인 단말에 걸었다가 중요한 알림을 놓치는 일이 실제로 일어난다.

또 하나. 프로파일을 반복해서 전환한 뒤 통신이 정상으로 복구되지 않은 사례가 보고되어 있다. 여러 조건을 연속으로 테스트할 때는 조건 사이에 Enable을 껐다 켜고, 정상 속도가 회복되는지 확인하는 편이 안전하다.

종료할 때는 반드시 Enable을 끄고 통신 상태를 실제로 확인 한다. 이건 레슨 끝의 원복 체크리스트에 다시 나온다.

방법 ② — Android 개발자 옵션 다운로드 속도 제한

Android 15부터 개발자 옵션에 네트워크 다운로드 속도 제한 (Network download rate limit) 항목이 제공된다. Pixel 등 일부 Android 13 기기에도 존재한다.

설정 절차

1. 개발자 옵션 열기
   설정 > 휴대전화 정보 > 소프트웨어 정보에서
   빌드번호를 7회 연속 탭
 
2. 항목 진입
   설정 > 개발자 옵션 > 네트워크 다운로드 속도 제한
 
3. 값 지정
   바이트/초 단위로 목표 속도 선택 (제한 없음 = 해제)
 
4. 적용 확인
   fast.com 접속해 목표값 ±20% 이내인지 확인 후 테스트 시작

단위가 바이트/초 라는 점을 놓치면 안 된다. 레슨 2의 환산표를 다시 보자.

Mbps → 바이트/초 :  × 1,000,000 ÷ 8
 
30 Mbps  = 3,750,000 B/s  (≈ 3.75 MB/s)
10 Mbps  = 1,250,000 B/s  (≈ 1.25 MB/s)
 1 Mbps  =   125,000 B/s  (≈ 125 KB/s)
0.1 Mbps =    12,500 B/s  (≈ 12 KB/s)

Wi-Fi와 셀룰러 모두에 적용된다 는 것도 특징이다. iOS NLC와 마찬가지로 기기 전체에 걸린다.

한계 — 다운로드 대역폭 하나뿐

이 기능의 범위는 명확하다.

제어 가능제어 불가
다운로드 대역폭업로드 대역폭
지연(RTT)
지터
패킷 손실
DNS

레슨 1의 4축 중 하나만 건드린다. 이게 무슨 뜻인지 분명히 해두자 — 이 방법만으로는 재시도·타임아웃·중복 요청 결함을 재현할 수 없다. 그런 결함은 지연과 손실에서 나오기 때문이다.

그래서 Android 단독 테스트에서 이 기능의 쓰임은 제한적이다. "이미지가 많은 화면이 느린 회선에서 어떻게 보이는가" 같은 대역폭 민감 시나리오에는 훌륭하지만, 그 이상은 레슨 4(프록시)나 레슨 5 (리눅스 AP)로 가야 한다.

또 하나, 이 기능은 커널 지원이 필요해 제조사·기종에 따라 항목이 아예 없을 수 있다. 없으면 없는 것이고, 대안으로 넘어간다.

활용 팁 — 핫스팟 경유

이 항목이 있는 기기를 핫스팟으로 켜고 다른 테스트 기기를 연결하면 제한이 함께 적용되는 경우가 있다. 기기·OS 조합에 따라 다르므로 반드시 연결된 기기 쪽에서 속도를 측정해 확인해야 한다.

동작한다면 항목이 없는 기기에도 대역폭 제한을 걸 수 있는 우회로가 된다.

두 방법의 위치

             iOS NLC              Android 속도 제한
─────────────────────────────────────────────────────
대역폭        ✅ (In/Out 별도)      ✅ (다운로드만)
지연          ✅ (In/Out 별도)      ❌
손실          ✅ (In/Out 별도)      ❌
DNS 지연      ✅                   ❌
비대칭        ✅                   ❌
비용          무료                  무료
난이도        낮음 (Mac 1회 필요)    낮음
적용 범위      기기 전체              기기 전체

iOS는 이 방법 하나로 이 모듈의 거의 모든 조건을 만들 수 있다. Android는 대역폭만 되므로, 지연·손실이 필요하면 다른 방법과 병행한다.

이 비대칭이 실무에서 의미하는 바가 있다. "두 OS를 같은 조건으로 동시에 회귀하고 싶다"면 기기 내장 기능으로는 안 된다. 그때가 레슨 5의 리눅스 AP를 구축할 시점이다.

원복 — 잊으면 다음 테스트가 오염된다

iOS      설정 > 개발자 > Network Link Conditioner 의 Enable 해제
         → 정상 속도 회복 확인 (fast.com)
         → 통화·문자 수신 확인
 
Android  개발자 옵션 > 네트워크 다운로드 속도 제한 > [제한 없음]
         → 정상 속도 회복 확인

원복 확인까지가 테스트 절차다. 걸어둔 채로 반납한 테스트 기기 때문에 다음 사람이 반나절을 날리는 일이 흔하다. 기기 대장에 "조건 적용 여부" 칸을 만들어두는 팀도 있다.

실무에서 왜 필요한가

오늘 당장 시작할 수 있다

레슨 4·5의 방법은 준비가 필요하다. 프록시는 인증서를 설치해야 하고, 리눅스 AP는 반나절 구축이 든다. 기기 내장 기능은 준비 시간이 사실상 0이다.

"네트워크 저하 테스트를 시작해야 하는데 어디부터"라는 상황에서 답은 언제나 이것이다. 여기서 시작해 필요가 커지면 확장한다.

보안 정책과 충돌하지 않는다

커널 드라이버도, 루트 인증서도 설치하지 않는다. OS가 제공하는 기능을 켜는 것뿐이다. 보안팀 승인이 필요 없다는 점 이 조직에 따라서는 가장 큰 장점이 된다.

실기기 라디오 동작이 그대로다

에뮬레이터와 달리 실제 Wi-Fi·셀룰러 라디오가 그대로 동작한다. 핸드오버, 절전 모드 진입, 신호 세기 변화 같은 실기기 고유 동작 위에서 저하가 얹힌다. 모듈 17 레슨 5에서 다룬 실기기의 가치가 여기서도 그대로다.

실습 과제

과제 1 — iOS NLC 활성화하고 프로파일 비교

테스트용 iPhone에 NLC를 활성화하고, 같은 화면을 세 조건에서 열어 로딩 시간을 기록한다.

조건화면 진입 완료까지관찰된 현상
Enable OFF
3G
Very Bad Network

"관찰된 현상" 칸이 이 과제의 핵심이다. 스피너가 몇 초 돌았는지, 중간에 깨진 화면이 보였는지, 오류 메시지가 떴는지를 적는다.

과제 2 — 사용자 정의로 우리 조건 만들기

레슨 1 과제 1에서 만든 상태 정의표의 각 조건을 NLC 사용자 정의에 입력해 프로파일로 저장한다. 저장할 때 조건 식별자를 이름으로 쓴다 (예: 저하-B, Limited-A).

입력 후 반드시 측정해 목표값 ±20% 이내인지 확인한다.

과제 3 — 비대칭 조건 만들고 업로드 기능 테스트

NLC 사용자 정의에서 In 5000 Kbps / Out 500 Kbps로 비대칭 조건을 만든다. 그 상태에서 우리 앱의 업로드 기능 (사진 첨부, 파일 전송 등)을 실행한다.

  • 진행률 표시가 정확한가
  • 취소가 되는가
  • 중간에 앱을 백그라운드로 보내면 어떻게 되는가
  • 완료 후 서버 상태와 화면 상태가 일치하는가

과제 4 — Android 속도 제한 단위 실습

Android 기기에서 다음 값을 차례로 입력하고, 매번 fast.com으로 측정해 표를 채운다.

입력값 (B/s)기대 (Mbps)실측 (Mbps)±20% 이내?
3,750,00030
1,250,00010
125,0001
12,5000.1

마지막 행에서 fast.com이 제대로 측정되는지도 확인한다. 너무 느리면 측정 도구 자체가 타임아웃될 수 있다.

과제 5 — 한계 체험하기

Android 속도 제한을 가장 낮은 값으로 걸어두고, 우리 앱에서 작은 API 하나만 호출하는 동작 (예: 좋아요 누르기)을 해본다.

체감 차이가 거의 없을 것이다. 왜 그런지 설명할 수 있으면 이 과제는 성공이다. (힌트: 4축 중 어느 축을 건드렸는가)

과제 6 — 원복 절차 문서화

우리 팀의 테스트 기기 원복 체크리스트를 만든다. iOS·Android 각각에 대해 확인 항목을 적고, 기기 반납 시 이 체크리스트를 거치는 규칙 을 제안한다.

자가 체크리스트

  • 저하 지점을 기기로 옮기는 것이 왜 가장 확실한지 설명할 수 있다
  • iOS NLC를 활성화하는 절차를 순서대로 말할 수 있다
  • NLC 주요 프로파일과 이 모듈의 상태 모델 대응을 안다
  • NLC 사용자 정의에서 In/Out을 따로 설정해 비대칭 조건을 만들 수 있다
  • High Latency DNS 프로파일이 무엇을 재현하는지 안다
  • NLC가 기기 전체에 적용된다는 점과 그 위험을 설명할 수 있다
  • Android 다운로드 속도 제한의 위치와 단위(바이트/초)를 안다
  • Mbps ↔ 바이트/초 환산을 정확히 할 수 있다
  • Android 속도 제한이 4축 중 하나만 제어한다는 것과, 그 결과 재현할 수 없는 결함 유형을 안다
  • 두 OS를 같은 조건으로 동시 회귀하려면 왜 다른 방법이 필요한지 설명할 수 있다
  • 원복 절차와 확인 항목을 말할 수 있다

흔한 실수

개인 단말에 NLC를 건다. 기기 전체에 적용되므로 통화·메신저·인증 앱이 전부 느려진다. 급한 연락을 놓치고 나서야 알아챈다.

프로파일 이름만 보고 조건을 안다고 생각한다. 3G 가 정확히 몇 Mbps에 몇 ms인지는 프리셋마다 다르다. 조건표와 맞추려면 사용자 정의를 쓰고 측정으로 확인한다.

Android 속도 제한으로 타임아웃 테스트를 하려 한다. 지연과 손실이 없으므로 타임아웃 경로가 열리지 않는다. 아무리 느리게 해도 작은 API는 멀쩡하게 돌아온다.

바이트/초 칸에 Mbps 숫자를 넣는다. 10 을 입력하면 10 Mbps가 아니라 초당 10바이트다. 통신이 사실상 멈춘다. 반대로 10000000 을 Mbps로 착각하면 제한이 없는 것과 같아진다.

측정 없이 다음 단계로 간다. 레슨 2의 6단계 절차는 기기 내장 기능에도 그대로 적용된다. 기기에서 거는 방법이라고 해서 항상 적용되는 것은 아니다.

원복을 잊고 기기를 반납한다. 다음 사람이 "이 폰 왜 이렇게 느리지"로 반나절을 쓴다. 특히 Android 속도 제한은 개발자 옵션 깊숙이 있어 잘 안 보인다.

프로파일을 연속으로 여러 번 바꾼다. 통신이 복구되지 않는 사례가 보고되어 있다. 조건 사이에 Enable을 끄고 정상 상태를 한 번 확인하는 습관을 들인다.

참고 자료

  • Apple Developer — Network Link Conditioner. Xcode 추가 도구 및 기기 개발자 메뉴에서의 사용법
  • Android 15 adds developer option to simulate slow internet speeds — 네트워크 다운로드 속도 제한 항목의 도입 배경과 적용 범위
  • Developer Options: Network Download Rate Limit — Samsung Members — 실제 기기에서의 항목 위치와 동작 보고
  • 모듈 17 레슨 5 실기기 vs 에뮬레이터 — 실기기에서만 재현되는 라디오 동작. 기기 내장 저하가 그 위에 얹힌다는 점이 중요하다
  • 이 모듈 레슨 5 리눅스 AP + tc netem — Android에서 지연·손실이 필요할 때의 정공법

낯선 말 풀이

이 레슨에 나온 약어입니다. 본문에서도 처음 나올 때 점선으로 표시해 두었습니다 (제목과 링크 글자는 그대로 둡니다).

DNS — 도메인 이름 체계
사람이 읽는 주소를 컴퓨터가 쓰는 번호로 바꿔 주는 전화번호부.
RTT — 왕복 시간
요청을 보내고 답이 돌아오기까지 걸린 시간.
OS — 운영체제
기기를 돌리는 바탕 프로그램 — 윈도우, 맥, 안드로이드 같은 것.
API — 응용 프로그램 인터페이스
프로그램끼리 주고받는 창구. 사람이 화면 버튼을 누르는 대신, 프로그램이 정해진 주소로 요청을 보내 답을 받는다.

용어집 전체 보기