데이터 레이크형 Cloud Storage

이 문서에서는 Google Cloud에서 데이터 레이크를 사용하는 방법을 설명합니다. 데이터 레이크는 비즈니스 운영의 모든 측면을 데이터 형태로 캡처할 수 있는 유연성을 제공합니다. 이러한 데이터는 시간이 지남에 따라 페타바이트, 심지어 엑사바이트 단위로 누적될 수 있지만, 이제는 저장소와 컴퓨팅이 분리됨에 따라 이전보다 경제적으로 이 모든 데이터를 저장할 수 있게 되었습니다.

데이터를 포착하여 저장한 후 다양한 처리 기법을 동원하여 유용한 정보를 추출할 수 있습니다. 지금까지 비즈니스 분석에 표준적으로 사용되는 방식은 데이터 웨어하우징이었습니다. 그러나 이 방식에는 주문, 주문 세부정보, 인벤토리 등 잘 알려진 데이터 유형에 대한 상당히 경직된 스키마가 필요합니다. 기존의 데이터 웨어하우징으로만 분석 시스템을 구축하면 잘 정의된 스키마에 맞지 않는 데이터가 삭제되어 영영 손실되는 경우가 많아서 데이터 처리에 어려움이 있습니다.

모든 데이터에서 유용한 정보를 추출하는 것이 가능할 때만 데이터 웨어하우징에서 벗어나 데이터 레이크의 '모든 것을 저장하는' 접근 방식으로 전환할 필요성이 있습니다. 데이터 사이언티스트, 엔지니어, 분석가는 자신이 선택한 애널리틱스 도구를 사용하여 레이크의 데이터를 처리 및 분석하고 싶어하는 경우가 많습니다. 또한 레이크는 여러 데이터 소스에서 보내는 막대한 양의 데이터를 소화할 능력이 있어야 합니다.

여기서는 이러한 점을 고려하면서 Google Cloud에 데이터 레이크를 빌드하는 방법을 설명합니다. 다음 다이어그램은 데이터 레이크 솔루션의 주요 단계를 보여줍니다.

데이터 레이크 솔루션의 주요 단계

이 문서에서는 각 단계를 자세히 살펴보고 Google Cloud의 활용 방법을 설명합니다.

저장소: Cloud Storage를 데이터 레이크로 사용

Cloud Storage가 중앙 저장소로 적합한 여러 가지 이유는 다음과 같습니다.

성능 및 내구성: Cloud Storage에서 데이터 레이크를 작은 파일 몇 개로 시작하여 엑사바이트 규모로 키울 수 있습니다. Cloud Storage는 Pub/Sub와 같은 다른 서비스와 연동하여 새 데이터를 대량으로 수집하고 저장된 데이터를 대량으로 소비할 수 있습니다. 데이터 레이크에서는 성능도 중요하지만 내구성은 더욱 더 중요하며, Cloud Storage는 연간 내구성 99.999999999%로 설계되었습니다.

Strong consistency: Cloud Storage가 다른 객체 스토리지와 차별화되는 주요 특징 중 하나는 쓰기 후 읽기 작업, 버킷 및 객체 나열, 리소스에 대한 액세스 권한 부여와 같은 시나리오에서 strong consistency를 지원한다는 점입니다. 이러한 일관성이 지원되지 않으면 데이터 처리가 가능한 시점을 알아내기 위해 많은 시간을 들여 복잡한 해결 방법을 구현해야 합니다.

비용 효율성: Cloud Storage는 다양한 액세스 패턴과 가용성 니즈에 맞춰 다양한 가격으로 여러 스토리지 클래스를 제공하므로 데이터 액세스에 대한 비용과 빈도를 유연하게 절충할 수 있습니다. 성능 저하 없이 일관된 API를 사용하여 다양한 스토리지 클래스의 데이터에 액세스할 수 있습니다. 예를 들어 수명 주기 정책으로 사용 빈도가 낮은 데이터를 Cloud Storage Nearline, Cloud Storage Coldline 또는 Cloud Storage Archive에 저장한 후 나중에 1초 미만의 지연 시간으로 액세스하여 머신러닝용 학습 데이터를 수집할 수 있습니다.

유연한 처리: Cloud Storage는 기본적으로 BigQuery, Dataproc(Hadoop 생태계), 서버리스 분석용 Dataflow, Video Intelligence API, Cloud Vision, AI Platform과 같은 강력한 여러 가지 Google Cloud 서비스와 통합되므로 개발자는 데이터 분석에 적합한 도구를 유연하게 선택할 수 있습니다.

중앙 저장소: Cloud Storage는 여러 팀과 부서에서 데이터를 저장하고 액세스하는 중앙 위치를 제공하므로 여러 데이터 사일로를 유지하면서 동기화할 필요가 없습니다.

보안: 데이터 레이크는 모든 유형의 데이터를 저장하도록 설계되므로 기업은 데이터 유출을 방지하기 위해 강력한 액세스 제어 기능을 요구합니다. Cloud Storage는 데이터 애셋의 액세스를 세밀하게 제어하는 여러 가지 메커니즘을 제공합니다.

내부 데이터화

데이터 레이크 아키텍처는 사물 인터넷(IoT) 센서, 웹사이트 클릭 스트림 활동, 온라인 트랜잭션 처리(OLTP) 데이터, 온프레미스 데이터 등의 다양한 데이터 소스에서 가변적인 양으로 유입되는 데이터를 내부 데이터화할 수 있어야 합니다. 이 섹션에서는 Google Cloud에서 다양한 수집 사용 사례를 어떻게 지원하는지 알아봅니다.

Pub/Sub 및 Dataflow: 실시간 데이터를 수집하고 Cloud Storage에 직접 저장하면서 데이터 양에 대응하여 규모를 수평으로 확장 또는 축소할 수 있습니다.

Storage Transfer Service: 대량의 데이터를 옮기는 작업이 명령어 하나로 간단히 끝나는 경우는 거의 없습니다. 주기적 데이터 전송을 예약하거나, 소스와 싱크 간에 파일을 동기화하거나, 필터에 따라 선택적으로 파일을 이동하는 등의 여러 가지 문제를 처리해야 합니다. Storage Transfer Service는 이러한 태스크를 수행하는 견고한 메커니즘을 제공합니다.

gsutil: 일회성으로 전송하거나 수동으로 전송을 시작하려는 경우 Windows, Linux, Mac용으로 제공되는 오픈소스 명령줄 도구인 gsutil을 사용해 볼 수 있습니다. 이 도구는 멀티 스레드 전송, 처리식 전송, 병렬 복합 업로드, 재시도, 재개 기능을 지원합니다.

Transfer Appliance: 분석을 위해 대량의 데이터를 클라우드로 마이그레이션하려는 경우 네트워크 대역폭에 따라 Transfer Appliance로 오프라인 마이그레이션을 수행하여 시간을 절약할 수 있습니다.

자세한 내용 및 내부 데이터화 옵션을 선택하는 주요 의사결정 기준은 내부 데이터화 옵션 개요를 참조하세요.

처리 및 분석

데이터를 내부 데이터화하여 저장한 후 다음 단계는 데이터를 분석용으로 제공하는 것입니다. 경우에 따라서는 내부 데이터화 후 잘 알려진 스키마로 즉시 데이터를 저장하여 간편하게 즉각적으로 쿼리할 수 있습니다. 예를 들어 수신 데이터를 Cloud Storage에 Avro 형식으로 저장하면 다음을 수행할 수 있습니다.

  • Dataproc에서 Hive를 사용하여 데이터에 SQL 쿼리를 실행합니다.
  • BigQuery에서 데이터에 대한 직접 쿼리를 실행합니다.
  • 데이터를 BigQuery에 로드한 후 쿼리합니다.

그러나 내부 데이터화 및 저장 과정에서 데이터를 잘 알려진 스키마로 변환할 수 없는 경우도 있습니다. 사실, 데이터 웨어하우스 대신 데이터 레이크를 유지하는 가장 큰 이유는 이후에 유용한 정보를 추출할 수 있도록 모든 데이터를 저장하는 것입니다. 워크플로는 관련된 원시 데이터의 특성 및 분석 유형에 따라 단순할 수도, 복잡할 수도 있습니다. 아래 다이어그램은 대략적인 개요를 보여줍니다.

데이터 레이크 워크플로의 대략적인 개요

데이터 마이닝 및 탐색

레이크에 저장되는 데이터 중 상당 부분은 즉시 소비할 준비가 된 상태가 아니므로, 우선 데이터 마이닝을 통해 잠재 가치를 발굴해야 합니다. Google Cloud는 원시 데이터를 탐색하는 데 사용되는 도구인 Jupyter Notebook에 대응하여 완전 관리형 Jupyter Notebook 서비스인 Datalab을 제공합니다.

Datalab에는 TensorFlow 및 NumPy와 같은 널리 사용되는 다양한 데이터 과학 라이브러리가 사전 설치되어 있습니다. Datalab뿐만 아니라 Dataproc에서 기존의 Hadoop 생태계에 속하는 도구를 사용하고 Dataflow로 완전한 서버리스 분석을 수행할 수 있습니다. 이러한 제품은 강력한 SQL 기반 분석을 위해 Trifacta의 Dataprep을 사용하여 원시 데이터를 변환하고 BigQuery에 로드할 수 있습니다.

레이크에 있는 원시 데이터 중 일부에서 잠재적인 분석 가치를 발견한 경우 해당 데이터를 폭넓은 사용자에게 제공할 수 있습니다.

워크플로 설계 및 구축

데이터 중 일부를 폭넓게 제공한다는 것은 위 다이어그램에 표현되었듯이 집중된 데이터 마트를 만든다는 의미입니다. 원시 데이터를 가져와서 다운스트림 프로세스 및 사용자가 소비할 수 있는 형식으로 변환하도록 조정된 데이터 파이프라인을 사용하면 이러한 데이터 마트를 최신 상태로 유지할 수 있습니다. 이러한 파이프라인은 데이터의 특성과 사용하는 분석 유형에 따라 달라집니다. 다음은 일반적인 분석 워크플로와 이러한 워크플로를 Google Cloud에서 구현하는 방법입니다.

원시 데이터를 변환하여 BigQuery에 로드

아래 다이어그램은 단순하지만 널리 사용되는 워크플로입니다. 여기에서는 추출, 변환, 로드(ETL) 프로세스를 사용하여 데이터를 BigQuery 데이터 웨어하우스로 내부 데이터화합니다. 그러면 SQL을 사용하여 데이터를 쿼리할 수 있습니다. 데이터 정리 및 준비에 사용되는 시각적 도구인 Dataprep은 간단한 ETL 작업에 적합하며 Dataflow와 Apache Beam은 본격적인 ETL 작업에 유연성을 더해줍니다.

데이터를 BigQuery에 로드하는 워크플로

일괄 분석

일괄 분석을 위해 Hadoop 제품 생태계를 활용하려는 경우라면 변환된 데이터를 별도의 Cloud Storage 위치에 저장하세요. 그러면 Dataproc에서 Spark, Spark SQL, SQL on Hive와 같은 도구를 사용하여 이 데이터에 쿼리를 실행할 수 있습니다. 이러한 정제된 데이터에는 Apache Avro, Apache Parquet, Apache ORC 형식이 널리 사용됩니다. 이 워크플로를 다이어그램으로 요약하면 다음과 같습니다.

일괄 분석에 Hadoop 제품 사용

실시간 분석

간결한 SQL 기반 파이프라인이 필요한 경우 BigQuery의 스트림 처리를 통해 내부 데이터화와 동시에 데이터를 쿼리할 수 있습니다. Pub/Sub 및 Dataflow와 Beam을 추가하면 심화된 스트림 처리 기능이 제공되므로 사용자가 BigQuery에 데이터를 저장하기 전에 집계, 기간 설정, 필터링을 수행할 수 있습니다. 시계열 분석의 경우 수집된 데이터를 Cloud Bigtable에 저장하여 빠른 분석을 지원할 수 있습니다. 이 워크플로를 다이어그램으로 나타내면 다음과 같습니다.

실시간 분석을 위해 Cloud Bigtable에 데이터 저장

머신러닝

머신러닝을 통해 데이터 레이크의 방대한 데이터로부터 엄청난 가치를 창출할 수 있습니다. 유용한 학습 데이터, 관련 데이터 준비 단계, 머신러닝 네트워크 아키텍처가 식별되면 아래 다이어그램에 표시된 여러 단계를 적절히 조정할 수 있습니다. AI Platform을 사용하면 손쉽게 모델을 개선하고 일괄 및 온라인 예측에 활용할 수 있습니다.

머신러닝을 위해 데이터 조정

머신러닝 사용 사례에 따라서는 커스텀 모델을 설계하고 학습시킬 필요가 없습니다. Google Cloud에는 음성, 시각, video intelligence, 자연어 처리를 위한 사전 학습 모델이 포함되어 있습니다. 이러한 경우 오디오, 이미지 또는 동영상과 같은 적절한 입력을 해당 Google Cloud 서비스에 전달하기만 하면 됩니다. 그런 다음 유용한 메타데이터를 추출하여 BigQuery 등의 서비스에 저장한 후 추가로 쿼리하고 분석할 수 있습니다. 이 흐름을 다이어그램으로 나타내면 다음과 같습니다.

사전 학습된 머신러닝 모델 사용

다음 단계