Android Profiler: 그것이 무엇인가, CPU, Memory 그리고 Network 기능

저자: IT Sectr 게시일: 2026-03-30 읽는 시간: 9 분

Android Profiler는 Android Studio에 내장된 도구 모음으로, 앱 성능을 실시간으로 모니터링합니다. 타사 라이브러리 없이 CPU 부하, 메모리 사용량, 네트워크 트래픽 및 에너지 소비를 추적할 수 있습니다. Android Developers에 따르면, 프로파일러는 IDE에 직접 통합되어 있으며 연결된 기기의 모든 프로세스에 대해 밀리초 단위의 정확도로 메트릭을 제공합니다.

주요 포인트

  • Android Profiler — CPU, Memory, Network 및 Energy를 위한 Android Studio 내장 프로파일러.
  • CPU Profiler는 정확한 호출 트리로 스레드별 프로세서 부하를 표시합니다.
  • Memory Profiler는 Java Heap, Native Heap 및 Graphics Memory를 실시간으로 추적합니다.
  • Network Profiler는 각 HTTP 요청을 크기, 지속 시간 및 헤더와 함께 기록합니다.
  • Energy Profiler는 기기 배터리를 과도하게 방전시키는 작업을 식별합니다.

Android Profiler란 무엇인가?

Android Profiler는 기존 Android Monitor와 DDMS를 대체한 Android Studio의 구성 요소입니다. 앱의 모든 측면을 프로파일링하기 위한 통합 인터페이스를 제공합니다: CPU Profiler(프로세서 분석), Memory Profiler(메모리 작업), Network Profiler(네트워크 요청), Energy Profiler(에너지 소비). Android Studio를 통해 앱을 실행하면 데이터가 자동으로 수집됩니다.

프로파일러는 에뮬레이터와 USB로 연결된 물리적 기기 모두에서 작동합니다. Google I/O 2023에 따르면, Android Profiler는 Android 프로젝트의 70% 이상에서 사용되며 성능 진단의 표준 도구로 간주됩니다. 타사 솔루션에 비해 주요 장점은 제로 통합입니다: build.gradle에 종속성을 추가하거나 앱 코드를 수정할 필요가 없습니다.

Android Profiler의 아키텍처는 Perfetto에 기반합니다 — 커널과 앱 수준에서 데이터를 수집하는 Android 시스템 트레이서입니다. Perfetto는 최소 오버헤드(CPU 1% 미만)를 보장하고 최대 30분까지 장기 기록을 지원합니다. 이를 통해 빠른 작업뿐만 아니라 긴 시나리오도 프로파일링할 수 있습니다 — 화면 전환, 백그라운드 동기화, 1시간 사용 동안의 메모리 소비.

Android Profiler가 수집하는 데이터

프로파일러는 네 가지 데이터 유형을 수집합니다: CPU — 각 코어 및 스레드의 부하, Memory — Java Heap, Native Heap, Stack, Graphics, Network — 모든 수신 및 발신 요청, Energy — 에너지 소비 카테고리(Idle, Light, Medium, Heavy). 데이터는 타임라인에 동기화되어 CPU 변화가 Memory와 에너지 소비에 어떤 영향을 미치는지 동시에 확인할 수 있습니다.

CPU Profiler: 프로세서 및 스레드 분석

CPU Profiler는 타임라인에 실시간으로 프로세서 부하를 표시하며, 앱의 스레드별로 나뉩니다. 각 스레드는 색상이 있는 선 또는 영역으로 표시됩니다 — 영역이 넓을수록 스레드가 더 많은 프로세서 시간을 차지합니다. 빨간색 영역은 앱 작업, 파란색은 시스템 호출, 회색은 대기를 의미합니다.

상세 분석을 위해 CPU Profiler는 세 가지 기록 모드를 지원합니다: Trace Java Methods(모든 Java 메소드 추적), Trace C/C++ Functions(NDK 네이티브 함수 추적), Sample Java Methods(샘플링, 권장 모드). 샘플링은 가장 낮은 오버헤드를 제공하며 일상적인 프로파일링에 적합하고, 전체 추적은 복잡한 문제 찾기에 사용됩니다.

kotlin
// 예: CPU Profiler 분석이 이 메소드를 병목으로 표시합니다
class DataProcessor {
    suspend fun processLargeDataset(items: List<Item>): List<Result> {
        // CPU Profiler가 inBackgroundThread에서 높은 CPU 부하를 표시합니다
        return withContext(Dispatchers.Default) {
            items.map { it.computeHeavyTransformation() }
        }
    }
}

// 프로파일링 후 권장사항:
// computeHeavyTransformation이 80% 시간을 차지합니다 — 결과를 캐시합니다
class DataProcessorOptimized {
    private val cache = LruCache<String, Result>(100)

    suspend fun processLargeDataset(items: List<Item>): List<Result> {
        return withContext(Dispatchers.Default) {
            items.mapNotNull { cache.get(it.id) ?: it.computeHeavyTransformation().also { cache.put(it.id, it) } }
        }
    }
}

기록 후 CPU Profiler는 Top-Down Tree를 표시합니다 — 각 메소드의 실행 시간이 포함된 호출 트리입니다. Self Time/Total 열에 주목하세요: 메소드의 Self Time이 16ms를 초과하고 UI 스레드에서 호출되면 확실한 프레임 드롭입니다. 해결책은 Dispatchers.IO 또는 Default를 통해 무거운 계산을 백그라운드 스레드로 이동하는 것입니다.

CPU 추적 모드

Sample Java Methods — 3-5% 오버헤드의 일상 프로파일링에 권장되는 모드. Trace Java Methods — 각 호출의 완전 추적, 최대 15% 오버헤드, 짧은 기록(5-10초)에 사용. Trace C/C++ Functions — Linux Perf를 통한 NDK 코드 추적, 게임 및 C++ 라이브러리 분석에 필수. 문제 유형에 따라 모드를 전환하세요.

Memory Profiler: 메모리 작업 및 누수 찾기

Memory Profiler는 앱의 모든 메모리 카테고리를 추적합니다: Java Heap(JVM 객체), Native Heap(JNI를 통한 C/C++ 할당), Stack(스레드 스택), Graphics(텍스처, GPU 버퍼). 주요 시각화는 메모리 소비의 시간 그래프로, 각 카테고리가 고유의 색상으로 표시됩니다. 그래프가 가비지 컬렉션 후에 더 이상 줄어들지 않으면 누수를 의심하세요.

누수를 찾으려면 Capture Heap Dump 기능을 사용하세요. 덤프 순간, Android Profiler는 앱을 ~100ms 동안 중지하고 HPROF 파일을 생성합니다 — Java Heap의 모든 활성 객체에 대한 완전한 스냅샷입니다. 덤프를 연 후 Retained Size(객체 제거 시 해제될 메모리 양)로 객체를 정렬하고 파괴되었어야 할 Activity, Fragment 또는 Bitmap 인스턴스를 찾을 수 있습니다.

Google I/O 2022에 따르면, Memory Profiler와 LeakCanary의 조합은 Android에서 메모리 누수 감지 시나리오의 95%를 커버합니다. LeakCanary는 자동으로 작동하며 백그라운드에서 누수를 감지합니다. Memory Profiler는 수동 분석에 필요합니다: 누수뿐만 아니라 할당의 전체 그림을 확인할 수 있습니다.

메모리 카테고리설명일반적인 크기
Java HeapJVM 힙: Kotlin/Java 객체5-200 MB
Native HeapJNI, NDK를 통한 할당1-100 MB
Graphics텍스처, GPU 버퍼10-200 MB
Stack모든 스레드의 스택1-10 MB

HPROF 덤프 해석 방법

덤프를 캡처한 후 Retained Size로 객체를 정렬하세요 — 이것이 객체 제거 시 해제되는 메모리 양입니다. 메모리에 있으면 안 되는 큰 Retained Size를 가진 Activity, Fragment 및 Bitmap 인스턴스를 찾으세요. Reference Tree 탭으로 이동하여 객체를 유지하는 참조 체인을 확인하세요 — 대부분 싱글톤의 정적 필드 또는 정리되지 않은 콜백입니다. 중요한 메트릭은 Allocation rate(초당 할당 수)입니다. Allocation rate가 10,000 객체/초를 초과하면 앱이 임시 객체 생성 및 제거에 너무 많은 시간을 소비하여 GC에 부하가 걸리고 마이크로 프리즈가 발생합니다. 이 경우 View Inspector 도구를 사용하여 루프에서 자주 객체가 생성되는 위치를 찾으세요.

Network Profiler: 네트워크 요청 모니터링

Network Profiler는 타임라인에 앱의 모든 네트워크 요청을 실시간으로 표시합니다. 각 요청은 가로 막대로 표시됩니다 — 길이는 실행 시간에 해당하고, 색상은 요청 유형(GET, POST, PUT, DELETE)에 해당합니다. 스케일을 스크롤하면 요청이 시간적으로 어떻게 분포되어 있는지, 중복되는지 확인할 수 있습니다.

모든 인기 라이브러리가 지원됩니다: OkHttp, Retrofit, Volley, Ktor. Ktor와 OkHttp의 경우 프로파일러는 인터셉터와 컨버터를 포함한 완전한 호출 스택을 표시합니다. 각 요청에 대해 Request HeadersResponse Headers, 응답 본문(최대 1MB), 상태 코드 및 지속 시간을 확인할 수 있습니다.

Network Profiler가 식별하는 일반적인 문제: 캐시 부재(열 때마다 동일한 URL 요청), 중복 요청(두 컴포넌트가 동시에 동일한 데이터 로드), 과도한 응답 크기(서버가 50KB 필요할 때 5MB 전송). Network Profiler는 타임라인을 한눈에 보는 것만으로도 이러한 문제를 식별할 수 있습니다.

느린 네트워크를 시뮬레이션하려면 Android Studio에서 Network Conditioning을 사용하세요 — 대역폭을 3G/2G로 제한하고 지연을 추가할 수 있습니다. 이는 특히 인터넷이 불안정한 지역에서 작동하는 앱의 나쁜 네트워크 조건에서의 동작 테스트에 매우 중요합니다.

Energy Profiler: 에너지 소비 분석

Energy Profiler는 Perfetto 데이터를 기반으로 배터리에 대한 앱의 영향을 평가합니다. 이 도구는 밀리암페어 단위의 실제 소비를 측정하지 않고 각 작업을 다섯 가지 에너지 소비 카테고리로 분류합니다: Idle, Light, Medium, High 및 Overloaded. Energy Profiler의 타임라인은 색상으로 강조됩니다: 녹색(가벼운 부하), 노란색(중간), 빨간색(높은 부하).

빨간 영역의 주요 원인: WakeLock(앱이 프로세서를 활성 상태로 유지), Location GPS(높은 정확도로 지속적인 위치 요청), Keep-Alive 연결(서버와의 빈번한 데이터 교환), 대규모 데이터 전송(파일 전송, 스트리밍). Energy Profiler는 어떤 작업이 언제 에너지 소비 피크를 유발했는지 정확히 보여줍니다.

Android Developers에 따르면, 일반적인 앱은 High 카테고리에서 5% 이하의 시간을 보내야 합니다. Energy Profiler가 프로파일링 시간의 10% 이상을 빨간 영역으로 표시하면 앱은 Battery Drain 기준의 검토를 통과하지 못합니다. 권장사항: 백그라운드 작업에 WorkManager 사용, Location 요청을 최소 필요 정확도로 제한, 네트워크 요청을 배치로 집계.

Android Profiler 사용 방법: 실전 가이드

Android Profiler 실행은 한 번의 클릭으로 이루어집니다: Android Studio에서 View → Tool Windows → Profiler를 열거나 오른쪽 패널의 Profiler 아이콘을 더블 클릭하세요. 연결된 기기에서 앱을 실행하면 Android Studio가 자동으로 프로세스에 연결되어 데이터 수집을 시작합니다. 타임라인에 CPU, Memory, Network 및 Energy 그래프가 즉시 나타납니다.

상세 분석을 위해 원하는 탭(CPU, Memory, Network 또는 Energy)을 선택하고 기록을 시작하세요. CPU의 경우 Sample Java Methods 모드를 기록 시간 30초로 권장합니다 — 일반적인 시나리오에 충분합니다. Memory의 경우 시나리오 실행 후 힙 덤프(Capture Heap Dump)를 실행하세요. Network의 경우 기록이 자동으로 시작되며 시나리오 완료 후 Stop 버튼을 누르면 됩니다.

기록 중지 후 데이터를 내보내세요: File → Save As로 전체 세션을 .perf 파일에 저장합니다. 이는 최적화 전후 메트릭 비교에 편리합니다. 첫 번째 안정 버전에서 기준 세션을 만들고 각 새 세션과 비교하세요 — 이것이 성능 변화를 객관적으로 평가하는 유일한 방법입니다.

CI에서 프로파일링 자동화

Android Profiler는 Android Studio CLIFirebase Test Lab을 통해 명령줄에서 실행할 수 있습니다. Firebase Test Lab은 UI 테스트의 일부로 성능 프로파일링을 지원합니다: 테스트 결과와 함께 CPU, Memory 및 Network 메트릭을 얻을 수 있습니다. 메트릭이 기준에서 10% 하락할 경우 CI 파이프라인이 개발자 확인까지 차단되도록 파이프라인을 설정하세요.

자주 묻는 질문

Android Profiler가 앱 작동을 느리게 하나요?

영향은 최소입니다. Android Profiler는 데이터 수집에 Perfetto를 사용하며, CPU 오버헤드가 1% 미만입니다. Sample Java Methods 모드에서 오버헤드는 약 3-5%로 시나리오 프로파일링에 문제되지 않습니다. 메소드의 완전 추적은 오버헤드가 최대 15%까지 될 수 있으므로 짧은 기록에만 사용됩니다.

Android Studio 없이 앱을 프로파일링할 수 있나요?

네, 시스템 트레이스는 Perfetto CLI를 통해 기기에서 직접 기록할 수 있습니다: adb shell perfetto --out /data/local/tmp/trace.perf. 그런 다음 Perfetto UI(ui.perfetto.dev) 인터페이스에서 파일을 열거나 Android Studio에 임포트하여 앱의 전체 마크업과 함께 확인할 수 있습니다.

Network Profiler는 Charles Proxy와 어떤 차이가 있나요?

Android Profiler는 프록시 설정이 필요 없는 시스템 도구입니다. IDE에서 성능 컨텍스트에 요청을 직접 표시합니다. Charles Proxy는 외부 프록시 서버로 더 상세한 분석(트래픽 감시, 요청 수정, 재전송)을 제공합니다. 성능 프로파일링에는 Android Profiler를, API 계약 분석에는 Charles를 사용하세요.

Memory Profiler를 통해 메모리 누수를 찾는 방법은?

시나리오 실행 전에 힙 덤프를 실행하세요(예: Activity 열기 전). 시나리오를 실행하세요 — Activity를 열고 닫으세요. 두 번째 덤프를 실행하세요. 활성 Activity 인스턴스 수를 비교하세요: 두 번째 덤프에서 더 많다면 누수입니다. Retained Size로 정렬하고, 추가 Activity를 찾아 Reference Tree를 통해 원인을 확인하세요.

일부 기기에서 Energy Profiler가 사용되지 않는 이유는?

Energy Profiler는 기기 수준의 Power Profiles 지원과 Android 8.0+이 필요합니다. 에뮬레이터와 일부 펌웨어(특히 중국 제)에서는 데이터가 없을 수 있습니다. 해결책은 순수 Android 펌웨어가 장착된 Pixel 또는 Samsung 기준 기기에서 에너지 소비를 프로파일링하는 것입니다.

요약

  • Android Profiler — CPU, Memory, Network 및 Energy 모니터링을 위한 Android Studio 내장 프로파일러.
  • CPU Profiler는 1% 미만의 오버헤드로 Perfetto 트레이싱을 사용하여 코어와 스레드의 부하를 분석합니다.
  • Memory Profiler는 HPROF 덤프 지원으로 Java Heap, Native Heap, Graphics 및 Stack을 추적합니다.
  • Network Profiler는 OkHttp, Retrofit 및 Ktor의 모든 요청을 헤더, 본문 및 지속 시간과 함께 기록합니다.
  • Energy Profiler는 앱의 에너지 소비를 Idle부터 Overloaded까지 카테고리로 분류합니다.
  • 프로파일러는 앱 코드 수정 없이 작동합니다 — 제로 통합.
  • Firebase Test Lab을 통해 CI에 프로파일링을 통합하고 각 릴리스에 대한 기준을 저장하세요.

턴키 방식의 모바일 애플리케이션을 개발해 드립니다

IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.

프로젝트 논의

더 읽어보기