Android에서 Firebase Performance Monitoring 시작하기

이 가이드는 다음 단계에 따라 앱에서 Firebase Performance Monitoring을 사용하는 방법을 보여줍니다.

  1. 필수 조건
  2. Android 프로젝트에 Firebase 추가
  3. 앱에 Performance Monitoring 추가
  4. (선택사항) 앱에 맞춤 추적 및 하나 이상의 측정항목 정의
  5. (선택사항) @AddTrace 주석을 추가하여 특정 메소드 추적
  6. Firebase 콘솔에서 Performance Monitoring 결과 확인
  7. 앱을 배포하고 Firebase 콘솔에서 결과 검토

기본 요건

시작하기 전에 몇 가지 환경 설정이 필요합니다.

  • Android 4.0(Ice Cream Sandwich) 이상 및 Google Play 서비스 16.2.0 이상을 구동하는 기기
  • Google 저장소의 Google Play 서비스 SDK(Android SDK Manager에서 다운로드 가능)
  • Android 스튜디오 최신 버전(버전 2.2 이상)

Android 프로젝트에 Firebase 추가

다른 Firebase 기능을 사용하는 경우 Android 스튜디오에서 Firebase Assistant를 사용하여 앱에 Firebase를 추가할 수 있습니다.

Android 스튜디오에서 Firebase Assistant를 여는 방법은 다음과 같습니다.

  1. 도구 > Firebase를 클릭하여 Assistant 창을 엽니다.
  2. 나열된 기능 중 하나(예: Analytics)를 클릭하여 펼친 후 제공되는 가이드 링크(예: Log an Analytics event)를 클릭합니다.
  3. Firebase에 연결 버튼을 클릭하여 Firebase에 연결하고, 앱에 필요한 코드를 추가합니다.

앱에서 아직 다른 Firebase 기능을 사용하지 않는 경우 앱에 Firebase를 수동으로 추가할 수 있습니다.

앱에 Performance Monitoring 추가

  1. 프로젝트 수준 build.gradle 파일을 열고 다음을 추가합니다.
    1. buildscript -> repositories 섹션:
      jcenter()
    2. buildscript -> dependencies 섹션에 다음과 같이 Firebase 종속 항목을 추가합니다.
      • Android 스튜디오 2.x
        classpath 'com.google.firebase:firebase-plugins:1.1.1'
      • Android 스튜디오 3.x
        classpath 'com.google.firebase:firebase-plugins:1.1.5'
  2. 앱 수준 build.gradle 파일을 열고 다음을 추가합니다.
    1. apply plugin: 'com.android.application' 아래에 다음 줄을 추가합니다.
      apply plugin: 'com.google.firebase.firebase-perf'
    2. dependencies 섹션에 다음을 추가합니다.
      implementation 'com.google.firebase:firebase-perf:16.2.0'
  3. 앱을 다시 컴파일합니다. 이제 자동 추적 및 HTTP/S 네트워크 요청이 모니터링됩니다.

(선택사항) 앱에 맞춤 추적 및 하나 이상의 측정항목 정의

맞춤 추적은 앱의 특정 코드에 연결된 성능 데이터 보고서입니다. 맞춤 추적에 관한 자세한 내용은 Performance Monitoring 개요를 참조하세요. 앱에 맞춤 추적이 여러 개 있을 수 있으며, 한 번에 둘 이상의 맞춤 추적을 실행할 수도 있습니다. 각 맞춤 추적에는 앱의 성능 관련 이벤트를 계수하는 하나 이상의 측정항목이 있을 수 있으며, 이러한 측정항목은 해당 측정항목을 생성한 추적과 연결됩니다.

  1. .java 파일 맨 위에서 Performance Monitoring 클래스를 가져옵니다.

    Android

    import com.google.firebase.perf.FirebasePerformance;
    import com.google.firebase.perf.metrics.Trace;

  2. 앱에서 추적을 시작할 위치에 해당하는 코드 바로 앞에 다음 코드 줄을 추가하여 test_trace라는 추적을 시작합니다.

    Android

    Trace myTrace = FirebasePerformance.getInstance().newTrace("test_trace");
    myTrace.start();
    
  3. 앱에서 발생하는 성능 관련 이벤트(예: 캐시에 있음 및 캐시에 없음)를 계수하려면 이벤트가 발생할 때마다 다음과 유사한 코드 줄을 추가합니다. 다른 유형의 이벤트를 계수하는 경우 item_cache_hit 또는 item_cache_miss 대신 다른 문자열로 이름을 지정하세요.

    Android

    Item item = cache.fetch("item");
    if (item != null) {
        myTrace.incrementMetric("item_cache_hit", 1);
    } else {
        myTrace.incrementMetric("item_cache_miss", 1);
    }
    
  4. 추적을 중지할 위치에 해당하는 코드 바로 뒤에 다음 코드 줄을 추가합니다.

    Android

    myTrace.stop();
    

(선택사항) @AddTrace 주석을 추가하여 특정 메소드 추적

앱의 메소드에 @AddTrace 주석을 추가하고 결과 추적을 식별하는 문자열을 제공할 수 있습니다. 이렇게 하면 메소드 시작 부분에서 추적이 시작되고 메소드 완료 시 추적이 중지됩니다. 이 방법으로 생성한 추적에는 측정항목이 없습니다.

예를 들어 onCreate() 메소드가 호출될 때 실행되는 onCreateTrace라는 추적을 만들려면 다음과 유사한 코드를 사용합니다.

Android

@Override
@AddTrace(name = "onCreateTrace", enabled = true /* optional */)
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

Firebase 콘솔에서 Performance Monitoring 결과 확인

  1. Android 스튜디오에서 앱을 빌드합니다.
  2. 최신 이미지 및 Google Play 서비스 15.0.0 이상이 설치된 Android 에뮬레이터 또는 Google Play 서비스 15.0.0 이상이 설치된 테스트 기기를 사용하여 앱을 테스트합니다.
  3. Firebase 콘솔에 Performance Monitoring 결과가 나타나는지 확인합니다. 결과는 12시간 이내에 나타납니다.

앱을 배포하고 Firebase 콘솔에서 결과 검토

하나 이상의 테스트 기기를 사용하여 Performance Monitoring을 검증한 후 업데이트된 버전의 앱을 사용자에게 배포하고 Firebase 콘솔을 사용하여 성능 데이터를 모니터링 할 수 있습니다.

(선택사항) 특정 네트워크 요청의 모니터링 추가

Performance Monitoring에서는 네트워크 요청을 자동으로 수집합니다. 앱의 네트워크 요청이 대부분 포함되지만 일부가 보고되지 않을 수도 있습니다. Performance Monitoring에 특정 네트워크 요청을 포함시키려면 앱에 다음 코드를 추가합니다.

Android
HttpMetric metric =
        FirebasePerformance.getInstance().newHttpMetric("https://www.google.com",
                FirebasePerformance.HttpMethod.GET);
final URL url = new URL("https://www.google.com");
metric.start();
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type", "application/json");
try {
    DataOutputStream outputStream = new DataOutputStream(conn.getOutputStream());
    outputStream.write(data);
} catch (IOException ignored) {
}
metric.setRequestPayloadSize(data.length);
metric.setHttpResponseCode(conn.getResponseCode());
printStreamContent(conn.getInputStream());

conn.disconnect();
metric.stop();

이런 식으로 사용자가 특별히 캡처한 HTTP/s 네트워크 요청은 Performance Monitoring에서 자동으로 캡처한 네트워크 요청과 함께 Firebase 콘솔에 표시됩니다.

(선택사항) 추적 및 네트워크 요청 샘플 검토

Firebase 콘솔에서 특정 추적 또는 네트워크 요청 세그먼트를 자세히 살펴볼 수 있습니다. 기록된 세션의 무작위 샘플링은 다음 정보를 보여줍니다.

Firebase Performance Monitoring 세션 페이지의 이미지

  • CPU: Performance Monitoring SDK는 앱에서 사용하는 사용자 시간과 시스템 시간을 캡처합니다.
  • 메모리: Performance Monitoring SDK는 앱에서 사용하는 힙 메모리 사용량을 캡처합니다. 힙 메모리는 만든 객체, 할당이 취소된 객체, 앱이 현재 사용 중인 객체 등 동적 할당에 사용되는 메모리입니다.
  • 개별 정보: 시작 시간, 종료 시간, 기간, 요청 크기, 응답 크기 등 추적 또는 네트워크 요청의 단일 인스턴스에 대한 자세한 내용입니다.
  • 동시 인스턴스: 동시에 발생하는 추적 또는 네트워크 요청의 정보입니다.
  • 기기 속성: 앱 버전, 모델, OS 버전, 무선, 맞춤 속성 등 기기에 대한 정보입니다.

Firebase 콘솔에서 자세한 샘플을 보려면 앱의 추적 또는 네트워크 요청 중 하나를 열고 세션 보기를 클릭하세요. 또는 특정 속성의 속성 세션 링크를 클릭합니다.

세션에 대한 링크가 있는 Firebase Performance Monitoring 추적의 이미지

Performance Monitoring 수집 세션은 각 측정항목의 백분위수로 나뉩니다. 하위 백분위수 범위의 세션은 상위 백분위수 범위의 세션보다 측정항목의 값이 작습니다. 사용 가능한 세션을 백분위수로 필터링하려면 세션 세부정보 위의 백분위수 드롭다운을 사용하세요.

Firebase Performance Monitoring 세션 페이지의 이미지

알려진 문제

  • Firebase 플러그인 버전 1.1.0에서 Guava 종속 항목의 불일치로 인해 다음과 같은 오류가 발생할 수 있습니다.

    Error:Execution failed for task ':app:packageInstantRunResourcesDebug'.
    > com.google.common.util.concurrent.MoreExecutors.directExecutor()Ljava/util/concurrent/Executor;

    이 오류가 표시되면 1.1.1로 업그레이드하거나 프로젝트 수준 build.gradle 파일의 buildscript ->dependencies 섹션에서 위에 표시된 classpath 명령문을 다음으로 대체합니다.

    classpath ('com.google.firebase:firebase-plugins:1.1.0') {
                exclude group: 'com.google.guava', module: 'guava-jdk5'
    }
  • Performance Monitoring은 OkHttp HTTP 클라이언트 버전 3.xx를 사용하여 작성한 HTTP/S 네트워크 요청에 대한 모니터링만 지원합니다.
  • Performance Monitoring은 HTTP 콘텐츠 길이 헤더에 설정된 값을 기반으로 HTTP/S 네트워크 요청의 총 페이로드 크기를 보고합니다. 이 값은 정확하지 않을 수도 있습니다.
  • Performance Monitoring은 다중 프로세스 Android 앱의 메인 프로세스만 지원합니다.
  • com.google.firebase.firebase-perf gradle 플러그인은 DexGuard와 호환되지 않으므로 DexGuard를 사용하면 자동 추적 및 HTTP/S 네트워크 요청 모니터링이 중지됩니다. 앱에서 DexGuard를 사용하면 SDK를 사용하여 추가한 맞춤 추적은 정상적으로 작동합니다.
  • com.google.firebase.firebase-perf Gradle 플러그인은 지원 중단된 Jack과 호환되지 않습니다.

디버깅 통합

빌드 시 Performance Monitoring의 디버그 로그 기록을 사용 설정할 수 있지만, 다음과 같이 앱의 AndroidManifest.xml 파일에서 <application> 요소에 <meta-data> 요소를 추가합니다.

<meta-data
  android:name="firebase_performance_logcat_enabled"
  android:value="true" />

logcat 필터링을 사용하여 추적 및 HTTP/S 네트워크 요청 로그 기록을 볼 수 있습니다. Performance Monitoring 로그 메시지는 FirebasePerformance로 태그가 지정되며 다음 명령을 사용하여 필터링할 수 있습니다.

adb logcat -s FirebasePerformance

다음 단계

다음에 대한 의견 보내기...

도움이 필요하시나요? 지원 페이지를 방문하세요.