잡플래닛 메타베이스 도입기

잡플래닛의 데이터 문화와 BI 툴 메타베이스 활용 방법을 소개합니다. 메타베이스를 통해 조직의 데이터 활용과 민주화를 실현하는 방법을 알아보세요.
강민구's avatar
Jun 04, 2024
잡플래닛 메타베이스 도입기
 

1. 들어가며

안녕하세요. 잡플래닛 Data Insight & Strategy팀(이하 DIS팀)의 Business Intelligence Analyst 강민구입니다.
DIS팀은 데이터가 흐르는 조직을 만듭니다. 데이터가 흐르는 조직이란 “데이터가 체계적으로 정리되어 있고 모든 구성원이 높은 수준의 데이터 문해력을 갖추고 있어서 쉽고 빠르게 데이터를 이해하고 활용하는 조직”입니다.
구성원이 데이터를 이해하고 활용하도록 하기 위해서 잡플래닛은 태블로, 메타베이스의 두 가지 BI 툴을 사용하고 있습니다. 이번 포스트는 잡플래닛의 메타베이스 활용 방법과 이를 통해 변화시킨 데이터 문화에 대해 다룹니다. 메타베이스를 통한 BI 환경 구축과 데이터 민주화 과정에 관심이 있는 분들에게 도움이 되기를 바랍니다.
( 본 포스트는 OpenSource Self-Hosting 환경의 Metabase 0.49.9 버전을 기준으로 작성되었습니다. )
 

2. 기존 BI 환경

스쿼드와 팀 단위로 프로덕트를 관리하는 잡플래닛의 주요 지표들은 스프레드시트에서 모니터링되고 있었습니다. 하지만 추출한 데이터를 날마다 붙여 넣어야 하며, 데이터 형태에 따라 시각화 방식이 제한되는 점이 불편했습니다.
상기 불편함을 개선하고, 데이터 활용을 통한 의사결정을 강화하고자 2024년 초 태블로를 도입하여 지표를 시각화하고 대시보드를 구현하였습니다. 하지만 1인당 비용이 많이 드는 태블로의 특성상 엄격한 권한 관리가 필수적이었고, 제작된 대시보드는 전체 조직에 공유되기 어렵다는 한계를 가지게 되었습니다.
 

3. 메타베이스 선택 이유

위와 같은 이유로 태블로 외의 BI 툴 도입이 필요하다고 판단하였고, 선택을 위한 기준을 세웠습니다.
1. 단일 서비스 어카운트를 통해 데이터에 접근하고, 개인별 권한 관리가 가능할 것. 2. 누구나 쿼리를 작성할 수 있고, 결과를 확인할 수 있는 환경을 제공할 것. 3. 누구나 단일 데이터를 원하는 형태로 시각화하여 다양한 측면을 살펴볼 수 있도록 할 것.
데이터 기반 의사결정을 위한 필요조건 중 하나는 데이터를 쉽고 빠르게 추출하는 것입니다. 이를 위해서는 비즈니스 조직에서 데이터를 추출할 때 의존성이 낮아야 합니다. 이를 위해서는 조건 2번의 충족 여부가 가장 중요했습니다. 따라서, 잡플래닛은 BI 툴의 환경 내에서 쿼리 작성이 가능한 메타베이스를 도입하였습니다.
 
현재 잡플래닛은 데이터 리터러시 문화 확립을 위해, 전달하고자 하는 지표와 데이터의 성격에 따라 두 가지 BI 툴을 유기적으로 사용 중입니다.
  • 태블로 : 전사 KPI, IR 지표
  • 메타베이스 : 스쿼드 단위 OKR 지표, Ad-hoc 데이터 요청 처리
 

4. 데이터 활용을 위한 메타베이스 사용법

메타베이스의 도입으로 인해, 데이터를 다양한 방식으로 보고자 하는 니즈가 많이 증가하였습니다. 또한, 데이터 팀에 의존했던 과거와 달리 스스로 쿼리를 작성해 업무에 활용하고자 하는 팀도 있었습니다. 이러한 니즈를 만족시키기 위한 DIS 팀과 PDA 팀의 메타베이스 기능 사용법을 소개합니다.
( 단, 본 포스트에서는 메타베이스 설치에 대해 다루지 않습니다. 설치와 DB 연결, 사후 관리에 대해서는 메타베이스 docs를 참고해 주세요. https://www.metabase.com/docs/latest/installation-and-operation/start )
 

4.1. 메타베이스 구조 파악

기능 설명에 앞서 메타베이스라는 BI 툴의 Product와 Admin Setting 구조에 대해 전반적으로 살펴보겠습니다.

4.1.1. Product

  • Query : 연결된 DB에서 원하는 데이터를 추출할 수 있는 쿼리를 의미합니다.
  • Dashboard : Query를 통해 추출한 데이터의 시각화와 분석을 위해 설계된 인터페이스입니다.
  • Model : 테이블 생성 및 저장, 시각화 등 다양한 기능을 제공합니다.
    • 새로운 테이블을 생성하고 저장하여 추후 해당 테이블을 메타베이스에서 사용할 수 있도록 합니다.
    • Summarize 기능을 통해 UI/UX를 기반으로 집계형 테이블을 생성하고 저장할 수 있습니다.
    • 이러한 기능은 쿼리 작성에 익숙 않은 구성원도 원하는 데이터 추출을 가능하게 합니다.
    • 데이터 digging이 가능한 환경을 제공하기 때문에, 데이터 문해력 상승을 위해 중요한 기능입니다.
  • Collection : product를 저장하는 폴더입니다. Collection 하위에 Sub collection이 위치할 수 있습니다.
 

4.1.2. Admin

  • People : 메타베이스 접근 권한이 있는 구성원을 의미합니다.
  • Group : People 각각이 속한 그룹을 의미합니다.
  • Permission : Database, Table, Native query editing, Collection에 대한 Access 권한을 의미합니다.
    • 세부 access 권한은 아래와 같이 구성되며, Group 단위로 설정 가능합니다.
        1. Database
            • Unrestricted : 그룹이 해당 DB를 사용하는 product에 접근 가능하도록 허용합니다.
            • Granular : 그룹이 해당 DB의 특정 테이블을 사용하는 product에만 접근 가능하도록 합니다.
            • No self-service : 그룹이 해당 DB에 접근할 수 없도록 제한합니다.
        1. Table : Database 권한이 Granular로 설정된 경우, 하위 access 권한입니다.
            • Unrestricted : 그룹이 해당 테이블을 사용하는 product에 접근 가능하도록 허용합니다.
            • No self-service : 그룹이 해당 테이블에 접근할 수 없도록 제한합니다.
        1. Native query editing
            • Yes : 그룹의 쿼리 작성/수정을 허용합니다.
            • No : 그룹의 쿼리 작성/수정을 제한합니다.
        1. Collection
            • Curate : 그룹이 해당 Collection을 보고, 편집 가능하도록 허용합니다.
            • View : 그룹이 해당 Collection을 보는 기능만을 허용합니다.
            • No access : 그룹이 해당 Collection에 접근할 수 없도록 제한합니다.
 
  • 예를 들어, DIS 그룹의 권한이 아래와 같다고 가정해 보겠습니다. (색과 종류는 무관합니다)
    • Collection Name
      Collection access
      DB Name
      Database access
      Native query editing
      collection_1
      Curate
      DB_1
      Unrestricted
      Yes
      collection_2
      No access
      DB_1
      Unrestricted
      Yes
      collection_3
      View
      DB_2
      Unrestricted
      No
    • collection_1에서는 DB_1의 테이블을 사용한 product를 자유롭게 생성하고 편집할 수 있습니다.
    • collection_2에 대한 접근 권한이 제한되었으므로 해당 collection은 DIS 팀에게 노출되지 않습니다.
    • collection_3에 저장된 product 중, DB_2를 사용하는 것들은 모두 볼 수는 있으나 수정은 불가합니다.
 
  • 정리하자면, 각 그룹이 collection에 대해 가지는 권한이 우선시됩니다. 그 후, collection 내부의 product가 사용하는 DB와 해당 DB에 대한 쿼리 수정 권한이 무엇이냐에 따라 각 그룹의 최종 권한이 정해집니다.
 

4.2. 쿼리를 직접 작성해서 데이터를 추출하고자 하는 니즈

쿼리 작성 및 조회를 위해서, 요청한 그룹에 권한을 제공해야 합니다. 메타베이스의 권한 부여 화면은 아래와 같은데요. (1) 해당 데이터베이스에 대한 접근 권한을 설정하고 (2) 쿼리 수정 권한을 설정하는 순서로 이루어집니다.
notion image
위 화면은 Test 그룹이 사용하는 데이터베이스인 Database_2에 대한 (1) Data accessUnrestricted로 설정하여 권한을 열어주고 (2) 쿼리 편집을 위해 Native query editingYes로 설정한 예시입니다.
 

4.3. 구성원별 접근 가능 쿼리 차등화 니즈

메타베이스에 적재된 쿼리 수가 증가함에 따라 특정 쿼리 접근 권한 세분화에 대한 니즈가 있었습니다.
이 니즈를 해결한 방식을 소개하기 위해서는 메타베이스의 쿼리 적재 방식에 대한 이해가 선행되어야 합니다. 작성된 쿼리는 Collection에 적재되고, 각 Collection에 대해 유저 그룹마다 뷰/수정 권한을 부여할 수 있습니다. 아래 그림을 보시면 이해에 도움이 될 것 같습니다.
 
notion image
 
Exampe_Collection에 적재된 쿼리에 대해 Group4에는 뷰 권한을, Group6에는 수정 권한을 부여한 예시입니다. 반면 나머지 그룹에게는 어떤 권한도 제공하지 않았으므로, 해당 Collection의 존재 여부조차 알 수 없습니다.
위 권한 부여 방법을 응용하여, 세 단계를 거쳐 접근 가능 쿼리에 대한 차등화를 구현했습니다.
  1. Main Collection에 적재된 쿼리를 등급에 따라 구분한다.
  1. Main Collection 내에 등급별 쿼리를 적재할 sub-collection을 생성한다.
  1. 1에서 구분된 각각의 쿼리를 Sub-collection에 적재한다.
  1. 메인 Group 내에 Sub-group을 생성하여 각 Sub-collection에 대한 access 권한을 부여한다.
Main Collection
Sub-collection
Main Group
Sub-group
access
Sales
Sales_rank_1
DIS
DIS_A
수정 권한
Sales_rank_2
DIS
DIS_A
수정 권한
Sales_rank_2
DIS
DIS_B
뷰 권한
위 표는 DIS_ASales_rank_1, Sales_rank_2에 수정 권한이 있도록 하고 DIS_BSales_rank_2에 대해 뷰 권한만 부여한 예시입니다. 즉, DIS_A에 속한 구성원은 전체 쿼리를 편집할 수 있으나 DIS_B에 속한 구성원은 Sales_rank_2에 적재된 쿼리의 결과만을 확인할 수 있는 차등 권한 구조입니다.
 

4.4. 다양한 조건을 통해 데이터를 보고자 하는 니즈

메타베이스 도입 이후 데이터 확인이 용이해졌습니다. 이에 따라 Date, Text, Numeric 등 다양한 자료형의 조건을 적용하여 데이터를 세분화해서 보고자 하는 니즈가 급증했습니다. 이 니즈를 충족시키기 위해 메타베이스의 필터 기능을 통해 입력값에 따라 조건이 적용되도록 쿼리를 작성했습니다. 이번 절에서는 필터 기능의 공통적인 사용법과, 자료형별 세부 설정 방법을 소개합니다.
 

4.4.1. 공통 사용법

  1. 쿼리 작성 시에는 공통적으로 {{ }} 을 사용해서 필터 변수를 감싸 필터를 정의합니다.
    1. SELECT ... FROM sample_DB.smaple_table -- 대상을 중괄호 두개로 감싸서 필터로 사용 가능합니다. WHERE condition_column = {{filter}} ...
 
  1. 쿼리를 작성하면, 필터의 자료형 및 디폴트 값 설정을 위한 윈도우가 생깁니다.
  1. 초기 설정 이후부터는 해당 필터값을 변경하여 원하는 조건을 적용할 수 있습니다.
    1. notion image
 

4.4.2. Date, Text, Number Filter

날짜, 텍스트, 숫자 조건인 경우에는 아래와 같이 {{ }} 로 감싼 후, 필터의 자료형과 디폴트값을 정하면 됩니다.
SELECT ... FROM sample_DB.smaple_table -- 1. Date Filter WHERE date_column = DATE({{date_filter}}) -- 2. Text Filter WHERE text_column = {{text_filter}} -- 3. Number Filter WHERE numeric_column > {{number_filter}} ...
 

4.4.3. Field Filter

메타베이스는 Field Filter라는 필터 기능을 제공합니다. 이는 대시보드 구현을 위해 유용하게 사용되는 필터로서, 쿼리의 조건과 테이블의 컬럼을 연결하는 역할을 합니다. 위 세 가지 필터를 사용해 조건을 구현해도 문제는 없지만 Field Filter 사용 시 아래의 장점이 있어 효율적인 업무가 가능했습니다.
  • 컬럼의 유니크 값을 가져와 필터를 만들기에, 텍스트 필터 사용 시 값을 입력하는 리소스가 감소했습니다.
  • 기존 Date Filter에 비해 date range, year & month, Relative Date 등 다양한 선택지를 제공합니다.
  • 차트에 Field Filter가 적용되어 있는 경우, 해당 필터를 대시보드에서 그대로 사용할 수 있습니다.
필터를 설정과 동시에 조건절에서 값을 비교할 컬럼을 정해준 셈입니다. 따라서 쿼리 작성 방법은 다른 필터에 비해 훨씬 간단합니다. 이에 더해 필터 설정 윈도우에서 사용할 테이블과 컬럼을 정의해주면 됩니다.
SELECT ... FROM sample_DB.smaple_table -- Field Filter WHERE {{field_filter}} ...
 
간단한 구문만으로도 해당 컬럼에 조건이 걸려있음을 인식합니다. 2024년 5월의 값을 추출하는 Date Range 필터를 예로 들어보겠습니다. 실제로 메타베이스에서 쿼리를 작성할 때 사용되는 WHERE 절은 아래와 같습니다.
WHERE {{range_filter}}
 
하지만, 쿼리가 이를 인식할 때는 다음과 같이 인식합니다.
WHERE DATE_TRUNC(`sample_DB.smaple_table`.`dt`, day) BETWEEN date("2024-05-01") AND date("2024-05-31")
 
이와 같이, 정말 짧은 구문으로 원하는 기능을 하도록 필터를 구현할 수 있도록 하는 것이 Field Filter입니다. 다만 해당 필터는 DB 상에 사용할 테이블이 적재되어 있다는 전제하에 사용 가능하기 때문에, 쿼리 내에서 가공한 값을 사용한 Field Filter를 만들 수는 없습니다.
 

4.4.4. Optional Filter

대부분의 조건은 위 네 가지 자료형으로 구현 가능합니다. 하지만 쿼리에 따라서 특정 조건의 사용이 필수적이지 않은 경우도 있습니다. 메타베이스의 경우 일반적인 필터가 정의되면 값을 반드시 넣어주어야 쿼리가 정상적으로 작동하기 때문에, 필요한 필터만 사용할 수 있는 기능을 제공합니다.
선택적으로 사용할 필터를 정의할 수 있는 기능인데요, 이를 optional filter라고 합니다. 선택적으로 사용하고자 하는 각 조건을 [[ ]] 로 감싸주기만 하면 해당 필터에 값이 필수적으로 정의되지 않아도 쿼리가 정상적으로 작동합니다. 사용 쿼리 예시는 아래와 같습니다.
SELECT date_column , text_column , numeric_column FROM data_table_name WHERE True -- [[ ]]로 각 조건을 묶어 optional filter를 적용 [[AND DATE(date_column, 'Asia/Seoul') = DATE({{date}})]] [[AND text_column like {{text}}]] AND numeric_column = {{num}}
위 쿼리의 경우 date_column, text_column 조건은 선택적으로 걸어줄 수 있지만, numeric_column 은 조건이 정의되어야 쿼리가 정상적으로 작동합니다.
 

4.5. 데이터 시각화 및 대시보드 구현

4.5.1. Visualization

데이터 시각화에 있어 메타베이스는 사용자에게 직관적인 인터페이스를 제공합니다. 하단의 Visualization 클릭 시 나타나는 팝업의 버튼을 클릭하면 테이블 구조에 맞게 데이터가 시각화되어 노출됩니다. Axis, Label, Color 등의 세부 설정은 우측의 ⚙️ 버튼 클릭 시 가능합니다. 현재는 2024년 4월에 릴리즈된 metabase 0.49.9 기준 17개의 시각화 방식을 제공하고 있습니다.
쿼리 편집창에서의 Visualization 편집창
쿼리 편집창에서의 Visualization 편집창
비데이터 직군의 사용자가 실무적인 필요성에 맞춰 차트를 조정하고 지표를 모니터링하는 데 있어서, 직관적인 인터페이스 바탕의 간편한 편집 기능이 효율성을 높여주고 있습니다.
 

4.5.2. Dashboard

메타베이스는 지표에 연관된 차트들을 단일 캔버스에서 볼 수 있는 대시보드 생성을 지원합니다. 대부분의 설정이 버튼으로 조작 가능하기 때문에 복잡도가 굉장히 낮아 구성원들의 데이터 활용 장벽을 크게 낮춰주고 있습니다. 필터 노출 영역이 정해져 있어 자유도가 떨어지는 단점이 있지만, click behavior 기능을 통해 인터랙티브 대시보드를 지원해 주기에 효과적인 구현이 가능합니다.
아래 사진은 대시보드 편집 중 필터 설정 화면입니다. 우측 상단 5개의 버튼을 사용해 대시보드를 구현합니다. 각 버튼은 차트 추가 / 텍스트 추가 / 링크 추가 / 화면 구성 설정 / 필터 설정을 위한 버튼입니다.
notion image
 
대시보드는 다양한 지표를 공통된 기준으로 관찰하고 인사이트를 도출할 때 가장 효과적으로 작용합니다. 이를 위해서 각 차트에 적합한 형태의 필터를 적용하는 것이 중요한데요, 메타베이스는 4.3.3 절에서 상술한 Field Filter를 사용해서 필터를 구현합니다. 아래에 명시한 총 5가지의 필터 타입을 지원하며, 각 타입에 대한 세부 설정 역시 가능합니다. 위 화면은 Time 필터의 Single Date 타입을 사용한 예시입니다.
  • Time
  • ID
  • Text or categories
 
  • Location
  • Number
 

4.5.3. 잡플래닛의 Dashboard 관리 / 사용법

상술했듯이, 잡플래닛은 스쿼드와 팀 단위의 업무를 진행합니다. 각 스쿼드의 프로덕트는 Product Data Analyst가 전담하여 지표를 모니터링합니다. 전사적인 지표 혹은 분석가가 부재한 팀의 지표는 DIS팀에서 관리하고 대시보드를 생성합니다. 각 스쿼드, 팀별 프로덕트가 분리되고 지표 사용 목적이 상이함에 따라 다양한 집계 기준으로 제작된 대시보드가 존재합니다.
 
  • Live Time : 대시보드 Auto Refresh 기능을 통해, 실시간으로 매출과 트렌드를 모니터링합니다.
  • Daily : Daily Scrum, PO meeting 시 모니터링에 사용합니다.
    • 지표의 전일 대비 증감폭을 모니터링하여 프로덕트 배포 및 외부 요인에 의한 영향을 파악합니다.
  • Weekly : WBR 시 스쿼드별 OKR 모니터링, 주차별 전략 수립에 사용합니다.
    • 스쿼드별 주요 지표의 주간 트렌드를 확인하고 각 지표를 통합적으로 분석합니다.
    • 분석 내용을 기반으로 지표 개선을 위한 협업 프로세스를 정하며, 차주 진행할 전략을 수립합니다.
  • Monthly, Yearly : 전사 KPI 평가에 사용합니다.
    • 트렌드를 시각화하여 시즈널리티와 증감폭을 파악하고, 이를 반영한 월별 전략을 수립합니다.
    • 전년 대비 성과를 비교하여 회사의 성장세를 모니터링합니다.
 
아래는 각 집계 기준에 대한 대시보드 화면입니다.
1. Live Time : 유저 멤버십 모니터링 대시보드
1. Live Time : 유저 멤버십 모니터링 대시보드
 
3. Daily : 유저 멤버십 프로덕트 모니터링 대시보드
3. Daily : 유저 멤버십 프로덕트 모니터링 대시보드
 
5. Monthly : 제휴 프로덕트 모니터링 대시보드
5. Monthly : 제휴 프로덕트 모니터링 대시보드
2. Weekly : 유저 현황 모니터링 대시보드
2. Weekly : 유저 현황 모니터링 대시보드
 
4. Monthly : 채용 프로덕트 모니터링 대시보드
4. Monthly : 채용 프로덕트 모니터링 대시보드
 
6. Monthly : 채용 / 영업 사업부 지표 모니터링 대시보드
6. Monthly : 채용 / 영업 사업부 지표 모니터링 대시보드

5. 결론과 회고

5.1. 결론

메타베이스의 도입은 잡플래닛의 데이터 기반 의사결정 속도와 문화를 크게 변화시켰습니다.
  1. 메타베이스 대시보드를 기반으로 WBR을 진행하고, 차주의 전략을 세울 수 있게 되었습니다. 기존에는 다루는 지표의 종류가 변하는 경우가 잦았고, 관련 인사이트를 자세히 기술하고 있었습니다. 따라서 KPI, OKR 기반 소통이라는 WBR의 취지에 완전히 부합하지 못했습니다. 메타베이스 도입 후에는 스쿼드별 주요 지표를 다루는 대시보드를 공유해 진행 상황을 모니터링하고 빠르게 주차별 전략을 세우고 있습니다.
  1. 메타베이스의 직관적인 사용성을 기반으로, 데이터 드리븐 의사결정 문화가 자리 잡는 중입니다. 메타베이스는 다양한 필터링 기능을 제공합니다. 이에 따라 데이터 요청자가 스스로 데이터 디깅(digging)하는 환경이 만들어졌습니다. 초기 요청 시 고려하지 않았던 부분까지 파악할 수 있게 되면서, 데이터 기반 의사결정이 자리를 잡았고 고도화되고 있습니다. 결과적으로, 잡플래닛은 메타베이스가 데이터 활용의 장벽을 낮추고 데이터 문해력을 키우는 데에 핵심적인 역할을 수행할 수 있도록 활용하고 있습니다.
이렇게 메타베이스의 도입이 성공함에 따라, 잡플래닛은 두 가지 BI 툴을 적극적으로 사용하고 있습니다. 데이터와 지표의 목적별로 적합한 BI 툴을 유연하게 사용하고, 차트를 통해 상황을 빠르게 진단할 수 있는 데이터가 흐르는 조직이 되어가는 중입니다.

5.2. 회고

메타베이스의 docs는 체계적으로 정리되어 있지만, 실사용 커뮤니티는 타 BI 툴에 비해 활성화되지 않은 편입니다. 이러한 이유로, 잡플래닛 데이터 조직은 내부에서 활발한 실험을 거쳐 다양한 기능의 사용법을 정리하고 공유해왔습니다. 상술한 필터 적용 및 권한 관리 방법은 다양한 실험을 통해 나온 값진 결과물입니다. 잡플래닛에 해당 방안을 적용했을 때 원하는 기대효과를 얻을 수 있을지 끊임없이 고민하고 논의했기에, 메타베이스가 성공적으로 도입될 수 있었으리라 자부합니다. 본 포스팅의 내용이 메타베이스를 사용하시는 분들과 데이터 문화를 만들고자 하시는 분들께 큰 도움이 되었으면 합니다.
 

6. 마치며

대부분의 사람에게 BI 툴이란, 복잡한 데이터를 이해하기 쉽게 시각화하는 역할을 수행하는 툴에 가깝습니다. 하지만 BI 툴의 또 다른 역할은 전사에 동일한 기준으로 추출된 데이터를 제공한다는 것입니다. 이는 부서 간 협업 속도와 의사결정의 신뢰성을 높이고, 결과의 예측 가능성과 일관성을 증가시킨다는 점에서 아주 중요합니다. 잡플래닛의 데이터 조직은 이러한 중요성을 최우선으로 생각하며, BI 툴 기반의 데이터 공유를 통해 전사 데이터 문해력 향상 및 데이터 드리븐 의사결정을 위한 환경을 지속적으로 구축하고 있습니다.
 
끝으로, 저희와 함께 데이터가 흐르는 조직을 만들어갈 Business Data Analyst(DIS Team Lead)와 Analytics Engineer를 모시고 있습니다. 데이터가 흐르는 조직을 만들고 문화를 바꾸는 새로운 도전을 함께하실 분들의 많은 지원 부탁드립니다.
Share article
Subscribe to 잡플래닛 테크블로그
RSSPowered by inblog