최근 정보통신기술의 발전에 따라 우리가 다루는 데이터의 양이 비약적으로 증가했습니다. 데이터 엔지니어라는 데이터 전문 직업이 등장하며 데이터 활용 방법은 무한히 확장되었지만, 한편으로 데이터를 어떻게 관리할 것인가 하는 데이터 관리(Data Management)는 여전히 큰 과제 중 하나입니다.
이러한 데이터 관리 과제 중 하나는 DWH(데이터 웨어하우스)에서의 데이터 변환 흐름과 DWH 내에 산재해 있는 수많은 데이터베이스 간의 관계를 어떻게 관리할 것인가 하는 문제입니다. 이런 데이터 관리를 돕는 도구 중 하나가 이번에 소개할 dbt(Data Build Tool)입니다.
ETL(Extract, Transform, Load)의 개념처럼, 데이터 분석에서는 일반적으로 데이터베이스에서 데이터를 추출하고, 가공·변환 작업을 거쳐 필요한 데이터만 DWH(데이터 웨어하우스)로 통합하는 흐름이 전통적이었습니다. 하지만 대량의 원시 데이터(정렬 등의 처리를 하기 전의 초기 데이터)도 고속으로 처리할 수 있는 DWH 서비스들이 속속 등장함에 따라, 데이터를 우선 그대로 DWH에 저장한 뒤, 가공·변환 작업을 거쳐 다시 DWH 내의 다른 테이블로 반환하는 ELT(Extract, Load, Transform) 방식이 점점 더 일반화되고 있습니다.
dbt는 ELT에서 T(Transformation: 변환) 작업을 담당하는 도구로, 이 작업의 난이도를 낮추는 기능을 제공합니다. 또한, 작성된 SQL(데이터베이스에 대한 명령문)을 통해 DWH 상의 데이터베이스 간 관계를 추출하고, 이를 자동으로 모델링하는 데이터 모델링 기능을 갖추고 있습니다.
dbt는 특히 이용 요금 여부에 따라 크게 두 가지로 나뉩니다. 무료로 사용할 수 있으며 커맨드라인에서 작업하는 OSS 버전과, 이용 요금이 발생하지만 GUI 상에서 설정 및 작업이 가능한 dbt Cloud가 있습니다.
OSS 버전은 초기 도입 비용이 적고, 노하우만 있으면 자유롭게 개발할 수 있다는 점이 장점입니다. 반면, dbt Cloud는 SaaS 서비스로 제공되기 때문에 유지보수 및 운영의 부담이 없고, 사용하기 쉬운 점이 주요 장점으로 꼽힙니다.
dbt의 기능 중 특히 눈에 띄는 몇 가지를 소개합니다.
소프트웨어 분야에서는 소규모 개발 사이클을 신속하게 반복하는 애자일(Agile) 방법론이 주목받고 있습니다. 애자일을 뒷받침하는 체계 중 하나가 CI/CD로, 각 엔지니어가 작성한 코드에 대한 테스트와 프로덕션 환경으로의 배포를 어느 정도 자동화하여 개발 속도를 향상시키고, 작은 단위로 반복적인 릴리스를 통해 에러 발생 시 원인 파악을 용이하게 하는 효과를 제공합니다.
한편, dbt에서는 연동된 Git 리포지토리에 SQL을 Pull Request로 제출하면, 이를 감지한 dbt가 자동으로 SQL의 검증과 해당 SQL로 인한 영향 테스트 등을 수행합니다(CI 기능). 또한, 배포용 잡(Job)을 설정하여 배포까지 자동화하는 것도 가능합니다(CD 기능). 각 사용자의 SQL을 Git 리포지토리에서 버전 관리할 수 있어 agile 방식에 가까운 데이터 엔지니어링을 구현할 수 있습니다.
데이터는 매일 끊임없이 수집되고, 사내 데이터에 대한 요구도 끊임없이 변화하기 때문에 데이터 엔지니어링에서도 소규모 개편을 신속하게 반복하는 애자일 개념을 부분적으로 도입할 수 있는 dbt의 기능은 효과적으로 작용할 것으로 보입니다.
dbt는 데이터베이스 조작에 SQL을 사용합니다. 하지만 SQL의 SELECT문만 이해할 수 있다면 어느 정도 복잡한 데이터 가공도 가능합니다. 또한, Jinja를 활용한 유연한 작성 방식도 지원하여 데이터 가공의 진입 장벽을 낮춰줍니다.
특정 데이터에 대해 그 데이터가 어떤 것인지를 설명하는 "데이터에 대한 데이터"를 메타데이터라고 합니다. dbt는 특정 데이터베이스에 어떤 데이터가 포함되어 있는지, 어떤 데이터베이스를 가공하여 생성된 것인지 등의 정보를 문서화하여, 이른바 "데이터베이스 메타데이터"를 손쉽게 출력할 수 있습니다.
각 데이터베이스의 정보가 정리되어 있으면, 단순히 데이터베이스를 구분하기 쉬워지는 것뿐만 아니라 데이터베이스 배치를 최적화하기 위한 데이터 모델링에도 도움이 됩니다.
또한 사용자가 원하는 데이터베이스를 쉽게 검색할 수 있도록 지원하는 데이터 카탈로그 기능도 제공합니다.
dbt는 SQL문 내의 REF 함수를 기반으로 데이터베이스 간의 관계를 자동으로 추출하고, 모델 간의 관계를 도식화합니다. 이를 통해 모델 간의 관계를 한눈에 파악할 수 있어 데이터 리니지(Data Lineage)가 향상됩니다.
데이터 리니지의 향상뿐만 아니라, 이를 통해 현재 데이터베이스의 배치를 더 쉽게 파악할 수 있어 데이터 모델링을 지원하는 효과도 제공합니다.
데이터는 가공되지 않은 원시 데이터에서 시작하여 여러 번의 가공과 변환을 거쳐 사용자가 원하는 데이터베이스 형식으로 정리됩니다. 이 과정에서 데이터 가공 라인의 순서를 따라 SQL을 실행하지 않으면 올바른 가공 결과를 얻을 수 없기 때문에, 데이터 가공이 복잡할수록 절차에 주의가 필요합니다.
dbt는 앞서 언급한 REF 함수를 통해 데이터베이스 간의 의존 관계를 자동으로 인식하기 때문에, 사용자가 직접 실행 순서를 관리하지 않아도 일련의 데이터 가공을 올바른 순서대로 실행할 수 있습니다.
dbt가 DWH 활용을 강력 지원하는 기능을 갖추고 있다는 점을 인지 하셨을 것입니다.
하지만, 한편으로는 dbt를 도입하더라도 DWH로 데이터를 통합하는 단계에서 장애에 부딪히게 되면 dbt를 효과적으로 활용할 수 없습니다.
반대로, DWH로의 데이터 통합만 쉽게 처리할 수 있다고 해도 데이터를 자유롭게 가공하고 변환하지 못한다면 최적의 데이터 분석 기반을 구축할 수 없습니다.
이에 따라 당사가 제공하는 데이터 분석 기반 구축 서비스 TROCCO®는 dbt 연동 기능을 출시하였습니다.
dbt와의 연동을 통해 dbt 콘솔 화면으로 이동하지 않아도 TROCCO® 화면에서 dbt 작업(Job)을 설정할 수 있습니다.
또한, 데이터를 DWH로 통합하기까지의 ETL 작업에 더해, DWH 통합 후의 dbt 작업도 TROCCO®의 워크플로 기능으로 관리할 수 있게 되었습니다.
TROCCO®와 dbt의 장점을 살리고 단점을 상호 보완함으로써, 데이터 분석 기반 구축을 더욱 전폭 지원하는 도구가 되었습니다.
"DWH로의 ETL"과 "DWH 상에서의 ELT"를 모두 직접 수행하려면 데이터 엔지니어링에 대한 지식 습득 시간, 분석 기반 구축 비용, 그리고 유지 관리 비용까지 발생합니다.
하지만 비엔지니어들도 데이터 분석을 포기할 필요는 없습니다.
TROCCO®와 dbt와 같은 다양한 데이터 엔지니어링 도구를 활용하여 누구나 데이터 분석에 집중할 수 있는 체계를 마련해 보세요.
또한 TROCCO®는 무료 플랜 제공을 시작하여, 실제로 사용해 본 후 도입을 검토할 수 있습니다.
꼭 검토해 보시기 바랍니다.