Android Studio의 Network Inspector는 모바일 앱의 네트워크 트래픽을 실시간으로 모니터링하고 분석하기 위한 내장 프로파일링 도구입니다. Android Developers 공식 문서(2025)에 따르면, 이 도구는 요청 실행 시간, 전송된 데이터 양 및 각 호출의 HTTP 상태를 추적할 수 있습니다. 이 도구는 앱 코드 변경이 필요 없으며 API Level 14 이상의 모든 프로젝트에서 “즉시 사용” 가능합니다.
핵심 요약
Network Inspector는 Android Studio에 내장된 네트워크 활동 프로파일링 도구입니다. 개발자가 앱에서 보내는 모든 HTTP 및 HTTPS 요청(헤더, 요청 및 응답 본문, 상태 코드, 실행 시간 포함)을 실시간으로 볼 수 있습니다. Android Studio 3.0부터 Android Profiler 패널을 통해 사용할 수 있습니다.
Network Inspector의 주요 목적은 모바일 앱과 서버 간의 네트워크 통신 디버깅입니다. 이 도구는 전송 데이터의 정확성 확인, 응답 시간 분석, API 오류 검색 및 여러 요청이 단일 화면 로드 시 발생하는 것과 같은 비최적 네트워크 패턴 발견에 사용됩니다. Network Inspector는 API Level 14 이상의 모든 기기에서 작동합니다.
이 도구는 모든 주요 Android HTTP 클라이언트를 지원합니다: OkHttp(버전 2.x 이상), Retrofit, Ktor(KMM), UrlConnection, Apache HttpClient(레거시) 및 WebView. OkHttp 및 Retrofit에는 OkHttp Profiler 라이브러리가 필요하며, Android Studio 4.1+에서 자동으로 연결됩니다. Ktor의 경우 별도의 인터셉터 설정이 필요합니다.
Network Inspector는 Android Profiler와 함께注入되는 Profiler Agent 메커니즘을 사용하여 시스템 수준에서 네트워크 호출을 가로챕니다. 올바른 작동을 위해 앱의 디버그 빌드가 필요합니다. 이 도구는 앱 코드를 변경하지 않으며 기본 기능에 종속성 추가가 필요하지 않습니다.
프로파일링이 시작되면 Network Inspector는 앱의 디버그 프로세스에 연결하여 OkHttp Client, UrlConnection 또는 기타 지원되는 라이브러리를 통과하는 모든 HTTP 호출을 수신합니다. 각 요청은 타임스탬프와 함께 기록되어 네트워크 활동의 타임라인을 구축할 수 있습니다. HTTPS의 경우 시스템 계층이 사용되어 전송 중 암호화를 유지하면서 Studio 내에서 디코딩된 콘텐츠를 볼 수 있습니다.
데이터 수집은 호스트의 별도 프로세스에서 실행되는 Android Studio Profiler Service를 통해 이루어집니다. 기기에서는 ADB 채널을 통해 요청 메타데이터를 전송하는 경량 에이전트가 실행됩니다. 이는 앱 성능에 미치는 영향을 최소화합니다. Google에 따르면 오버헤드는 3% 미만입니다. 요청 데이터(본문, 헤더)는 세부 정보를 활성화하여 볼 때만 전송됩니다.
// OkHttp를 Network Inspector와 통합하기 위한 연결 설정
val client = OkHttpClient.Builder()
.addInterceptor(HttpLoggingInterceptor().apply {
level = HttpLoggingInterceptor.Level.BASIC
})
.build()
// Network Inspector는 client를 통한 모든 호출을 자동으로 가로챕니다
client.newCall(Request.Builder()
.url("https://api.example.com/data")
.build()).execute()
Network Inspector는 네트워크 트래픽의 종합적인 분석을 위한 도구 세트를 제공합니다. 각 기능은 헤더 확인부터 API 성능 분석까지 특정 디버깅 작업을 해결하도록 설계되었습니다.
Network Inspector의 기본 화면은 모든 요청의 시간순을 타임라인 형태로 표시합니다. 각 요청은 색상 막대로 표시됩니다: 녹색 — 성공 응답(2xx), 파란색 — 리디렉션(3xx), 노란색 — 클라이언트 오류(4xx), 빨간색 — 서버 오류(5xx). 막대의 길이는 연결부터 전체 응답 수신까지의 요청 실행 시간에 해당합니다. 이를 통해 느리거나 오류가 발생한 요청을 즉시 식별할 수 있습니다.
| 매개변수 | 설명 | 예시 값 |
|---|---|---|
| URL | 요청의 전체 주소 | https://api.example.com/v2/users |
| Method | 요청의 HTTP 메서드 | POST |
| Status | 응답 HTTP 코드 | 200 OK |
| Size | 요청 + 응답 크기(바이트) | 12.4 KB |
| Time | 전체 실행 시간 | 342 ms |
특정 요청을 선택하면 세부 정보 패널이 열립니다: Headers(모든 요청 및 응답 헤더), Request Body(텍스트 또는 바이너리 형식의 요청 본문), Response Body(JSON 형식 지원 응답 본문), Cookies(송수신된 쿠키), Timing(DNS, Connection, TLS Handshake, Request, Response 단계별 시간 분할).
Network Inspector는 URL, HTTP 메서드, 상태 코드 및 콘텐츠 유형별로 요청 필터링을 지원합니다. 특정 도메인에 대한 요청을 제외하여 필요한 API에만 집중할 수 있습니다. 검색은 본문과 헤더를 포함한 모든 요청 필드에서 작동하여 특정 앱 기능을 디버깅할 때 유용합니다. 결합 필터를 사용하면 프로파일링 실행 시마다 자동으로 적용되는 규칙 세트를 만들 수 있습니다.
타임라인은 URL 패턴별로 요청 그룹화를 지원합니다. 예를 들어 /api/v2/users/* 형태의 모든 요청을 하나의 그룹으로 축소할 수 있습니다. 이는 앱이 짧은 시간에 수백 개의 요청을 보낼 때 분석을 단순화합니다. 인접 요청 비교 기능은 반복 호출 시 서버 응답의 변경 사항을 식별하는 데 도움이 됩니다.
Network Inspector의 실제 사용은 일반적인 디버깅 시나리오를 다룹니다: 데이터 형식 확인, 느린 엔드포인트 식별, 닫히지 않은 연결로 인한 메모리 누수 발견 및 캐싱 분석.
일반적인 작업은 서버가 예상 형식으로 데이터를 반환하는지 확인하는 것입니다. Network Inspector는 JSON 형식(구문 강조 포함)으로 응답 본문을 표시합니다. 클라이언트에서 응답을 파싱할 수 없는 경우 인스펙터에서 즉시 원인(필드 누락, 잘못된 데이터 유형(숫자 대신 문자열) 또는 추가 중첩)을 확인할 수 있습니다. 서버가 오류를 반환하면 인스펙터는 코드와 메시지가 포함된 오류 구조를 표시합니다. 바이너리 형식(Protocol Buffers, 이미지)의 경우 크기와 content-type이 표시됩니다.
Timing 탭은 요청 실행을 단계별로 분할합니다: DNS Resolution, TCP Connection, TLS Handshake, Request Send, Response Receive. 전체 시간이 1~2초를 초과하면 단계별 분석을 통해 원인을 파악할 수 있습니다. 예를 들어, 긴 DNS는 리졸버 문제를, 긴 TLS Handshake는 서버의 오래된 프로토콜 버전을, 긴 Response는 느린 서버 코드 또는 과도한 데이터가 있는 비효율적인 요청을 나타냅니다. Timing 분석은 서버 측 최적화 전에 병목 지점을 식별하는 데 도움이 됩니다.
Network Inspector는 중복 요청을 식별하는 데 도움이 됩니다. 예를 들어 화면 회전 시 Activity가 데이터 로딩을 다시 생성하는 경우입니다. 타임라인에서 연속된 동일한 요청이 문제를 명확하게 나타냅니다. 해결책은 캐싱, ViewModel 상태 유지 또는 일회성 로딩을 위한 SingleLiveEvent 사용이 될 수 있습니다.
// 중복 제거를 위한 OkHttp 요청 캐싱
val cache = Cache(
File(context.cacheDir, "http_cache"),
cacheSize = 10L * 1024 * 1024 // 10 MB
)
val cachedClient = OkHttpClient.Builder()
.cache(cache)
.addNetworkInterceptor(CacheInterceptor())
.build()
광범위한 기능에도 불구하고 Network Inspector는 몇 가지 한계가 있으며 이를 고려하는 것이 중요합니다. 자체 서명 인증서가 있는 HTTPS 가로채기 또는 타사 라이브러리 트래픽 분석과 같은 일부 시나리오에서는 대체 도구가 필요할 수 있습니다.
Network Inspector는 Android 앱에서만 작동하며 iOS를 지원하지 않습니다. Kotlin Multiplatform(KMM)의 경우 기본 부분에서 실행되는 요청 중 일부가 표시되지 않을 수 있습니다. gRPC, WebSocket(HTTP 아님), GraphQL(Apollo 3.x 미만)과 같은 일부 라이브러리는 추가 인터셉터 설정 없이는 부분적으로 또는 전혀 가로채지 못할 수 있습니다.
더 깊은 네트워크 트래픽 분석을 위한 타사 솔루션이 있습니다: Charles Proxy(HTTPS 가로채기가 있는 완전한 프록시 서버), Proxyman(macOS용 대안), Wireshark(패킷 수준 분석), Stetho by Facebook(Chrome DevTools 통합), Chucker(앱 내 요청 검사 라이브러리). 각 도구는 고유한 영역이 있습니다: Charles와 Proxyman은 개발 초기 단계에서 서버 상호작용 디버깅에 필수적이며, Chucker는 테스트 빌드에서 정보 수집에 사용됩니다.
| 도구 | 유형 | 플랫폼 | HTTPS | HAR |
|---|---|---|---|---|
| Network Inspector | Android Studio 내장 | Android | 지원 | 지원 |
| Charles Proxy | 프록시 서버 | 크로스 플랫폼 | 지원 | 지원 |
| Proxyman | 프록시 서버 | macOS, iOS | 지원 | 지원 |
| Chucker | 인앱 인스펙터 | Android | 지원 | 미지원 |
| Wireshark | 패킷 분석기 | 크로스 플랫폼 | 미지원 | 미지원 |
자주 묻는 질문
앱이 Debug 구성으로 빌드되고 Android Profiler가 연결된 상태에서 실행되었는지 확인하세요. OkHttp 4.x를 사용하는 경우 라이브러리를 최신 버전으로 업데이트해야 할 수 있습니다. Ktor의 경우 요청은 인터셉트를 지원하는 Engine이 있는 Ktor 클라이언트를 사용할 때만 표시됩니다.
네, Network Inspector는 추가 설정 없이 HTTPS 트래픽을 지원합니다. Charles Proxy와 달리 루트 인증서 설치가 필요하지 않습니다. 이 도구는 Android Profiler의 시스템 메커니즘을 사용하여 디버그 세션 내에서 트래픽을 디코딩합니다.
Network Inspector는 HAR(HTTP Archive) 형식으로 데이터 내보내기를 지원합니다. 패널 오른쪽 상단의 Export 버튼을 클릭하세요. HAR 파일은 모든 HAR 뷰어에서 열거나 Charles Proxy 및 Proxyman으로 가져와 추가 분석할 수 있습니다.
Google에 따르면 활성 프로파일링 시 오버헤드가 3%를 초과하지 않습니다. Network Inspector가 비활성화된 경우 오버헤드는 없습니다. 릴리스 빌드에서는 이 도구를 사용하지 않는 것이 좋지만, 디버그 세션에서는 최신 기기에서 영향이 눈에 띄지 않습니다.
응답 본문이 읽을 수 없는 원시 데이터로 표시되는 경우 gzip 압축 또는 바이너리 형식(Protocol Buffers, MessagePack) 때문일 수 있습니다. Network Inspector는 gzip을 자동으로 디코딩합니다. 사용자 정의 형식의 경우 응답 헤더의 Content-Type 힌트를 사용하세요.
요약
턴키 방식의 모바일 애플리케이션을 개발해 드립니다
IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.