nyancoder

WWDC 2021 - Diagnose Power and Performance regressions in your app 본문

WWDC/WWDC 2021

WWDC 2021 - Diagnose Power and Performance regressions in your app

nyancoder 2021. 9. 28. 00:20

원본 영상: https://developer.apple.com/videos/play/wwdc2021/10087/

 

Key performance metrics

  • 성능 최적화를 위해서 Xcode Organizer나, App Store Connect API가 제공하는 지표 및 진단을 사용할 수 있습니다.

  • Xcode Organizer는 배터리, 시작 시간, 멈춤 비율, 메모리, 디스크 쓰기, 스크롤 히치, 앱 종료의 7가지 지표를 수집합니다.

  • 이 7가지 측정 항목은 Xcode Organizer의 왼쪽 메뉴에서 선택할 수 있습니다.

  • 배터리 및 종료와 같은 일부 항목에서는 다양한 이벤트 유형을 자세하게 설명하기 위해 하위 범주가 있을 수 있습니다.

  • 원하는 단말 종류나 사용자의 백분위수 또한 선택할 수 있습니다.

  • 예를 들어 실행 중 종료의 차트에서는 최신 버전의 크래시가 크게 증가했음을 알 수 있습니다.
  • 이처럼 다양한 정보를 얻을 수 있지만, 정보가 너무 많기 때문에 성능 최적화를 어디에서 시작할지는 파악하기 어려울 수 있습니다.

 

Discovering regressions

  • 이제 Xcode Organizer는 지표의 추세를 파악하여 회귀 항목에 표시할 수 있습니다.
  • 이런 값은 마지막 릴리즈와 최신 릴리즈들의 평균값에서 지표의 차이 등을 통해 결정됩니다.
  • 위 예제에서는 기존까지는 평균 11.1초가 걸렸으나 최신 버전에서는 2.5초로 갑자기 상승하여 회귀 항목에 표시됩니다.

  • 따라서 회귀 탭을 살펴보면 최신 버전에서 성능이 저하된 항목들을 확인할 수 있습니다.

  • 회귀 탭의 왼쪽에는 더 나은 앱을 만들기 위해 집중해야 하는 항목이 표시됩니다.
  • 각 항목에는 어떤 지표가 얼마나 많은 양이, 어떤 백분위수에 대해 분석되었는지가 요약되어 있습니다.

  • 예를 들어 앱 종료 항목을 보면 우선 상단에 충돌을 일으키는 잘못된 명령이 표시됩니다.
  • 그 아래에는 내 앱의 지난 4개 릴리스에 대한 크래시 차트가 나타납니다.
  • 차트에는 영향을 받은 기종과 백분위수가 표시됩니다.

  • 또 다른 예에서는 작업 시간 초과에 대한 지표를 볼 수 있습니다.
  • 작업 시간 초과 지표에서는 앱이 백그라운드로 전환될 때 최대 30초 동안 작업을 수행할 수 있다는 점을 고려해야 합니다.
  • 만일 제시간에 작업을 완료하지 못하면 강제 종료되어 다음 실행이 오래 걸릴 수 있습니다.

  • 다음 예에서는 정확한 원인은 알기 어렵지만, 디스크 쓰기가 지난 릴리스에서 28% 증가했다는 것을 알 수 있습니다.

 

Disk write insights

  • 디스크는 CPU나 메모리와 같이 제한된 리소스입니다.
  • 과도한 디스크 쓰기는 디스크의 수명을 줄일 수 있습니다.
  • 잘못된 디스크 사용은 화면이나 UI가 일시적으로 멈추는 원인이 되기도 하며, 배터리를 더 소모할 수 있습니다.
  • 따라서 디스크 쓰기 최적화를 통해 사용자 경험을 개선해야 합니다.

  • Xcode Organizer의 디스크 쓰기 보고서를 통해서 주로 디스크를 많이 사용하는 지점을 확인할 수 있습니다.
  • 이러한 보고서는 앱 분석 공유에 동의 한 장치에서 수집되며, 스택 추적에 대한 정보를 포함합니다.
  • 이 창에서는 자세한 스택 정보를 얻을 수 있을 뿐 아니라, 수신된 로그 수, OS 버전 및 하드웨어 모델 분류에 대한 통계도 얻을 수 있습니다.

  • 때로는 이러한 원인이 라이브러리의 깊숙한 스택에 있을 수 있습니다.
  • 이 경우 문제의 원인을 찾기 위해서는 특정 도메인 지식이 필요하거나 시간이 많이 걸릴 수 있습니다.

  • Xcode 13에서 Organizer에는 Insights라는 새로운 필드를 통해 이러한 문제를 개선할 수 있습니다.
  • 보고서가 수신되면 이처럼 잘 알려진 패턴이 있는지를 검색하여 일치하는 항목이 있으면 문제 해결을 위한 제안과 함께 문제가 강조되어 표시됩니다.
  • 위의 예제에서는 DB에서 많은 디스크를 사용하는 알려진 사례이므로 색인을 추가하라는 제안이 표시됩니다.

  • 예제에서 제안된 방법을 검증하기 위해 현재의 상태를 프로파일링 해보면 약 180MB를 780ms동안 기록하는 것을 확인할 수 있습니다.

  • 제안된 방법을 적용한 이후에는 해당 함수로 인한 쓰기가 0으로 효율적으로 작동하는 것을 볼 수 있습니다.

  • 위의 예제인 SQLite에 인덱스를 적용하는 것은 한 예제로, 그 이외 사례에 대해서도 지원을 지속적으로 하고 있습니다.


App Store Connect APIs

  • Xcode Organizer 외에도 App Store Connect API를 통해서 이러한 정보에 대해 접근할 수 있습니다.

  • 예를 들어 perfPowerMetrics에 GET 요청을 하면 최신 버전의 지표 및 정보를 JSON 형식으로 얻을 수 있습니다.

  • 이 부분의 인사이트 섹션을 보면 각 정보에 대한 지표와 요약을 확인할 수 있습니다.
  • 예제의 요약 정보를 보면 해당 정보가 Xcode Organizer에서 발견한 잘못된 명령으로 인한 종료라는 것을 알 수 있습니다.
  • 지표 항목에서는 영향을 받는 기기들에 대한 백분위나 장치 목록을 얻을 수 있습니다.

  • 동일하게 진단 보고서의 경우 diagnosticSignatures에서 GET 요청을 통해 얻을 수 있습니다.
  • 응답에는 상위 정보 목록이 있으며 각 항목에는 관련 세부 정보에 대한 링크가 있습니다.

  • 세부 정보에 대해 GET을 통해 정보를 얻어오면 자세한 진단 로그 및 제안을 확인할 수 있습니다.

  • 이와 같은 정보들을 활용하여 Xcode Organizer의 Regressions탭에 나오는 상위 항목들을 확인해 개선해 나가는 것이 좋습니다.

 

목차: https://nyancoder.tistory.com/2

Comments