iOS에서 Firebase Performance Monitoring 시작하기

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

  1. 기본 요건
  2. iOS 프로젝트에 Firebase 추가
  3. 앱에 Performance Monitoring 추가
  4. (선택사항) 앱에서 맞춤 추적 및 하나 이상의 맞춤 측정항목 정의
  5. Firebase 콘솔에서 Performance Monitoring 결과 확인
  6. 앱을 배포하고 Firebase 콘솔에서 결과 검토

기본 요건

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

  • Xcode 8.2.1 이상
  • iOS 8 이상을 타겟팅하는 Xcode 프로젝트
  • 앱의 번들 식별자
  • CocoaPods 1.0.0 이상

iOS 프로젝트에 Firebase 추가

다음으로 앱에 Firebase를 추가하고, SDK를 추가하고, 앱에서 Firebase를 초기화해야 합니다. 자세한 내용은 iOS 프로젝트에 Firebase 추가를 참조하세요.

앱에 Performance Monitoring 추가

  1. 프로젝트용으로 만든 podfile을 열거나 pod init 명령을 사용하여 새로 만들고 타겟 섹션 안에 다음 줄을 추가합니다.
    pod 'Firebase/Core'
    pod 'Firebase/Performance'
  2. podfile이 있는 디렉토리에서 다음 명령을 실행하여 Performance Monitoring SDK를 설치합니다.
    pod install
  3. 명령이 종료되면 Xcode를 사용하여 .xcworkspace 파일을 엽니다.
  4. UIApplicationDelegate에서 Firebase 모듈을 가져옵니다.

    Swift

    import Firebase
    

    Objective-C

    @import Firebase;
    
  5. FirebaseApp 공유 인스턴스는 일반적으로 애플리케이션의 application:didFinishLaunchingWithOptions: 메소드에서 구성합니다.

    Swift

    // Use Firebase library to configure APIs
    FirebaseApp.configure()
    

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
    
  6. 앱을 다시 컴파일합니다. 이제 자동 추적 및 HTTP/S 네트워크 요청이 모니터링됩니다.

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

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

  1. 헤더에 Performance Monitoring 모듈을 추가합니다.

    Swift

    import FirebasePerformance

    Objective-C

    @import FirebasePerformance;

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

    Swift

    let trace = Performance.startTrace(name: "test trace")

    Objective-C

    FIRTrace *trace = [FIRPerformance startTraceWithName:@"test trace"];

  3. 앱에서 발생하는 성능 관련 이벤트(예: 캐시에 있음 및 재시도)를 계수하려면 이벤트가 발생할 때마다 다음과 유사한 코드 줄을 추가합니다. 다른 유형의 이벤트를 계수하는 경우 retry 대신 다른 문자열로 이름을 지정하세요.

    Swift

    trace.incrementMetric(named:"retry", by: 1)

    Objective-C

    [trace incrementMetric:@"retry" by:1];

  4. 추적을 중지할 위치에 해당하는 코드 바로 뒤에 다음 코드 줄을 추가합니다.

    Swift

    trace.stop()

    Objective-C

    [trace stop];

Firebase 콘솔에서 Performance Monitoring 결과 확인

  1. Xcode 시뮬레이터에서 앱을 실행합니다(Product(제품) -> Run(실행)).
  2. Firebase 콘솔에 Performance Monitoring 결과가 나타나는지 확인합니다. 결과는 12시간 이내에 나타납니다.

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

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

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

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

Swift
guard let metric = HTTPMetric(url: "https://www.google.com", httpMethod: .get) else { return }

metric.start()
guard let url = URL(string: "https://www.google.com") else { return }
let request: URLRequest = URLRequest(url:url)
let session = URLSession(configuration: .default)
let dataTask = session.dataTask(with: request) { (urlData, response, error) in
        if let httpResponse = response as? HTTPURLResponse {
         metric.responseCode = httpResponse.statusCode
        }
        metric.stop()
}
dataTask.resume()
Objective-C
@property (nonatomic) FIRHTTPMetric *metric;
...
- (void)beginManualNetworkInstrumentation {
  self.metric =
      [[FIRHttpMetric alloc] initWithURL:[NSURL URLWithString:@"https://www.google.com"]
                              HTTPMethod:FIRHTTPMethodGET];

  [self.metric start];

  NSURLRequest *request =
      [NSURLRequest requestWithURL:[NSURL URLWithString:@"https://www.google.com"]];
  NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request
                                                                delegate:self];
  [connection resume];
}

- (void)connection:(NSURLConnection *)connection
    didReceiveResponse:(NSURLResponse *) response {
  NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response
  self.metric.responseCode = httpResponse.statusCode;
  [self.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 세션 페이지의 이미지

알려진 문제

  • Performance Monitoring과 GTMSQLite의 호환성 문제가 알려져 있습니다. GTMSQLite를 사용하는 앱에서는 Performance Monitoring을 사용하지 않는 것이 좋습니다.
  • FirebaseApp.configure()를 호출한 후 메소드 재구성이 Performance Monitoring SDK를 방해할 수 있습니다.
  • iOS 8.0~8.2 시뮬레이터의 알려진 문제로 인해 Performance Monitoring에서 성능 이벤트를 캡처하지 못합니다. iOS 8.3 시뮬레이터 및 이후 버전에서는 이 문제가 해결되었습니다.
  • NSURLSession의 backgroundSessionConfiguration을 사용하여 설정한 연결은 연결 시간이 예상보다 깁니다. 이러한 연결은 프로세스 외부에서 실행되며 실행 시기가 처리 중인 콜백 이벤트를 반영합니다.

다음 단계

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

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