데이터 엔지니어링

BigQuery: 사용자를 위한 운영 및 관리 가이드

들어가며

BigQuery는 GCP(Google Cloud Platform)에서 제공하는 완전 관리형 엔터프라이즈 데이터 웨어하우스로, 대규모 데이터 분석을 수행할 수 있도록 설계되어있습니다. BigQuery는 데이터 처리량에 따라 과금이 부과되는 주문형 컴퓨팅 가격 요금제와일정한 예산 설정이 가능한 용량 컴퓨팅 가격 요금제를 제공하고 있습니다. 특히 사용량 기반 요금제의 경우, 관리와 최적화를 소홀히 할 경우 불필요한 비용이 발생할 가능성이 큽니다. 무작위로 쿼리를 실행하거나, 최적화되지 않은 데이터 구조를 사용할 경우 쿼리 실행 시간뿐만 아니라 과금도 급격히 증가할 수 있기 때문에 BigQuery 서비스를 효과적으로 운영하기 위해서 이용 목적에 따라서 비용 관리와 성능 최적화 전략을 적절하게 고려하는것이 중요합니다. 해당 가이드를 통해 BigQuery가 어떤 서비스를 제공하는지, 과금 체계는 어떻게 구성되는지를 알아보고 효율적인 비용 관리를 위한 예산 및 할당량 설정 전략과 함께 쿼리 실행과 스토리지 최적화 측면에서 운영 및 관리 전략을 차례로 살펴보고자 합니다.

BigQuery 소개

 

BigQuery는 Google Cloud Platform에서 제공하는 클라우드 네이티브 데이터 웨어하우스입니다. BigQuery는 서버리스 인프라로 구성되어있기 때문에 사용자가 리소스 관리 대신 데이터 자체에 더욱 집중할 수 있게 해줍니다.  BigQuery의 아키텍처 구조를 간단히 살펴보면 BigQuery는 데이터를 수집, 저장하고 최적화하는 스토리지 레이어와 분석 기능을 제공하는 컴퓨팅 레이어로 구성되어있습니다. 컴퓨팅 및 스토리지 레이어는 둘 사이에 필요한 통신을 가능하게 해주는 페타비트 규모의 구글 내부 네트워크(Jupiter network)를 타고 독립적으로 작동하고 있어 각 레이어가 독립적으로 동작할 수 있다는 특징을 가지고 있는데요, 그렇기에  각각의 레이어가 다른 레이어의 성능에 영향을 미치지 않고 리소스를 동적으로 할당할 수 있다는 장점이 있고 물리적으로 데이터센터 끝에서 끝에 있는 자원간에도 빠르게 통신할 수 있도록 구성되어있습니다. 또한 Google Cloud Storage, Google Sheets, 외부 클라우드 소스와 쉽게 통합할 수 있기 때문에 데이터 적재 및 분석 작업을 간편하게 수행할 수 있도록 해주는 등의 부가적인 기능들을 제공합니다.

 

BigQuery 과금 체계

사용자의 요구사항과 데이터 처리 규모에 따라 적합한 가격 모델을 선택하면 더욱 비용 효율적으로 BigQuery 서비스를 이용할 수 있습니다. 비용 효율적인 BigQuery 서비스 이용을 위해 사용자가 사용 목적에 따라 자유롭게 선택할 수 있는 과금 체계 구성에 대해 살펴보고자 합니다. BigQuery의 비용체계는 스토리지 가격 책정컴퓨팅 가격 책정으로 구성되어있습니다.

스토리지 가격 책정

먼저 스토리지 가격 책정 모델에 대해 살펴보고자 합니다. 스토리지 가격은 BigQuery에 로드한 데이터를 저장하는데 드는 비용으로, 활성 스토리지 및 장기 스토리지에 대한 비용이 나뉘어 부과됩니다. 기본적으로 매원 10GiB의 스토리지는 무료로 제공됩니다. 활성 스토리지에는 지난 90일 동안 수정된 모든 테이블 또는 테이블 파티션이 포함되고, 장기 스토리지에는 연속으로 90일 동안 수정되지 않은 모든 테이블과 테이블 파티션이 포함됩니다. 장기 스토리지의 경우, 약 50% 인하된 가격이 부과됩니다.

* 아래 소개된 BigQuery 스토리지 비용은 2024년 12월을 기준으로 소개되어있습니다.

컴퓨팅 가격 책정(주문형 가격 책정 VS 용량 가격 책정)

그 중 컴퓨팅 가격 책정 모델로는 온디맨드 형식의 주문형 가격(TiB당)과 정액제의 성격을 띄는 용량 가격(Slot 시간당)이 있습니다. 주문형 가격과 용량 가격의 과금 체계가 어떤 차이가 있는지 조금 더 자세하게 알아보도록 하겠습니다.

주문형 가격 책정의 경우,  BigQuery에서 쿼리를 실행할 때마다 처리된 데이터 크기(TiB당 6.25$)에 비례하여 비용이 발생하는 구조입니다. 사용한 데이터 처리량에 대해서만 비용을 지불하기 때문에 초기 투자 비용이 필요하지 않고 비용 관리가 비교적 간단합니다. 그렇기 때문에 데이터 분석 작업을 일정하지 않게 간헐적으로 수행하거나 데이터를 가끔 처리하는 경우 주문형 가격 책정 방식을 사용하는 것이 비용관리 측면에서 유리합니다. 다만, 대규모 데이터 분석과 같이 데이터 처리량이 많아지는 경우 비용이 급증할 수 있으므로 주의해야 합니다.

용량 가격 책정의 경우는 슬롯(Slot)을 사용한 만큼만 지불하거나, 미리 일정량을 지불하고 사용하는 방식으로 사용하며, 슬롯 사용량에 기반해 과금이 부과되는 요금제입니다.  BigQuery 슬롯(Slot)에 대해 간단히 설명드리면, BigQuery가 SQL 쿼리를 실행하는데 사용하는 가상 CPU를 말합니다. 용량 기반 가격 책정 모델의 경우 사용자가 예약할 슬롯의 개수를 명시적으로 설정하면, 설정된 최소 할당량과 최대 할당량 범위 안에서 실제 슬롯이 필요한만큼 자동 확장되어 데이터가 처리됩니다.  반드시 슬롯에 대한 선 구매가 이루어져야하는 것은 아니고, 매월 일정 개수의 슬롯을 선구매하여 사용할 수 있는 예약형 슬롯과 필요할 때마다 슬롯을 동적으로 할당받아 사용하는 동적 슬롯 중 상황에 맞게 선택하여 이용할 수 있습니다.

용량 가격 책정(예약형 슬롯 VS 동적 슬롯)

예약형 슬롯 요금제를 사용하면  예약한 슬롯 수만큼 리소스가 항상 보장되기 때문에 작업량이 많아도 추가 요금이 없어 예측 가능한 비용으로 BigQuery를 운영할 수 있습니다. 동적 슬롯은 온디맨드 요금제의 성격을 띄고있지만, 주문형 요금제의 경우는 처리된  byte수 별로 요금이 부과되는 반면, 동적 슬롯 요금제의 경우는 사용되는 슬롯 개수를 기준으로 요금이 부과된다는 차이점이 있습니다.  동적 슬롯 사용시에는 최소 1분 단위로 비용이 부과되기 때문에 새로운 슬롯을 1초만 사용하더라도 1분에 해당하는 비용을 지불해야 한다는 단점이 존재합니다.

동적 슬롯 요금제의 경우, BigQuery에서 쿼리 실행시 쿼리 크기와 복잡성에 다라서 각 쿼리에 필요한 슬롯의 개수를 자동으로 계산하는 방식으로 실행되기 때문에  용량 가격제를 이용할 때 BigQuery를 비용 효율적으로 사용하기 위해서는 적합한 양의 슬롯을 예약하는 것이 중요합니다. 또한 Slot은 Region별 리소스이기 때문에, 반드시 내가 사용할 Region의 슬롯을 예약해야 한다는 점을 기억하고 사용해야 합니다.

 

비용 최적화를 위한 BigQuery 실행 가이드

BigQuery 과금 체계 방식에서 살펴봤듯이, BigQuery는 데이터 처리량에 비례해 과금이 부과되는 요금체계를 가지고 있습니다. 그렇기에 효율적인 쿼리 실행 전략을 준수함으로써 낭비되는 비용을 최소화하고 서비스를 효율적으로 사용하는 것이 중요합니다. 따라서 쿼리 실행 전, 쿼리 실행 중, 쿼리 실행 후 결과 확인 단계에서 실천할 수 있는 효율적인 쿼리 실행 모니터링 전략을 살펴보고자 합니다.

  • 쿼리 실행 전 확인사항
    • BigQuery 콘솔 쿼리 실행 창 우측 상단에서 예상 데이터 처리량을 미리 확인할 수 있습니다. 쿼리를 실행하기 전 예상 처리량을 확인하여 비효율적인 쿼리 작성을 지양해야 합니다.
    • BigQuery는 필요한 열에 대해서만 스캔하기 때문에, 불필요한 열은 제외하고 실제로 필요한 열만 선택하는것이 좋습니다. 모든 열을 스캔하는 SELECT * 문을 무작위로 실행하는 것을 삼가 불필요한 데이터 처리량이 늘어나는 것을 방지할 수 있습니다.

 

  • 쿼리 실행 중 모니터링
    • 쿼리 결과 하단 ‘작업기록’ > ‘작업 세부정보’에서 실행된 각 작업의 처리량, 소요 시간, 실행 쿼리 정보를 확인할 수 있습니다.
    • 과도한 데이터 스캔이나 비효율적으로 작성된 쿼리가 있는지 쿼리 실행 도중에도 지속적인 모니터링을 진행해주는것이 좋습니다.
    • 반복적으로 실행되는 작업의 처리량과 비용을 분석하여, 최적화가 필요한 영역을 식별하고 개선할 수 있습니다.

 

  • 쿼리 실행 후 결과 확인
    • BigQuery 콘솔 > 모니터링  페이지에 접속하여 쿼리 실행 후 통계 데이터를 통해 실제로 스캔된 데이터 양과 비용을 확인 할 수 있습니다.
    • 쿼리 결과를 테이블로 저장해야 할 경우, 테이블 만들기 혹은 뷰를 생성해 결과를 저장하고 필요할 때 해당 결과를 조회할 수 있습니다.
    • BigQuery 모니터링을 통해 주기적으로 실행한 쿼리에 대해 모니터링을 진행해야 합니다. 필터를 설정해 특정 기간동안 실행된 쿼리의 데이터 처리량, 청구 비용 등을 확인할 수 있습니다.

비용 최적화를 위한 BigQuery 스토리지 최적화 가이드

쿼리 실행 측면에서의 최적화뿐만 아니라, BigQuery에서 스토리지 관리 최적화를 통해 비용을 절감할 수 있습니다. BigQuery 스토리지 최적화 방식에 대해 알아보기 전에, 기본적인 이해를 돕고자 빅쿼리가 데이터를 저장하는 방식에 대해 간단히 알아보도록 하겠습니다.

BigQuery는 데이터를 열 형식으로 저장합니다. 열 기반 데이터베이스는 중복성이 높은 데이터를 효과적으로 압축할 수 있게 되고, 이를 통해 쿼리 성능과 스토리지 비용이 모두 최적화 될 수 있습니다. 이러한 열 기반 데이터베이스의 특성으로 인해서 BigQuery에서 스토리지 최적화는 단순히 비용을 절감하는 것뿐만 아니라 쿼리 성능을 향상시켜 데이터 분석 워크로드를 더 효율적으로 관리할 수 있습니다.

 

테이블 클러스터링과 파티셔닝

BigQuery 스토리지 가격체계에 따르면, 활성 스토리지 및 장기 스토리지에 대한 비용이 나누어 부과되며 장기 스토리지는 활성 스토리지 대비 50% 할인된 가격의 과금이 부과된다는 사실을 ‘2.BigQuery 과금 체계’ 챕터에서 확인할 수 있었는데요, 장기 스토리지에는 연속으로 90일 동안 수정되지 않은 모든 테이블과 테이블 파티션이 포함되기 때문에, 하나의 테이블 내 포함되어있는 데이터라고 하더라도 테이블 파티셔닝을 통해 오래 처리되지 않은 특정 데이터에 대해 장기 스토리지 요금을 부과함으로써 비용을 절감할 수 있습니다. 파티션을 사용하면 일련의 열 특성(예) 수집 시간 등)에 따라 데이터를 그룹화하여 쿼리에서 읽는 바이트 수를 절감할 수 있기 때문입니다. 또한 자주 사용하는 열에 대해 클러스터링을 진행하게 되면, 스캔하는 데이터의 총량을 줄여 비용을 절감할 수 있습니다. 데이터베이스나 데이터 분석에서 자주 사용하는 열을 클러스터링하게되면, 특정 열에 저장된 데이터를 물리적으로 가까이 배치하여 데이터를 조회하거나 처리할 때 더 빠르게 접근할 수 있도록 데이터가 정렬되기  때문입니다. 그럼 이제 스토리지 최적화를 위해 테이블 클러스터링과 파티셔닝을 진행하는 방법에 대해 알아보도록 하겠습니다.

 

BigQuery 콘솔에서 적용하는 법

Step 1) 테이블 생성

BigQuery 콘솔에서 테이블을 생성할 데이터세트의 메뉴창을 열어 ‘테이블 만들기’를 클릭합니다.

 

Step 2) 파티셔닝 및 클러스터링 적용

  • 테이블 만들기 탭 하단에 ‘파티션 및 클러스터링 설정’에서 테이블의 사용 목적을 고려해 파티션과 클러스터 설정을 적용하여 테이블을 생성합니다. 파티션의 경우, 수집시간(날짜별, 시간별, 월별, 연도별)으로 파티션을 나눌 수 있습니다.
  • ‘파티션 나누기’ 하단에 있는  ‘데이터를 쿼리하려면 WHERE 절 필요’ 조건을 체크하는 경우, 데이터 쿼리 시, 날짜 범위 설정 없이 쿼리를 실행하는 작업을 제한하여 너무 많은 데이터 처리량이 발생하지 않도록 방지할 수 있습니다.
  • ‘클러스터링 순서’ 입력창에서 클러스터링할 필드를 최대 4개까지 지정할 수 있습니다. 클러스터링 순서에 따라 데이터 정렬 순서가 결정되므로 일반적으로 쿼리에서 자주 필터링되거나, 범위 스캔이 빈번히 일어나는 열을 선택하는 것이 좋습니다.

 

 쿼리문에서 파티셔닝과 클러스터링을 적용하는 법

테이블 생성 시, 아래와 같이 파티셔닝과 클러스터링을 적용하는 쿼리를 포함하여 테이블을 생성할 수 있습니다. 클러스터링 키는 한 번 설정되면 변경할 수 없으므로 새로운 테이블을 생성해야함을 유의하여 클러스터링 키를 적절하게 설정해야 합니다.

 

CREATE  TABLE `{project_id}.{dataset_id}.{new_table_name}`
PARTITION BY {date}
CLUSTER BY {standard_field} AS
SELECT *
FROM `{project_id}.{dataset_id}.{new_table_name}`;

 

BigQuery 예산 관리 가이드

BigQuery의 사용량 기반 과금 체계를 효과적으로 관리하기 위해서는, 예산 및 알림 설정을 적용할 수 있습니다. 예산 및 알림 설정 적용을 통해 예산 설정치에 도달했을 때에 대한 알림을 받을 수 있고, 이를 통해 예상치 않은 큰 금액의 과금 사고가 일어나기 전에 알림을 받고 조치를 취할 수 있습니다. BigQuery 예산 설정 및 모니터링 방식에 대해 차근차근 살펴보도록 하겠습니다.

  • 예산 설정 및 모니터링
    • 월간 예산을 설정하고, 예상 비용에 도달했을 때 알림을 받을 수 있도록 구성할 수 있습니다. GCP Console의 결제 > 예산 및 알림 메뉴를 통해 예산 경고를 설정할 수 있습니다.
    • 사용자는 특정 비용(예: 10만 원, 20만 원, 30만 원) 도달 시 알림을 받도록 구성하여 비용 증가를 실시간으로 모니터링할 수 있습니다.
    • 결제 > 예산 및 알림 페이지에서 사용자 정의 알림 트리거를 설정하여 일전 수준 이상의 금액에 도달했을 때, 이메일 등으로 알림을 받을 수 있도록 사용자 이메일을 등록할 수 있습니다. 알림 관리 탭에서 ‘이 예산에 모니터링 알림 연결’을 체크한 후, 프로젝트 1개당 최대 5개의 이메일 계정을 연결할 수 있습니다.

 

 

  • 비용 분석
    • BigQuery Monitoring에서는 사용량 및 비용 패턴을 시간별, 작업별, 프로젝트 및 사용자별로 분석할 수 있습니다.
    • 시간별 비용 분석
      원하는 특정 시간대를 설정하여, 해당 시간대에 집중적으로 발생하는 데이터 처리량 및 비용을 파악할 수 있습니다. 사용량이 급증하는 시간대가 있다면, 해당 쿼리 실행 작업 기록을 조회해 데이터 처리량이 급증하는 원인을 분석할 수 있습니다.
    • 작업별 비용 분석
      개별 쿼리 또는 작업의 리소스 사용량과 발생 비용을 비교 분석하여 비효율적인 작업을 식별합니다. 비용이 많이 발생하는 쿼리를 집중적으로 점검하여 쿼리 최적화를 진행해야 합니다.
    • 프로젝트 및 사용자별 사용량 분석
      프로젝트 또는 사용자별로 세분화된 사용 데이터를 확인하여, 리소스 낭비를 초래하는 특정 사용자의 작업을 식별하고 관리할 수 있습니다.

BigQuery 과금 할당량 설정

예산 설정 및 알림 뿐 아니라, 특정 금액 이상이 과금될 시, 더이상의 과금이 부과되지 않게 과금 할당량을 설정하고 관리할 수 있습니다. 과금 할당량을 설정하여 예산을 체계적으로 관리하고, 의도치 않은 과금 사고를 사전에 예방하는 것은 단순한 비용 관리 이상의 의미를 가지며, 사용자가 플랫폼을 효율적으로 활용하도록 돕는 중요한 도구입니다.

  • 할당량 설정
    • GCP > IAM > 할당량 및 시스템 한도 > ‘BigQuery 검색’ 에서 의도치 않은 과금 사고를 예방하기 위해 BigQuery 과금 할당량을 설정합니다.
    • 일일 데이터 처리량, 사용자별 쿼리 실행 한도 등을 개별적으로 제한하여 사용 규모에 맞게 과금 한도를 관리할 수 있습니다.
  • GCP IAM 역할 및 권한 설정
    • GCP의 Cloud IAM을 활용하면 BigQuery 리소스에 대한 접근 권한을 세밀하게 제어할 수 있습니다.
    • 프로젝트, 데이터세트, 테이블 수준에서 접근 권한을 제한하여, 불필요한 데이터 액세스를 방지하고 보안을 강화할 수 있습니다.
    • 특정 사용자 그룹에 할당량 제한을 적용해, 예상치 못한 과도한 리소스 사용을 방지할 수 있습니다.

정리하며

다시한번 정리하면, BigQuery는 Google Cloud Platform에서 제공하는 데이터 웨어하우스 솔루션으로 대규모 데이터 분석과 실시간 처리를 지원하며, 클라우드 환경에서 확장성과 편의성을 제공합니다. 그러나 잘못된 운영과 관리로 불필요한 비용이 발생할 가능성이 있기 때문에 이를 방지하고 효율적인 활용을 위해 효율적인 쿼리 실행 전략, 예산 및 할당량 설정, 스토리지 최적화를 통한 비용 관리 전략을 기억하고 준수해야 합니다. 이를 실천함으로써 비용 최적화를 통해 불필요한 과금을 방지할 수 있을 뿐만 아니라 데이터 분석의 효율성을 높일 수 있다는 사실을 기억해주시면 좋겠습니다.

 

 

 

reference

BigQuery 개요

BigQuery 가격 책정

BigQuery에서 스토리지 최적화

BigQuery 스토리지 개요

BigQuery에서 스토리지와 컴퓨팅 분리

Share this post

About the author

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다