샌프란시스코에서의 마지막 날. 처음에는 길게 느껴졌는데, 막상 마지막날은 금방 오네요. 이제 좀 이곳에서의 생활이 좀 적응된다 싶을때 떠나는 서운한 느낌도 있었습니다. 호텔 체크아웃 후 짐을 맡긴 뒤, 우버를 타고 행사장으로 출발하였습니다. 마지막날 세션들도 직접 업무와 관련되는 주제들이 많아서, 서운한 느낌은 금방 잊혀지고 기대감이 차올랐습니다.

Google 클라우드 넥스트에선, 세미나 세션 이외에 기업 엑스포도 상시 운영되었습니다. 

그림 1. 상시 운영되는 기업 엑스포

목차

Unlocking the Power of Google BigQuery

3일차의 첫번째 세션은 BigQuery의 새로운 기능을 소개하는 자리였는데, 이에 앞서 BigQuery에서 SQL 구문을 처리하는 과정을 설명하였습니다. 그 과정에서 필요한 메타데이터는 내부적으로 Spanner를 사용합니다. 

그림 2. BigQuery의 아키텍처

BigQuery에서 분할된 테이블을 업데이트 하는 절차는 다음과 같습니다. 먼저 Spanner에 저장된 메타데이터의 날짜 필터와 일치하는 스토리지 세트를 나열합니다. 다음으로 쿼리를 실행하여 영향을 받는 데이터로 찾아서 갱신합니다. 마지막으로사용하지 않는 스토리지 세트를 가비지 상태로 표시합니다. 이와 같이 독립된 처리가 반복해서 실행됩니다. 

한가지 팁으로 아래의 예시 코드와 같이 “FOR SYSTEM TIME AS OF” 구문을 이용하면 7일 이내의 특정 시점의 데이터를 조회할 수 있습니다. 따라서 실수로 UPDATE / DELETE / INSERT / MERGE 를 수행했을 때 복구할 수 있습니다. 모든 데이터는 Spanner에 저장된 메타데이터는 타임스탬프 값을 갖고 있기 때문에 가능합니다. 

    SELECT x, y
     FROM dataset.table
     FOR SYSTEM AS OF 
         TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 3 DAY)

필자의 생각으로는 데이터의 변경이 발생할 때 기존 데이터가 실제로 삭제되지 않고 타임스템프를 이용해 처리되는 것으로 예상됩니다. 

BigQuery의 성능을 개선하기 위해서는 데이터 입력 시 많은 용량을 적은 횟수로 적재하는 것이 좋습니다. 이를 위해 Google Cloud Storage(GCS)를 이용해 데이터를 로드하거나, 고속 스트리밍을 이용하거나, 가능한 여러개의 쿼리를 하나6의 쿼리로 변경하는 방법이 있습니다. 만약 여러분이 위와 같은 방법을 사용하지 않더라도 BigQuery의 백그라운드 프로세스는 스토리지 세트를 통합하여 잘게 나뉜 데이터를 결합합니다.

인포메이션 스키마 기능이 베타 버전으로 공개되었습니다. 이는 MySQL 등과 같은 RDBMS에서도 제공되는 SQL로 테이블 정보를 조회하는 기능입니다. 조회할 수 있는 정보는 다음과 같습니다. 

    SCHEMATA, SCHEMATA_OPTIONS
     TABLES, TABLE_OPTIONS
     VIEWS
     COLUMNS
     COLUMN_FEILD_PATHS

개인정보를 암호화하는 기능도 추가되었습니다. 먼저 BigQuery는 아래와 같은 기본적인 보안 기능을 제공합니다. 

  • BigQuery는 데이터를 모두 분리하여 가각ㄱ의 키로 암호를 저장하기 때문에 Google의 IDC에서 디스크를 탈취하더라도 그 정보를 볼 수가 없음
  • BigQuery API는 내부적으로 https 프로토콜을 사용
  • CMEK(고객별 암호화 키) 로 테이블을 암호화 가능
  • Google Cloud DLP(Data Loss Prevention) 를 통해 개인정보로 보이는 데이터를 자동으로 검출 할 수 있음

어떤 유저가 서비스에서 탈퇴하면 관련 개인정보를 모두 지워야 합니다. 이경우 개인정보를 DB에 저장한다면 수십, 수백 개의 데이터셋, 테이블에서 일일이 찾아 지우는 것은 매우 어려운 일입니다. 하지만 BigQuery의 경우 개인정보를 개인마다 발급된 키로 암호화할 수 있으므로, 모든 데이터를 일일이 지울 필요 없이 개인마다 발급된 암호화 키만 지우면 그 유저와 관련된 모든 정보를 삭제한 것과 같은 효과가 있습니다. 이 기능은 오픈 소스 Tink 라이브러리 기반이므로 Dataflow 등에서 암호화하고, BigQuery에서 복호화하는 것이 가능합니다. 

BigQuery의 스크립팅 기능이 알파 버전으로 발표되었습니다. 이는 스토어드 프로시저와 유사합니다. 복수의 구문을 한번에 실행할 수 있고, 변수를 사용할 수 있으며, 조건문이나 반복문을 사용할 수 있습니다. 

또한 Persistent UDF 기능도 알파 버전으로 발표되었습니다. MySQL 등과 같이 이제는 유저 정의 함수를 저장해두고 사용할 수 있습니다. 기존에는 이런 기능이 없어 같은 코드를 복사하여 붙여넣는 작업을 반복해서 할 수 밖에 없었지만 이제는 그런 수고가 불필요해졌습니다. 이상 알파 버전의 기능들은 Google의 커스터머 엔지니어 또는 어카운트 매니저에게 요청하여 이용할 수 있습니다. 

이번 세션의 말미에는 HOME Depot 사에서 BigQuery를 이용한 사례가 소개되었습니다. 이 회사는 15 PB 의 데이터를 BigQueyr에 적재하고 있으며, 마스터 1000 개 테이블, 팩트 4000개 테이블로 구성되어 있습니다. 이 데이터의 마이그레이션을 위해 Apache SQOOP를 이용했습니다. 여기서 마스터 데이터란 자주 변하지 않는 메타데이터로 그 변경에 대한 히스토리 관리 등이 필요합니다. BigQuery 사용 시에는 원본 데이터를 그대로 적재하고 변환하는 ELT 방식이 효과적입니다. 

Data Discovery in Google Cloud with Data Catalog

그림 3. GOJEK의 성장

발표자가 근무하는 Gojet은 인도네시아의 카카오와 같은 회사입니다. 사업이 확장되면서 데이터 사전이 절실히 필요해졌으며, Data Catalog를 활용하여 이 문제를 해결했습니다. 클라우드 데이터 플랫폼을 이용하면서 데이터가 커지고 데이터 분석가가 많아지면 필요한 데이터를 찾는데 많은 시간을 소비하게 됩니다. Data Catalog는 효율적으로 데이터 사전과 데이터 거버넌스를 구축할 수 있게 합니다. 

그림 4. GOJEK의 성장에 따른 데이터 복잡도의 증가

데이터 거버넌스란 거대화, 복잡화되는 데이터를 컨트롤 하기 위한 시스템입니다. GDPR, HIPAA, PCI DSS 등국가별 각종 법률에 따라 민감한 데이터는 더 중점적으로 관리 필요한 상황입니다. 따라서 데이터의 메타데이터 자체를 관리할 필요가 있습니다. 

Data Catalog의 특징은 다음과 같습니다. 

  • 데이터 발굴을 위해 필요한 명료한 검색 인터페이스를 제공
  • 모든 메타데이터의 처리를 위한 UI 뿐만 아니라 API도 지원
  • 도식화된 태그를 통해 비즈니스 메타데이터를 지원
  • GCP의 데이터 에셋에서 기술적 메타데이터를 자동으로 수집
  • DLP 연계를 통해 개인정보에 대한 태그를 자동으로 부여

Data Catalog는 완전히 관리되고 확장성이 뛰어난 데이터 발굴 및 메타데이터 관리 서비스입니다. 이종 시스템에 분산된 대량의 데이터를 보유한 조직은 효과적인 데이터 발굴 솔루션이 필요합니다. Data Catalog는 여러 프로젝트 및 시스템에 분산된 모든 데이터 자산의 통합된 데이터 검색을 제공합니다. 또한 비즈니스 메타 데이터에 공동 작업 방식으로 태그를 부여 할 수 있고, 데이터 거버넌스의 기초를 제공합니다. 비즈니스 메타데이터란 다음과 같은 정보를 포함합니다. 

  • 개인정보가 있는지, 개인정보의 유형이 무엇인지
  • 데이터의 공개 또는 비공개 여부
  • 데이터를 보관하는 기간
  • 데이터의 라이프사이클
  • 데이트가 프로덕션 또는 샌드박스, 테스트 시스템에서 수집된 것인지
  • 원본 데이터인지 또는 보정을 거친 데이터인지
  • 이 데이터의 생산자 또는 비즈니스 담당자가 누구인지

데이터에 대한 접근 권한 뿐만 아니라 검색 권한도 Google IAM과 연동을 통해 관리됩니다. 또한 Google DLP와 연동을 통해 BigQuery 내에 있는 개인정보 패턴을 자동 색출하여 사전에 저장할 수 있습니다. 

그림 5. IAM에 의한 메타데이터 거버넌스 적용 예시

Data Catalog는 수년간 널리 사용되는 Google 내부 메타 데이터 관리 서비스의 혁신과 아키텍처를 동일하게  활용합니다. 모든 메타 데이터 항목을 저장하기 위해 Spanner, 기술 메타 데이터를 자동으로 수집하기 위한 실시간 및 배치 동기화 프로그램, 데이터 발굴을 위한 Google 검색 색인 등이 활용됩니다. 

Modern Data Warehousing with BigQuery

전통적인 데이터 웨어하우징과 현대적 데이터 웨어하우징을 비교하면 아래의 그림과 같습니다. 현대적 데이터 웨어하우징의 필수요소는 데이터 웨어하우스(DW), 무한 저장소, 실시간성, 컴퓨팅 파워, 서버리스, 중앙 집중된 저장소, 데이터 공유, 보안과 고가용성, 그리고 머신러닝을 이용한 예측 등이 있습니다. 

그림 6. 전통정인 데이터 웨어하우징과 현대적 데이터 웨어하우징의 비교

AutoML Tables는 올해 출시된 AutoML의 신기술입니다. 매출, 재고 등과 같은 일반적으로 자주 사용하는 데이터는 정형화 데이터인 경우가 많습니다. BigQuery에 저장되어있거나 CSV 파일 형태이거나 이런 테이블 형테의 데이터를 위한 머신러닝 모델을 자동으로 추천해줍니다. 예를 들면 수요 예측, 재고 예상, 비용 최적화, 고객 LTV, 고객 전환, 사기 방지 등과 같은 모델을 활용할 수 있습니다. 

기존에 공개된 BigQuery ML은 실험과 개발 기간을 단축하고, 로지스틱 회귀 같은 단순한 모델에 대해 설명 가능하며, 다양한 모델과 SQL 인터페이스를 제공하는 등의 장점이 있습니다. 하지만 AutoML Tables는 코드 작성 없이 그래픽 UI만으로 최적의 모델을 발굴하고 활용할 수 있게 합니다. 또한 AutoML Tables는 BigQuery ML의 모델 유형 중 하나로 제공될 예정입니다. 

Cruise Automation 사는 자율 주행 자동차를 개발하는 회사입니다. 이 회사는 주행 시뮬레이션에 BigQuery 사용하여 성공적으로 데이터 웨어하우스를 운영할 수 있었습니다. 시뮬레이션에서는 각종 센서에서 오는 엄청나게 많은 데이터를 실시간으로 처리해야 합니다. 

이전에는 복잡하고 다양한 쿼리를 실행할 수 없었고, CPU 및 메모리를 수동으로 조정해야 했으며 시뮬레이션 시행 중 스케일링이 어려웠습니다. 또한 데이터 분석에 소요되는 시간이 과도했습니다. 그러나 BigQuery를 도입한 뒤에는 초다 수 GB의 데이터를 수집하고, 이를 실시간으로 집계할 수 있었으며, 스케일링이 자동으로 되었습니다. 

글을 마치며

Google Cloud Next 참가는 매우 유익한 경험이었습니다. 모든 세션에서 새로운 지식과 함께 색다른 인사이트를 얻을 수 있었고, 각 세션의 문답 시간마다 엄청난 질문들을 쏟아내는 해외 개발자들의 열정도 신선한 자극이 되었습니다. 세션 이외에도 많은 수확이 있었습니다.

개발자로 10년이 넘게 일하였지만, 이러한 해외 컨퍼런스 참여는 처음 있는 경험이었습니다. 사실 이 여정에 의문도 있었습니다. 요즘 세상에 기술적 지식은 인터넷으로도 모두 습득 가능한데, 컨퍼런스, 그것도 해외 컨퍼런스에 참가하는 것에 어떤 의미가 있을까 생각했습니다. 그 의문에 대한 나름의 해답을, 직접 다녀오고 나서 얻을 수 있었습니다. 

이 행사 참관은 업무의 일환으로서의 출장이었지만, 나홀로 해외 여행이기도 하였습니다. 김영하 작가의 <여행의 이유>라는 책에선 “여행하는 동안 우리는 일종의 위기 상황에 처하게 된다”라며 낯선 공간에서 내가 받아들여질 수 있을까 하는 두려움을 언급했고, “어떤 인간은 스스로 고통을 부과한 뒤, 그 고통이 자신을 파괴하지 못한다는 것을 확인하고자 한다. 그 때 경험하는 안도감이 너무나도 달콤하기 때문” 이라며 두려움이 즐거움과 연결된다고도 하였습니다. 저도 말도 잘 안통하는 샌프란시스코에 혼자 내던져지고, 외로움과 긴장, 미지에 대한 두려움등, 위기 상황이 있었습니다. 그런 고통을 여정속에서 해소해가는 기본적인 여행의 즐거움도 확실히 있었지만, 그 외에도 개발자로서 참가한 해외 개발 컨퍼런스에는 이에 더해 또 다른 특별한 고통 해소 경험이 있었습니다. 처음 컨퍼런스 회장에 갔을 때, 각각 다른 언어를 쓰고 다르게 생긴 수 많은 사람들이 모여있는 환경에서, 내가 이질적인 존재이고 받아들여지지 않을것 같은, 낯설고 불편한 느낌을 받았습니다. 하지만 세션 내용을 들으며, 같은 포인트에서 공감하며 박수를 치는 경험을 통해 그러한 낯설고 불편한 느낌이 없어졌습니다. 모두 다른 세계 사람들이지만, 나와 비슷한 생각을 하며 비슷하게 살아가는 사람들 같다, 그런 사람들이 이렇게 내 바로 옆에 실존한다는걸 알았습니다.

낯선 환경에 혼자 내 던져졌지만, 기술을 통해 공감하며, 직접 그들과 대화를 나눈것이 아님에도, 커뮤니케이션을 한 듯한 느낌을 받았습니다. 이 느낌은 달콤함으로 다가왔습니다. 그리고 이것이 기술에 대한 학습 의욕과 성장 욕구를 불러일으켰습니다. 제가 개발자로서 더 많은 성장을 하여 높은 기술력과 실적을 갖게 된다면, 이런 전 세계적인 공동체에 더욱 깊게 접근할 기회가 있을 것이고, 그 경험은 분명 오늘보다 달콤할 것이라 생각했습니다. 예를 들면 이런 글로벌 행사에서 외국 개발자들과 대화를 나누거나, 직접 발표를 하게되는 경험요. 그런 꿈을 얻어가는 감정적인 수확도, 본 행사 참관을 통해 얻을 수 있었습니다.

“어떤 인간은 스스로 고통을 부과한 뒤, 그 고통이 자신을 파괴하지 못한다는 것을 확인하고자 한다. 그 때 경험하는 안도감이 너무나도 달콤하기 때문이다.”

사실 세션의 내용이나 방금 이야기한 제 감상이나, 지식적으로는 인터넷만으로도 얻을 수 있습니다. 원하는 지식을 얻기 위한 것만이라면  Google에서 해당 키워드로 검색해서, 알고 싶은 부분만을 탐색해서 보는것이 가장 효율적입니다. 오프라인 컨퍼런스에서는 목적이 되는 정보를 얻는 시간 이외에도, 강연자의 자기소개나 인사말에 드는 시간, 그리고 행사장까지 이동에 드는 시간등, 불필요한 시간이 더 많았습니다. 하지만 이러한 반강제적인 시간 속에서 우연하게 얻는 불필요한 정보들이, 오히려 평소에는 생각하지 못한 것을 보게 해주었습니다. 그것을 인사이트라고도 하는거 같습니다. 아즈마 히로키 작가의 <약한 연결>이라는 책에서는 그런 종류의 우연한 경험을 “노이즈” 라고 하였고, 그것이 사고 회로를 확장시켜준다고 하였습니다. 내가 할 수 있는 발상은 내가 속한 환경이 만들어주는 범위로 제한되어 가는데, 그렇게 환경의 일부로서의 내가 아닌, 유일무이한 내가 되기 위해선 노이즈가 필요하다 하였습니다. 스스로의 신체가 놓여있는 환경이 일상과 매우 다른 곳일수록 더 큰 노이즈가 있을 것인데, 해외 컨퍼런스 참가가 바로 그런 경험을 할 수 있는 곳이었습니다.

해외 컨퍼런스 참가는, 제 개인적인 일이었다면 결코 시도해보지 않았을 것입니다. 제가 소속된 회사에서 Google Cloud Platform을 사용하고 있었고, 관련 업무를 진행하는 저에게 지원해준다 하였기에 경험할 수 있던 것입니다.

이것은 회사원으로서 제게 주어진 업무를 수행하는 것과는 관련이 없는 “노이즈” 이었고, 그것이 개발자로서 저 스스로의 자아정체감을 높여주었습니다. 그리고 그 경험은 제 인생에 있어서도 소중한 한 순간이 되었습니다.

이러한 노이즈를 선물해준 회사에 감사하며, 다른 사우들에게도 이러한 기회가 많이 올 것을 기대하며 후기를 마칩니다.

감사합니다.

조지훈

웹개발, 게임서버 개발자를 거쳐 현재는 게임빌컴투스플렛폼에서 데이터 엔지니어를 하고 있는 10년차 프로그래머 입니다. 플랫폼 사용자분들이 HIVE 애널리틱스를 통해 놀라운 인사이트를 얻고 독보적 시장 경쟁력을 확보할 수 있도록 돕는 일을 하고 있습니다. 제가 하는 일의 가치가 제가 받는 월급 몇 배 이상의 가치가 있는지 항상 생각하며 자부심을 가질 수 있도록 노력중입니다.


TOP