Android에서 Firebase 성능 모니터링 시작하기

이 가이드는 다음 단계에 따라 앱에서 Firebase 성능 모니터링을 사용하는 방법을 보여줍니다.

  1. 필수 조건
  2. Android 프로젝트에 Firebase 추가
  3. 앱에 성능 모니터링 추가
  4. (선택사항) 앱에 맞춤 추적 및 하나 이상의 카운터 정의
  5. (선택사항) @AddTrace 주석을 추가하여 특정 메소드 추적
  6. (선택사항) Android vitals와 함께 성능 모니터링 사용
  7. Firebase 콘솔에서 성능 모니터링 결과 확인
  8. 앱을 배포하고 Firebase 콘솔에서 결과 검토

성능 모니터링은 현재 베타 릴리스 단계입니다.

필수 조건

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

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

Android 프로젝트에 Firebase 추가

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

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

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

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

앱에 성능 모니터링 추가

  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 섹션에 다음을 추가합니다.
      compile 'com.google.firebase:firebase-perf:15.0.0'
    3. 앱에서 다른 Firebase SDK를 사용하는 경우 해당 SDK도 15.0.0 버전으로 변경해야 합니다.
  3. 앱을 다시 컴파일합니다. 이제 자동 추적 및 HTTP/S 네트워크 요청이 모니터링됩니다.

(선택사항) 앱에 맞춤 추적 및 하나 이상의 카운터 정의

맞춤 추적은 앱의 특정 코드에 연결된 성능 데이터 보고서입니다. 맞춤 추적에 관한 자세한 내용은 성능 모니터링 개요를 참조하세요. 앱에 맞춤 추적이 여러 개 있을 수 있으며, 한 번에 둘 이상의 맞춤 추적을 실행할 수도 있습니다. 각 맞춤 추적에는 앱의 성능 관련 이벤트를 계수하는 하나 이상의 카운터가 있을 수 있으며, 이러한 카운터는 카운터를 만든 추적에 연결됩니다.

  1. .java 파일 맨 위에서 성능 모니터링 클래스를 가져옵니다.

    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.incrementCounter("item_cache_hit");
    } else {
        myTrace.incrementCounter("item_cache_miss");
    }
  4. 추적을 중지할 위치에 해당하는 코드 바로 뒤에 다음 코드 줄을 추가합니다.

    Android

    myTrace.stop();

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

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

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

Android

import com.google.firebase.perf.metrics.AddTrace;
...
@Override
@AddTrace(name = "onCreateTrace", enabled = true/\*Optional\*/)
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ...
        ...
}

(선택사항) Android vitals와 함께 성능 모니터링 사용

성능 모니터링을 사용하면 Play Developer Console의 Android vitals 대시보드에서 제공하는 깊이 있는 정보를 파악할 수 있습니다. Android vitals 대시보드에 표시되는 문제가 앱의 어느 부분에서 발생하는지 모르는 경우에 성능 모니터링이 특히 유용합니다.

예를 들어 Android vitals 대시보드에 앱에서 프레임을 생성하고 화면에 표시하는 데 걸리는 시간이 예상보다 긴 것으로 나타나는 경우 성능 모니터링을 사용하여 앱의 어느 부분, 예를 들어 홈 화면 또는 콘텐츠 화면에 사용되는 특정 Activity에 렌더링 속도를 저하하는 문제가 있는지를 분석할 수 있습니다. API 수준 24 이상을 실행하는 기기에서 다음과 같이 앱의 느린 프레임과 멈춘 프레임을 모두 계수할 수 있습니다.

  1. 사용자와 Activity의 상호 작용 시작 부분에서 myTrace.start()를 호출하여 맞춤 추적을 시작합니다.
  2. FrameMetricsAggregator()를 호출하여 각 프레임의 TOTAL_DURATION 측정항목을 캡처하는 개체를 만듭니다.
  3. 완료 직전에 myTrace.stop()을 호출하여 맞춤 추적을 중지합니다.
    1. FrameMetricsAggregator.stop()을 사용하여 FrameMetricsAggregator 개체에서 TOTAL_DURATION 값을 가져옵니다.
    2. frames 카운터를 증가시켜 총 프레임 수를 가져옵니다. 또한 TOTAL_DURATION 값이 16ms보다 큰 횟수만큼 slow_frames 카운터를 증가시키고 TOTAL_DURATION 값이 700ms보다 큰 횟수만큼 frozen_frames 카운터를 증가시킵니다. 느린 렌더링이 발생하지 않으면 해당 카운터를 0으로 설정합니다.
  4. Firebase 콘솔에서 느린 프레임 또는 멈춘 프레임이 가장 많이 발생하는 기기를 찾고 앱에서 느린 렌더링이 발생하는 사례를 정확히 파악합니다.

Android vitals 대시보드를 사용하여 느린 렌더링 프레임을 감지하는 방법에 관한 자세한 내용은 느린 렌더링을 참조하세요.

Firebase 콘솔에서 성능 모니터링 결과 확인

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

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

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

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

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

Android
HttpMetric metric =
    FirebasePerformance.getInstance().newHttpMetric("https://www.google.com",
    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 e) { }
metric.setRequestPayloadSize(data.length);
metric.setHttpResponseCode(conn.getResponseCode());
printStreamContent(conn.getInputStream());

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

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

알려진 문제

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

디버깅 통합

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

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

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

adb logcat -s FirebasePerformance

다음 단계

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

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