Firebase Summit에서 발표된 모든 내용을 살펴보고 Firebase로 앱을 빠르게 개발하고 안심하고 앱을 실행하는 방법을 알아보세요. 자세히 알아보기

데이터베이스 프로파일링

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

Firebase CLI 에 내장된 데이터베이스 프로파일러 도구를 사용하여 Firebase 실시간 데이터베이스의 성능을 측정합니다. 프로파일러 도구는 지정된 기간 동안 데이터베이스의 모든 활동을 기록한 다음 자세한 보고서를 생성합니다. 상세 보고서를 사용하여 데이터베이스 성능 문제를 해결하고, 문제 영역을 찾아내고, 인덱싱되지 않은 쿼리를 줄이십시오.

프로필 작성

  1. Firebase 실시간 데이터베이스 프로파일링을 시작하기 전에 최신 버전의 Firebase CLI 를 사용하고 있고 프로파일링할 데이터베이스 및 프로젝트에 대해 초기화했는지 확인하세요. 프로파일링하려면 해당 프로젝트의 편집자 또는 소유자여야 합니다.

  2. 다음 명령을 사용하여 데이터베이스 프로파일링을 시작하십시오.

    firebase database:profile
    프로파일러는 데이터베이스의 작업을 기록하고 프로파일을 빌드할 때 상태 메시지를 표시합니다.

  3. Enter 키 를 눌러 프로필을 완성하고 결과를 표시합니다.

결과 해석

프로파일러 도구는 데이터베이스 작업에 대해 수집한 데이터를 집계하고 결과를 속도 , 대역폭인덱싱되지 않은 쿼리 의 세 가지 기본 범주로 표시합니다.

속도

속도 보고서는 각 작업 유형에 대한 서버의 응답 시간(밀리초)을 측정합니다. 그러나 속도 보고서에서 측정된 속도는 실제로 속도 최종 사용자 경험을 반영하지 않을 수 있습니다. 네트워크 상태를 비롯한 다양한 요인으로 인해 클라이언트 측에서 대기 시간이 추가될 수 있습니다.

속도 보고서에는 다음 속성이 포함됩니다.

  • 경로: 작업이 발생한 데이터베이스의 경로입니다. 25개 이상의 자식 노드가 있는 경우 프로파일러 도구는 이러한 노드를 부모 경로로 축소하고 $wildcard 마커를 추가합니다. 보고서에서 슬래시 / 로 표시되는 데이터베이스의 루트 디렉토리를 볼 수 있습니다.
  • 개수: 지정된 경로에서 발생한 작업의 수입니다.
  • 평균 실행 속도: 서버가 해당 경로에서 특정 작업 유형을 처리하는 데 필요한 비즈니스 논리를 실행하는 데 걸리는 평균 시간입니다. 여기에서 측정된 시간 간격은 아래에 설명된 "평균 보류 시간"으로 측정된 시간 이후에 시작됩니다.
  • 평균 보류 시간: 요청이 실행되기 전에 대기하는 데 소요된 평균 시간입니다. 이 지연은 모든 클라이언트 시작 요청에 공통입니다. 총 서버 측 요청 대기 시간은 대략 해당 요청의 보류 시간과 실행 속도의 합입니다.
  • 권한 거부: 데이터베이스에서 Firebase 데이터베이스 규칙 에 의해 차단된 지정된 경로의 작업 수입니다.
작업 유형별 속도 보고서
읽기 실행 속도 클라이언트가 데이터베이스에서 데이터 읽기를 요청하는 서버 응답 시간입니다. 읽기 실행 시간은 일반적으로 읽고 있는 데이터의 양에 따라 조정되지만 일부 작은 읽기도 캐시 프리페칭으로 인해 지연될 수 있습니다.
쓰기 실행 속도 데이터베이스에 데이터 쓰기를 요청하는 클라이언트 요청에 대한 서버 응답 시간입니다. 쓰기 실행 시간은 기록되는 데이터의 양에 따라 조정됩니다.
연결 실행 속도 데이터베이스 클라이언트에 설정할 요청에 대한 서버 응답 시간입니다. 연결 요청의 대기 시간은 연결 관리와 관련된 인메모리 서버 측 부기에 의해 지배됩니다.
브로드캐스트 실행 속도

서버가 실시간 업데이트를 위해 지정된 경로를 수신하는 클라이언트에 데이터를 배포하는 데 걸리는 시간입니다.

브로드캐스트 속도 보고서의 Count 속성은 정보를 수신한 클라이언트 수가 아니라 발생한 브로드캐스트 수를 집계합니다. 예를 들어 10개의 클라이언트가 지정된 경로에서 수신 중이고 서버가 10개의 클라이언트 모두에 업데이트를 브로드캐스트하는 경우 10개의 클라이언트가 데이터를 수신하더라도 브로드캐스트 수는 1개의 브로드캐스트만 반영합니다.

권한 거부 속성은 브로드캐스트 속도 보고서에 포함되지 않습니다.

대역폭

대역폭 보고서는 데이터베이스가 들어오고 나가는 작업에서 소비하는 데이터 양에 대한 통찰력을 제공합니다. 그러나 대역폭 보고서를 사용하여 청구를 추정해서는 안 됩니다. 데이터베이스 프로파일링과 같은 다른 작업에 사용되는 대역폭은 포함하지 않기 때문입니다. 대역폭 보고서는 데이터베이스에 대한 읽기, 쓰기 및 브로드캐스트 작업에 사용되는 데이터의 페이로드 크기를 대략적으로 추정합니다. 청구를 예측하는 것이 아니라 성능을 측정하는 도구입니다.

대역폭 보고서에는 다음 속성이 포함됩니다.

  • 경로: 작업이 발생한 데이터베이스의 경로입니다. 25개 이상의 자식 노드가 있는 경우 프로파일러 도구는 이러한 노드를 부모 경로로 축소합니다.

  • 총계: 지정된 경로의 모든 작업에서 사용된 총 송신 또는 수신 바이트입니다.

  • 개수: 지정된 경로에서 발생한 작업의 수입니다.

  • 평균: 지정된 경로(바이트/쓰기 또는 바이트/읽기)에서 작업 전반에 걸쳐 다운로드 또는 업로드된 평균 바이트 수입니다.

대역폭 보고서
다운로드한 바이트 클라이언트 SDK 및 REST API를 통해 전송된 읽기 및 브로드캐스트 작업을 통해 소비된 데이터입니다.
업로드된 바이트 데이터베이스 서버로 들어오는 쓰기 요청을 통해 소비된 데이터입니다. 삭제는 수신 시 0바이트의 쓰기로 표시됩니다.

인덱싱되지 않은 쿼리

인덱싱되지 않은 쿼리는 클라이언트가 한 위치에서 모든 데이터를 다운로드한 다음 이에 대해 쿼리를 수행하기 때문에 비용이 많이 들 수 있습니다. 이것은 필요한 것보다 더 많은 대역폭을 사용합니다. 데이터베이스 성능을 최적화하기 위해 가능한 한 많은 인덱싱되지 않은 쿼리를 해결하십시오.

인덱싱되지 않은 쿼리 보고서에는 다음 속성이 표시됩니다.

  • 경로: 인덱싱되지 않은 쿼리가 발생한 데이터베이스의 경로입니다.
  • 인덱스: 인덱싱 되지 않은 쿼리를 해결하기 위해 추가해야 하는 규칙입니다. 데이터 색인 생성에서 색인 생성에 대해 자세히 알아보세요.
  • Count: 주어진 경로에서 발생한 인덱싱되지 않은 쿼리의 수입니다.

고급 프로파일링

데이터베이스가 처리하는 모든 작업을 보려면 다음과 같이 데이터베이스를 프로파일링할 때 --raw 플래그를 사용하십시오.

firebase database:profile --raw

원시 출력에는 userAgent 문자열 및 IP 주소와 같은 각 작업에 대한 클라이언트 정보도 포함됩니다. Firebase 실시간 데이터베이스 작업 유형에서 Firebase 실시간 데이터베이스에 프로파일된 다양한 작업에 대해 자세히 알아보세요.

프로파일러 도구: 청구 도구가 아님

대역폭 비용을 추정하기 위해 프로파일러 도구를 사용하지 마십시오. 프로파일러 도구는 비용을 추정하기 위한 것이 아니라 작업을 모니터링하고 문제를 해결하는 데 도움이 되도록 데이터베이스 성능에 대한 전반적인 그림을 제공하기 위한 것입니다. 네트워크 트래픽을 고려하지 않고 응답으로 전송된 애플리케이션 데이터의 추정값만 기록합니다.

다음은 데이터베이스 프로필에서 다루지 않는 Firebase에서 청구하는 네트워크 트래픽의 몇 가지 일반적인 예입니다.

  • 프로토콜 오버헤드: 서버와 클라이언트 간의 일부 추가 트래픽은 세션을 설정하고 유지하는 데 필요합니다. 기본 프로토콜에 따라 이 트래픽에는 Firebase 실시간 데이터베이스의 실시간 프로토콜 오버헤드, WebSocket 오버헤드 및 HTTP 헤더 오버헤드가 포함될 수 있습니다. 연결이 설정될 때마다 SSL 암호화 오버헤드와 결합된 이 오버헤드가 연결 비용에 기여합니다. 이것은 일반적으로 많은 양의 대역폭이 아니지만 페이로드가 작거나 빈번하고 짧은 연결을 만드는 경우 상당한 대역폭이 될 수 있습니다.
  • SSL 암호화 오버헤드: 보안 연결에 필요한 SSL 암호화 오버헤드와 관련된 비용이 있습니다. 평균적으로 이 비용은 초기 핸드셰이크의 경우 약 3.5KB이고 보내는 각 메시지의 TLS 레코드 헤더의 경우 약 40B입니다. 대부분의 앱에서 이것은 청구서의 작은 비율입니다. 그러나 특정 사례에 많은 SSL 핸드셰이크가 필요한 경우 이는 큰 비율이 될 수 있습니다. 예를 들어 TLS 세션 티켓을 지원하지 않는 장치에는 많은 수의 SSL 연결 핸드셰이크가 필요할 수 있습니다.

청구서 이해 및 추정 에 대해 자세히 알아보십시오.