데이터베이스 프로파일링

Firebase CLI에 내장된 데이터베이스 프로파일러 도구를 사용하여 Firebase Realtime Database의 성능을 측정하세요. 프로파일러 도구는 특정 기간에 데이터베이스에서 발생하는 모든 활동을 기록하고 상세 보고서를 생성합니다. 상세 보고서를 사용하여 데이터베이스 성능 문제를 해결하고, 문제 영역을 찾아내고, 색인화되지 않은 쿼리를 줄일 수 있습니다.

프로필 작성

  1. Firebase Realtime Database 프로파일링을 시작하기 전에 Firebase CLI의 최신 버전을 사용하고 있으며 프로파일링할 데이터베이스 및 프로젝트에 맞게 초기화했는지 확인합니다. 프로파일링할 프로젝트의 편집자나 소유자여야 합니다.

  2. 다음 명령어를 사용하여 데이터베이스 프로파일링을 시작합니다.

    firebase database:profile
    프로파일러에서 데이터베이스의 작업을 기록하고 프로필을 작성하면서 상태 메시지를 표시합니다.

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

결과 해석

프로파일러 도구는 데이터베이스 작업에 대해 수집된 데이터를 집계하고 속도, 대역폭, 색인이 생성���지 않은 쿼리의 3가지 기본 카테고리로 결과를 표시합니다.

속도

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

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

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

서버에서 해당 경로의 실시간 업데이트를 수신 대기하는 클라이언트에 데이터를 배포하는 데 걸린 시간입니다.

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

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

대역폭

대역폭 보고서는 수신 및 발신 작업을 통틀어 데이터베이스가 소비하는 데이터의 양을 알려줍니다. 그러나 대역폭 보고서는 데이터베이스 프로파일링 등의 기타 작업에 사용되는 대역폭을 포함하지 않으므로 청구 요금을 추정하는 데 사용해서는 안 됩니다. 대역폭 보고서는 데이터베이스와 주고받는 읽기, 쓰기 및 브로드캐스트 작업에 의해 소비되는 데이터의 페이로드 크기를 대략적으로 추정합니다. 이 도구의 용도는 청구액을 예측하는 것이 아니라 성능을 측정하는 것입니다.

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

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

  • 합계: 해당 경로의 모든 작업을 통틀어 사용된 송수신 바이트의 합계입니다.

  • 개수: 해당 경로에서 발생한 작업 수입니다.

  • 평균: 해당 경로에서 작업을 통해 다운로드 또는 업로드된 평균 바이트 수(바이트/쓰기 또는 바이트/읽기)입니다.

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

색인화되지 않은 쿼리

색인화되지 않은 쿼리를 사용하면 클라이언트에서 특정 위치의 데이터를 모두 다운로드한 후 쿼리를 수행해야 하므로 비용이 많이 들 수 있습니다. 또한 필요한 것보다 많은 대역폭이 사용됩니다. 색인화되지 않은 쿼리를 최대한 많이 해결하여 데이터베이스 성능을 최적화하세요.

색인화되지 않은 쿼리 보고서는 다음 속성을 표시합니다.

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

고급 프로파일링

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

firebase database:profile --raw

원시 출력에는 각 작업의 userAgent 문자열, IP 주소와 같은 클라이언트 정보도 포함됩니다. Firebase Realtime Database에서 프로파일링되는 다양한 작업에 대해서는 Firebase Realtime Database 작업 유형을 참조하세요.

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

프로파일러 도구를 사용하여 대역폭 비용을 예측하지 마세요. 프로파일러 도구의 용도는 청구액을 추정하는 것이 아니라 데이터베이스의 성능을 전반적으로 파악하고, 운영 상태를 모니터링하고, 각종 문제를 해결하는 것입니다. 이 도구는 네트워크 트래픽을 고려하지 않고 응답으로 전송한 애플리케이션 데이터의 추정치만 기록합니다.

다음은 데이터베이스 프로필에 포함되지 않지만 Firebase에서 요금을 청구하는 네트워크 트래픽의 일반적인 예입니다.

  • 프로토콜 오버헤드: 세션을 설정하고 유지하려면 서버와 클라이언트 간에 추가적인 트래픽이 필요합니다. 기본 프로토콜에 따라 이 트래픽에는 Firebase 실시간 데이터베이스의 실시간 프로토콜 오버헤드, WebSocket 오버헤드, HTTP 헤더 오버헤드가 포함될 수 있습니다. 연결이 설정될 때마다 이 오버헤드와 함께 SSL 암호화 오버헤드가 연결 비용에 추가됩니다. 이 오버헤드는 일반적으로 많은 대역폭을 차지하지는 않지만 페이로드가 작거나 짧은 연결을 자주 하는 경우에는 상당한 부분을 차지할 수 있습니다.
  • SSL 암호화 오버헤드: 보안 연결에 필요한 SSL 암호화 오버헤드에 대해서도 비용�� 발생합니다. 평균적으로 이 비용은 초기 핸드셰이크의 경우 약 3.5KB, 각 발신 메시지의 TLS 레코드 헤더의 경우 약 40B입니다. 대부분의 앱은 이 비용이 요금에서 미미한 비중을 차지합니다. 그러나 SSL 핸드셰이크가 많이 필요한 경우라면 큰 비중을 차지하게 될 수 있습니다. 예를 들어 기기에서 TLS 세션 티켓을 지원하지 않는 경우 SSL 연결 핸드셰이크가 많이 필요할 수 있습니다.

청구 이해 및 추정에 대해 자세히 알아보세요.